[
  {
    "path": "C++/README.txt",
    "content": "ļ嵥\r\nliveness.cpp\r\nliveness.hͷļ\r\nsvm_modelѵsvmģ\r\nsvm_minmaxʱһĲ\r\n./lbpLBPȡ\r\n./libsvm-3.19LibSVM\r\n\r\nҪĿcppļ\r\nliveness.cpp\r\n./lbp/lbp.cpp\r\n./lbp/histogram.cpp\r\n./libsvm-3.19/svm.cpp\r\nõͷļΪ\r\n#include\"liveness.h\"\r\n\r\nʹõOpenCV汾Ϊ3.0.0-RC1\r\n\r\nʹõݿNUAA, PRINT-ATTACK, CASIA\r\nЩⲻճ\r\n\r\n\r\nclass ThuVisionFaceLiveCheck{\r\npublic:\r\n\t// Initialization: successful - true; failed - false\r\n\tbool Init();\r\n\t// Liveness Predict: input image path or Mat. \r\n\t// If it is a real face, return true; otherwise, return false\r\n\tbool Check(std::string imgPath);\r\n\tbool Check(cv::Mat img);\r\nprivate:\r\n\tint img_size;\r\n\tint LBP_size;\r\n\tsvm_model* model;\r\n\tdouble* Feature_Max;\r\n\tdouble* Feature_Min;\r\n\tvector<int> mapping_r8;\r\n\tvector<int> mapping_r16;\r\n};"
  },
  {
    "path": "C++/lbp/CMakeLists.txt",
    "content": "PROJECT(githublbp)\nSET(CMAKE_BUILD_TYPE Release)\nCMAKE_MINIMUM_REQUIRED( VERSION 2.6 )\nFIND_PACKAGE( OpenCV REQUIRED )\nADD_EXECUTABLE(lbp main.cpp lbp.cpp histogram.cpp)\nTARGET_LINK_LIBRARIES(lbp ${OpenCV_LIBS})\n"
  },
  {
    "path": "C++/lbp/LICENSE",
    "content": "Copyright (c) 2011, philipp <bytefish[at]gmx.de>\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * 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    * Neither the name of the organization nor the\n      names of its contributors may be used to endorse or promote products\n      derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n"
  },
  {
    "path": "C++/lbp/histogram.cpp",
    "content": "#include \"histogram.hpp\"\n#include <vector>\n\ntemplate <typename _Tp>\nvoid lbp::histogram_(const Mat& src, Mat& hist, int numPatterns) {\n\thist = Mat::zeros(1, numPatterns, CV_32SC1);\n\tfor(int i = 0; i < src.rows; i++) {\n\t\tfor(int j = 0; j < src.cols; j++) {\n\t\t\tint bin = src.at<_Tp>(i,j);\n\t\t\thist.at<int>(0,bin) += 1;\n\t\t}\n\t}\n}\n\ntemplate <typename _Tp>\ndouble lbp::chi_square_(const Mat& histogram0, const Mat& histogram1) {\n\tif(histogram0.type() != histogram1.type())\n\t\t\tCV_Error(CV_StsBadArg, \"Histograms must be of equal type.\");\n\tif(histogram0.rows != 1 || histogram0.rows != histogram1.rows || histogram0.cols != histogram1.cols)\n\t\t\tCV_Error(CV_StsBadArg, \"Histograms must be of equal dimension.\");\n\tdouble result = 0.0;\n\tfor(int i=0; i < histogram0.cols; i++) {\n\t\tdouble a = histogram0.at<_Tp>(0,i) - histogram1.at<_Tp>(0,i);\n\t\tdouble b = histogram0.at<_Tp>(0,i) + histogram1.at<_Tp>(0,i);\n\t\tif(abs(b) > numeric_limits<double>::epsilon()) {\n\t\t\tresult+=(a*a)/b;\n\t\t}\n\t}\n\treturn result;\n}\n\n\nvoid lbp::spatial_histogram(const Mat& src, Mat& hist, int numPatterns, const Size& window, int overlap) {\n\tint width = src.cols;\n\tint height = src.rows;\n\tvector<Mat> histograms;\n\tfor(int x=0; x < width - window.width + 1; x+=(window.width-overlap)) {\n\t\tfor(int y=0; y < height-window.height + 1; y+=(window.height-overlap)) {\n\t\t\tMat cell = Mat(src, Rect(x,y,window.width, window.height));\n\t\t\thistograms.push_back(histogram(cell, numPatterns));\n\t\t}\n\t}\n\thist.create(1, histograms.size()*numPatterns, CV_32SC1);\n\t// i know this is a bit lame now... feel free to make this a bit more efficient...\n\tfor(int histIdx=0; histIdx < histograms.size(); histIdx++) {\n\t\tfor(int valIdx = 0; valIdx < numPatterns; valIdx++) {\n\t\t\tint y = histIdx*numPatterns+valIdx;\n\t\t\thist.at<int>(0,y) = histograms[histIdx].at<int>(valIdx);\n\t\t}\n\t}\n}\n\n// wrappers\nvoid lbp::histogram(const Mat& src, Mat& hist, int numPatterns) {\n\tswitch(src.type()) {\n\t\tcase CV_8SC1: histogram_<char>(src, hist, numPatterns); break;\n\t\tcase CV_8UC1: histogram_<unsigned char>(src, hist, numPatterns); break;\n\t\tcase CV_16SC1: histogram_<short>(src, hist, numPatterns); break;\n\t\tcase CV_16UC1: histogram_<unsigned short>(src, hist, numPatterns); break;\n\t\tcase CV_32SC1: histogram_<int>(src, hist, numPatterns); break;\n\t}\n}\n\ndouble lbp::chi_square(const Mat& histogram0, const Mat& histogram1) {\n\tswitch(histogram0.type()) {\n\t\tcase CV_8SC1: return chi_square_<char>(histogram0,histogram1); break;\n\t\tcase CV_8UC1: return chi_square_<unsigned char>(histogram0,histogram1); break;\n\t\tcase CV_16SC1: return chi_square_<short>(histogram0, histogram1); break;\n\t\tcase CV_16UC1: return chi_square_<unsigned short>(histogram0,histogram1); break;\n\t\tcase CV_32SC1: return chi_square_<int>(histogram0,histogram1); break;\n\t}\n}\n\nvoid lbp::spatial_histogram(const Mat& src, Mat& dst, int numPatterns, int gridx, int gridy, int overlap) {\n\tint width = static_cast<int>(floor(src.cols / gridx));\n\tint height = static_cast<int>(floor(src.rows / gridy));\n\tspatial_histogram(src, dst, numPatterns, Size_<int>(width, height), overlap);\n}\n\n// Mat return type functions\nMat lbp::histogram(const Mat& src, int numPatterns) {\n\tMat hist;\n\thistogram(src, hist, numPatterns);\n\treturn hist;\n}\n\n\nMat lbp::spatial_histogram(const Mat& src, int numPatterns, const Size& window, int overlap) {\n\tMat hist;\n\tspatial_histogram(src, hist, numPatterns, window, overlap);\n\treturn hist;\n}\n\n\nMat lbp::spatial_histogram(const Mat& src, int numPatterns, int gridx, int gridy, int overlap) {\n\tMat hist;\n\tspatial_histogram(src, hist, numPatterns, gridx, gridy, overlap);\n\treturn hist;\n}\n"
  },
  {
    "path": "C++/lbp/histogram.hpp",
    "content": "#ifndef HISTOGRAM_HPP_\n#define HISTOGRAM_HPP_\n\n//! \\author philipp <bytefish[at]gmx[dot]de>\n//! \\copyright BSD, see LICENSE.\n\n#include <cv.h>\n#include <limits>\n\nusing namespace cv;\nusing namespace std;\n\nnamespace lbp {\n\n// templated functions\ntemplate <typename _Tp>\nvoid histogram_(const Mat& src, Mat& hist, int numPatterns);\n\ntemplate <typename _Tp>\ndouble chi_square_(const Mat& histogram0, const Mat& histogram1);\n\n// non-templated functions\nvoid spatial_histogram(const Mat& src, Mat& spatialhist, int numPatterns, const Size& window, int overlap=0);\n\n// wrapper functions\nvoid spatial_histogram(const Mat& src, Mat& spatialhist, int numPatterns, int gridx=8, int gridy=8, int overlap=0);\nvoid histogram(const Mat& src, Mat& hist, int numPatterns);\ndouble chi_square(const Mat& histogram0, const Mat& histogram1);\n\n// Mat return type functions\nMat histogram(const Mat& src, int numPatterns);\nMat spatial_histogram(const Mat& src, int numPatterns, const Size& window, int overlap=0);\nMat spatial_histogram(const Mat& src, int numPatterns, int gridx=8, int gridy=8, int overlap=0);\n}\n#endif\n"
  },
  {
    "path": "C++/lbp/lbp.cpp",
    "content": "#include \"lbp.hpp\"\n#define M_PI 3.14159265358979323846\n\nusing namespace cv;\n\ntemplate <typename _Tp>\nvoid lbp::OLBP_(const Mat& src, Mat& dst) {\n\tdst = Mat::zeros(src.rows-2, src.cols-2, CV_8UC1);\n\tfor(int i=1;i<src.rows-1;i++) {\n\t\tfor(int j=1;j<src.cols-1;j++) {\n\t\t\t_Tp center = src.at<_Tp>(i,j);\n\t\t\tunsigned char code = 0;\n\t\t\tcode |= (src.at<_Tp>(i-1,j-1) > center) << 7;\n\t\t\tcode |= (src.at<_Tp>(i-1,j) > center) << 6;\n\t\t\tcode |= (src.at<_Tp>(i-1,j+1) > center) << 5;\n\t\t\tcode |= (src.at<_Tp>(i,j+1) > center) << 4;\n\t\t\tcode |= (src.at<_Tp>(i+1,j+1) > center) << 3;\n\t\t\tcode |= (src.at<_Tp>(i+1,j) > center) << 2;\n\t\t\tcode |= (src.at<_Tp>(i+1,j-1) > center) << 1;\n\t\t\tcode |= (src.at<_Tp>(i,j-1) > center) << 0;\n\t\t\tdst.at<unsigned char>(i-1,j-1) = code;\n\t\t}\n\t}\n}\n\ntemplate <typename _Tp>\nvoid lbp::ELBP_(const Mat& src, Mat& dst, int radius, int neighbors) {\n\tneighbors = max(min(neighbors,31),1); // set bounds...\n\t// Note: alternatively you can switch to the new OpenCV Mat_\n\t// type system to define an unsigned int matrix... I am probably\n\t// mistaken here, but I didn't see an unsigned int representation\n\t// in OpenCV's classic typesystem...\n\tdst = Mat::zeros(src.rows-2*radius, src.cols-2*radius, CV_32SC1);\n\tfor(int n=0; n<neighbors; n++) {\n\t\t// sample points\n\t\tfloat x = static_cast<float>(radius) * cos(2.0*M_PI*n/static_cast<float>(neighbors));\n\t\tfloat y = static_cast<float>(radius) * -sin(2.0*M_PI*n/static_cast<float>(neighbors));\n\t\t// relative indices\n\t\tint fx = static_cast<int>(floor(x));\n\t\tint fy = static_cast<int>(floor(y));\n\t\tint cx = static_cast<int>(ceil(x));\n\t\tint cy = static_cast<int>(ceil(y));\n\t\t// fractional part\n\t\tfloat ty = y - fy;\n\t\tfloat tx = x - fx;\n\t\t// set interpolation weights\n\t\tfloat w1 = (1 - tx) * (1 - ty);\n\t\tfloat w2 =      tx  * (1 - ty);\n\t\tfloat w3 = (1 - tx) *      ty;\n\t\tfloat w4 =      tx  *      ty;\n\t\t// iterate through your data\n\t\tfor(int i=radius; i < src.rows-radius;i++) {\n\t\t\tfor(int j=radius;j < src.cols-radius;j++) {\n\t\t\t\tfloat t = w1*src.at<_Tp>(i+fy,j+fx) + w2*src.at<_Tp>(i+fy,j+cx) + w3*src.at<_Tp>(i+cy,j+fx) + w4*src.at<_Tp>(i+cy,j+cx);\n\t\t\t\t// we are dealing with floating point precision, so add some little tolerance\n\t\t\t\tdst.at<int>(i-radius,j-radius) += ((t > src.at<_Tp>(i,j)) && (abs(t-src.at<_Tp>(i,j)) > std::numeric_limits<float>::epsilon())) << n;\n\t\t\t}\n\t\t}\n\t}\n}\n\ntemplate <typename _Tp>\nvoid lbp::VARLBP_(const Mat& src, Mat& dst, int radius, int neighbors) {\n\tmax(min(neighbors,31),1); // set bounds\n\tdst = Mat::zeros(src.rows-2*radius, src.cols-2*radius, CV_32FC1); //! result\n\t// allocate some memory for temporary on-line variance calculations\n\tMat _mean = Mat::zeros(src.rows, src.cols, CV_32FC1);\n\tMat _delta = Mat::zeros(src.rows, src.cols, CV_32FC1);\n\tMat _m2 = Mat::zeros(src.rows, src.cols, CV_32FC1);\n\tfor(int n=0; n<neighbors; n++) {\n\t\t// sample points\n\t\tfloat x = static_cast<float>(radius) * cos(2.0*M_PI*n/static_cast<float>(neighbors));\n\t\tfloat y = static_cast<float>(radius) * -sin(2.0*M_PI*n/static_cast<float>(neighbors));\n\t\t// relative indices\n\t\tint fx = static_cast<int>(floor(x));\n\t\tint fy = static_cast<int>(floor(y));\n\t\tint cx = static_cast<int>(ceil(x));\n\t\tint cy = static_cast<int>(ceil(y));\n\t\t// fractional part\n\t\tfloat ty = y - fy;\n\t\tfloat tx = x - fx;\n\t\t// set interpolation weights\n\t\tfloat w1 = (1 - tx) * (1 - ty);\n\t\tfloat w2 =      tx  * (1 - ty);\n\t\tfloat w3 = (1 - tx) *      ty;\n\t\tfloat w4 =      tx  *      ty;\n\t\t// iterate through your data\n\t\tfor(int i=radius; i < src.rows-radius;i++) {\n\t\t\tfor(int j=radius;j < src.cols-radius;j++) {\n\t\t\t\tfloat t = w1*src.at<_Tp>(i+fy,j+fx) + w2*src.at<_Tp>(i+fy,j+cx) + w3*src.at<_Tp>(i+cy,j+fx) + w4*src.at<_Tp>(i+cy,j+cx);\n\t\t\t\t_delta.at<float>(i,j) = t - _mean.at<float>(i,j);\n\t\t\t\t_mean.at<float>(i,j) = (_mean.at<float>(i,j) + (_delta.at<float>(i,j) / (1.0*(n+1)))); // i am a bit paranoid\n\t\t\t\t_m2.at<float>(i,j) = _m2.at<float>(i,j) + _delta.at<float>(i,j) * (t - _mean.at<float>(i,j));\n\t\t\t}\n\t\t}\n\t}\n\t// calculate result\n\tfor(int i = radius; i < src.rows-radius; i++) {\n\t\tfor(int j = radius; j < src.cols-radius; j++) {\n\t\t\tdst.at<float>(i-radius, j-radius) = _m2.at<float>(i,j) / (1.0*(neighbors-1));\n\t\t}\n\t}\n}\n\n// now the wrapper functions\nvoid lbp::OLBP(const Mat& src, Mat& dst) {\n\tswitch(src.type()) {\n\t\tcase CV_8SC1: OLBP_<char>(src, dst); break;\n\t\tcase CV_8UC1: OLBP_<unsigned char>(src, dst); break;\n\t\tcase CV_16SC1: OLBP_<short>(src, dst); break;\n\t\tcase CV_16UC1: OLBP_<unsigned short>(src, dst); break;\n\t\tcase CV_32SC1: OLBP_<int>(src, dst); break;\n\t\tcase CV_32FC1: OLBP_<float>(src, dst); break;\n\t\tcase CV_64FC1: OLBP_<double>(src, dst); break;\n\t}\n}\n\nvoid lbp::ELBP(const Mat& src, Mat& dst, int radius, int neighbors) {\n\tswitch(src.type()) {\n\t\tcase CV_8SC1: ELBP_<char>(src, dst, radius, neighbors); break;\n\t\tcase CV_8UC1: ELBP_<unsigned char>(src, dst, radius, neighbors); break;\n\t\tcase CV_16SC1: ELBP_<short>(src, dst, radius, neighbors); break;\n\t\tcase CV_16UC1: ELBP_<unsigned short>(src, dst, radius, neighbors); break;\n\t\tcase CV_32SC1: ELBP_<int>(src, dst, radius, neighbors); break;\n\t\tcase CV_32FC1: ELBP_<float>(src, dst, radius, neighbors); break;\n\t\tcase CV_64FC1: ELBP_<double>(src, dst, radius, neighbors); break;\n\t}\n}\n\nvoid lbp::VARLBP(const Mat& src, Mat& dst, int radius, int neighbors) {\n\tswitch(src.type()) {\n\t\tcase CV_8SC1: VARLBP_<char>(src, dst, radius, neighbors); break;\n\t\tcase CV_8UC1: VARLBP_<unsigned char>(src, dst, radius, neighbors); break;\n\t\tcase CV_16SC1: VARLBP_<short>(src, dst, radius, neighbors); break;\n\t\tcase CV_16UC1: VARLBP_<unsigned short>(src, dst, radius, neighbors); break;\n\t\tcase CV_32SC1: VARLBP_<int>(src, dst, radius, neighbors); break;\n\t\tcase CV_32FC1: VARLBP_<float>(src, dst, radius, neighbors); break;\n\t\tcase CV_64FC1: VARLBP_<double>(src, dst, radius, neighbors); break;\n\t}\n}\n\n// now the Mat return functions\nMat lbp::OLBP(const Mat& src) { Mat dst; OLBP(src, dst); return dst; }\nMat lbp::ELBP(const Mat& src, int radius, int neighbors) { Mat dst; ELBP(src, dst, radius, neighbors); return dst; }\nMat lbp::VARLBP(const Mat& src, int radius, int neighbors) { Mat dst; VARLBP(src, dst, radius, neighbors); return dst; }\n\n\n\n\n"
  },
  {
    "path": "C++/lbp/lbp.hpp",
    "content": "#ifndef LBP_HPP_\n#define LBP_HPP_\n\n//! \\author philipp <bytefish[at]gmx[dot]de>\n//! \\copyright BSD, see LICENSE.\n\n#include <cv.h>\n#include <limits>\n\nusing namespace cv;\nusing namespace std;\n\nnamespace lbp {\n\n// templated functions\ntemplate <typename _Tp>\nvoid OLBP_(const cv::Mat& src, cv::Mat& dst);\n\ntemplate <typename _Tp>\nvoid ELBP_(const cv::Mat& src, cv::Mat& dst, int radius = 1, int neighbors = 8);\n\ntemplate <typename _Tp>\nvoid VARLBP_(const cv::Mat& src, cv::Mat& dst, int radius = 1, int neighbors = 8);\n\n// wrapper functions\nvoid OLBP(const Mat& src, Mat& dst);\nvoid ELBP(const Mat& src, Mat& dst, int radius = 1, int neighbors = 8);\nvoid VARLBP(const Mat& src, Mat& dst, int radius = 1, int neighbors = 8);\n\n// Mat return type functions\nMat OLBP(const Mat& src);\nMat ELBP(const Mat& src, int radius = 1, int neighbors = 8);\nMat VARLBP(const Mat& src, int radius = 1, int neighbors = 8);\n\n}\n#endif\n"
  },
  {
    "path": "C++/lbp/main.cpp",
    "content": "#include <cv.h>\n#include <highgui.h>\n#include \"lbp.hpp\"\n#include \"histogram.hpp\"\n\nusing namespace cv;\n\nint main(int argc, const char *argv[]) {\n\tint deviceId = 0;\n\tif(argc > 1)\n\t\tdeviceId = atoi(argv[1]);\n\n\tVideoCapture cap(deviceId);\n\n\tif(!cap.isOpened()) {\n    \tcerr << \"Capture Device ID \" << deviceId << \"cannot be opened.\" << endl;\n    \treturn -1;\n    }\n\n\t// initial values\n    int radius = 1;\n    int neighbors = 8;\n\n    // windows\n    namedWindow(\"original\",CV_WINDOW_AUTOSIZE);\n    namedWindow(\"lbp\",CV_WINDOW_AUTOSIZE);\n\n    // matrices used\n    Mat frame; // always references the last frame\n    Mat dst; // image after preprocessing\n    Mat lbp; // lbp image\n\n    // just to switch between possible lbp operators\n    vector<string> lbp_names;\n    lbp_names.push_back(\"Extended LBP\"); // 0\n    lbp_names.push_back(\"Fixed Sampling LBP\"); // 1\n    lbp_names.push_back(\"Variance-based LBP\"); // 2\n    int lbp_operator=0;\n\n    bool running=true;\n    while(running) {\n    \tcap >> frame;\n    \tcvtColor(frame, dst, CV_BGR2GRAY);\n    \tGaussianBlur(dst, dst, Size(7,7), 5, 3, BORDER_CONSTANT); // tiny bit of smoothing is always a good idea\n    \t// comment the following lines for original size\n    \tresize(frame, frame, Size(), 0.5, 0.5);\n    \tresize(dst,dst,Size(), 0.5, 0.5);\n    \t//\n    \tswitch(lbp_operator) {\n    \tcase 0:\n    \t\tlbp::ELBP(dst, lbp, radius, neighbors); // use the extended operator\n    \t\tbreak;\n    \tcase 1:\n    \t\tlbp::OLBP(dst, lbp); // use the original operator\n    \t\tbreak;\n    \tcase 2:\n    \t\tlbp::VARLBP(dst, lbp, radius, neighbors);\n    \t\tbreak;\n    \t}\n    \t// now to show the patterns a normalization is necessary\n    \t// a simple min-max norm will do the job...\n    \tnormalize(lbp, lbp, 0, 255, NORM_MINMAX, CV_8UC1);\n\n    \timshow(\"original\", frame);\n    \timshow(\"lbp\", lbp);\n\n    \tchar key = (char) waitKey(20);\n\n    \t// exit on escape\n    \tif(key == 27)\n    \t\trunning=false;\n\n    \t// to make it a bit interactive, you can increase and decrease the parameters\n    \tswitch(key) {\n    \tcase 'q': case 'Q':\n    \t\trunning=false;\n    \t\tbreak;\n    \t// lower case r decreases the radius (min 1)\n    \tcase 'r':\n    \t\tradius-=1;\n    \t\tradius = std::max(radius,1);\n    \t\tcout << \"radius=\" << radius << endl;\n    \t\tbreak;\n    \t// upper case r increases the radius (there's no real upper bound)\n    \tcase 'R':\n    \t\tradius+=1;\n    \t\tradius = std::min(radius,32);\n    \t\tcout << \"radius=\" << radius << endl;\n    \t\tbreak;\n    \t// lower case p decreases the number of sampling points (min 1)\n    \tcase 'p':\n    \t\tneighbors-=1;\n    \t\tneighbors = std::max(neighbors,1);\n    \t\tcout << \"sampling points=\" << neighbors << endl;\n    \t\tbreak;\n    \t// upper case p increases the number of sampling points (max 31)\n    \tcase 'P':\n    \t\tneighbors+=1;\n    \t\tneighbors = std::min(neighbors,31);\n    \t\tcout << \"sampling points=\" << neighbors << endl;\n    \t\tbreak;\n    \t// switch between operators\n    \tcase 'o': case 'O':\n    \t\tlbp_operator = (lbp_operator + 1) % 3;\n    \t\tcout << \"Switched to operator \" << lbp_names[lbp_operator] << endl;\n    \t\tbreak;\n    \tcase 's': case 'S':\n    \t\timwrite(\"original.jpg\", frame);\n    \t\timwrite(\"lbp.jpg\", lbp);\n    \t\tcout << \"Screenshot (operator=\" << lbp_names[lbp_operator] << \",radius=\" << radius <<\",points=\" << neighbors << \")\" << endl;\n    \t\tbreak;\n    \tdefault:\n    \t\tbreak;\n    \t}\n\n    }\n    \treturn 0; // success\n}\n"
  },
  {
    "path": "C++/lbp/mapping_n16.txt",
    "content": "0\t1\t2\t3\t4\t242\t5\t6\t7\t242\t242\t242\t8\t242\t9\t10\t11\t242\t242\t242\t242\t242\t242\t242\t12\t242\t242\t242\t13\t242\t14\t15\t16\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t17\t242\t242\t242\t242\t242\t242\t242\t18\t242\t242\t242\t19\t242\t20\t21\t22\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t23\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t24\t242\t242\t242\t242\t242\t242\t242\t25\t242\t242\t242\t26\t242\t27\t28\t29\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t30\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t31\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t32\t242\t242\t242\t242\t242\t242\t242\t33\t242\t242\t242\t34\t242\t35\t36\t37\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t38\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t39\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t40\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t41\t242\t242\t242\t242\t242\t242\t242\t42\t242\t242\t242\t43\t242\t44\t45\t46\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t47\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t48\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t49\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t50\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t51\t242\t242\t242\t242\t242\t242\t242\t52\t242\t242\t242\t53\t242\t54\t55\t56\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t57\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t58\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t59\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t60\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t61\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t62\t242\t242\t242\t242\t242\t242\t242\t63\t242\t242\t242\t64\t242\t65\t66\t67\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t68\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t69\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t70\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t71\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t72\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t73\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t74\t242\t242\t242\t242\t242\t242\t242\t75\t242\t242\t242\t76\t242\t77\t78\t79\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t80\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t81\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t82\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t83\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t84\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t85\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t86\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t87\t242\t242\t242\t242\t242\t242\t242\t88\t242\t242\t242\t89\t242\t90\t91\t92\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t93\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t94\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t95\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t96\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t97\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t98\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t99\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t100\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t101\t242\t242\t242\t242\t242\t242\t242\t102\t242\t242\t242\t103\t242\t104\t105\t106\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t107\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t108\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t109\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t110\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t111\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t112\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t113\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t114\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t115\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t116\t242\t242\t242\t242\t242\t242\t242\t117\t242\t242\t242\t118\t242\t119\t120\t121\t122\t242\t123\t242\t242\t242\t124\t242\t242\t242\t242\t242\t242\t242\t125\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t126\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t127\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t128\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t129\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t130\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t131\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t132\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t133\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t134\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t135\t136\t137\t242\t138\t242\t242\t242\t139\t242\t242\t242\t242\t242\t242\t242\t140\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t141\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t142\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t143\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t144\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t145\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t146\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t147\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t148\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t149\t150\t151\t242\t152\t242\t242\t242\t153\t242\t242\t242\t242\t242\t242\t242\t154\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t155\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t156\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t157\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t158\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t159\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t160\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t161\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t162\t163\t164\t242\t165\t242\t242\t242\t166\t242\t242\t242\t242\t242\t242\t242\t167\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t168\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t169\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t170\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t171\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t172\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t173\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t174\t175\t176\t242\t177\t242\t242\t242\t178\t242\t242\t242\t242\t242\t242\t242\t179\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t180\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t181\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t182\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t183\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t184\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t185\t186\t187\t242\t188\t242\t242\t242\t189\t242\t242\t242\t242\t242\t242\t242\t190\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t191\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t192\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t193\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t194\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t195\t196\t197\t242\t198\t242\t242\t242\t199\t242\t242\t242\t242\t242\t242\t242\t200\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t201\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t202\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t203\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t204\t205\t206\t242\t207\t242\t242\t242\t208\t242\t242\t242\t242\t242\t242\t242\t209\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t210\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t211\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t212\t213\t214\t242\t215\t242\t242\t242\t216\t242\t242\t242\t242\t242\t242\t242\t217\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t218\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t219\t220\t221\t242\t222\t242\t242\t242\t223\t242\t242\t242\t242\t242\t242\t242\t224\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t242\t225\t226\t227\t242\t228\t242\t242\t242\t229\t242\t242\t242\t242\t242\t242\t242\t230\t231\t232\t242\t233\t242\t242\t242\t234\t235\t236\t242\t237\t238\t239\t240\t241"
  },
  {
    "path": "C++/lbp/mapping_n8.txt",
    "content": "0\t1\t2\t3\t4\t58\t5\t6\t7\t58\t58\t58\t8\t58\t9\t10\t11\t58\t58\t58\t58\t58\t58\t58\t12\t58\t58\t58\t13\t58\t14\t15\t16\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t17\t58\t58\t58\t58\t58\t58\t58\t18\t58\t58\t58\t19\t58\t20\t21\t22\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t23\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t24\t58\t58\t58\t58\t58\t58\t58\t25\t58\t58\t58\t26\t58\t27\t28\t29\t30\t58\t31\t58\t58\t58\t32\t58\t58\t58\t58\t58\t58\t58\t33\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t34\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t35\t36\t37\t58\t38\t58\t58\t58\t39\t58\t58\t58\t58\t58\t58\t58\t40\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t58\t41\t42\t43\t58\t44\t58\t58\t58\t45\t58\t58\t58\t58\t58\t58\t58\t46\t47\t48\t58\t49\t58\t58\t58\t50\t51\t52\t58\t53\t54\t55\t56\t57"
  },
  {
    "path": "C++/liveness.cpp",
    "content": "#include\"liveness.h\"\r\n\t\r\n// Sigmoid\r\ndouble sigmoid(double input)\r\n{\r\n\treturn 1 / ( 1 + exp(-input) );\r\n}\r\n\r\n// DoG Features\r\nMat DoG(Mat input, double sigma1, double sigma2)\r\n{\r\n\tMat XF1, XF2, DXF, output;\r\n\tint size1, size2;\r\n\t// Filter Sizes\r\n\tsize1 = 2 * (int)(3*sigma1) + 3;\r\n\tsize2 = 2 * (int)(3*sigma2) + 3;\r\n\t// Gaussian Filter\r\n\tGaussianBlur(input, XF1, Size(size1, size1), sigma1, sigma1, BORDER_REPLICATE);\r\n\tGaussianBlur(input, XF2, Size(size2, size2), sigma2, sigma2, BORDER_REPLICATE);\r\n\t// Difference\r\n\tDXF = XF1 - XF2;\r\n\t// Discrete Fourier Transform\r\n\tDXF.convertTo(DXF, CV_64FC1);\r\n\tdft(DXF, output);\r\n\treturn abs(output);\r\n}\r\n\r\n// LBP Features\r\nMat LBP(Mat input, vector<int> mapping_r8, vector<int> mapping_r16)\r\n{\r\n\r\n\t// LBP(r2, n16)\r\n\tMat LBP_16_2 = lbp::ELBP(input, 2, 16);\r\n\tfor(int i = 0; i < LBP_16_2.rows; i++)\r\n\t\tfor(int j = 0; j < LBP_16_2.cols; j++)\r\n\t\t\tLBP_16_2.at<int>(i, j) = mapping_r16[LBP_16_2.at<int>(i, j)];\r\n\tMat hist_16_2 = lbp::histogram(LBP_16_2, 243);\r\n\r\n\t// LBP(r2, n8)\r\n\tMat LBP_8_2 = lbp::ELBP(input, 2, 8);\r\n\tfor(int i = 0; i < LBP_8_2.rows; i++)\r\n\t\tfor(int j = 0; j < LBP_8_2.cols; j++)\r\n\t\t\tLBP_8_2.at<int>(i, j) = mapping_r8[LBP_8_2.at<int>(i, j)];\r\n\tMat hist_8_2 = lbp::histogram(LBP_8_2, 59);\r\n\r\n\t// LBP(r1, n8) * 9\r\n\tMat LBP_8_1 = lbp::ELBP(input, 1, 8);\r\n\tfor(int i = 0; i < LBP_8_1.rows; i++)\r\n\t\tfor(int j = 0; j < LBP_8_1.cols; j++)\r\n\t\t\tLBP_8_1.at<int>(i, j) = mapping_r8[LBP_8_1.at<int>(i, j)];\r\n\tMat hist_8_1 = lbp::spatial_histogram(LBP_8_1, 59, Size_<int>(30, 30), 14);\r\n\r\n\t// Histogram Concatenate\r\n\tMat hist_8, hist;\r\n\thconcat(hist_8_2, hist_8_1, hist_8);\r\n\thconcat(hist_16_2, hist_8, hist);\r\n\treturn hist;\r\n}\r\n\r\n// Extract Features\r\nsvm_node* Liveness_Feature(Mat img, vector<int> mapping_r8, vector<int> mapping_r16, int img_size, int LBP_size)\r\n{\r\n\t// Total feature size\r\n\tint fea_size = img_size * img_size + LBP_size;\r\n\t// Grayscale\r\n\tcvtColor(img, img, CV_BGR2GRAY);\r\n\t// Histogram Equlization - Ineffective\r\n\t//equalizeHist(img, img);\r\n\t// Image Resize\r\n\tresize(img, img, Size(img_size, img_size));\r\n\t// DoG Features\r\n\tMat DoG_Feature = DoG(img);\r\n\t// LBP Features\r\n\tMat LBP_Feature = LBP(img, mapping_r8, mapping_r16);\r\n\t// Filling Features in svm_node\r\n\tsvm_node* features = new svm_node[fea_size+1];\r\n\tfor(int i = 0; i < DoG_Feature.rows; i++)\r\n\t\tfor(int j = 0; j < DoG_Feature.cols; j++)\r\n\t\t{\r\n\t\t\tfeatures[i*img_size+j].index = i*img_size+j+1;\r\n\t\t\tfeatures[i*img_size+j].value = DoG_Feature.at<double>(i, j);\r\n\t\t}\r\n\tfor(int i = 0; i < LBP_Feature.cols; i++)\r\n\t\t{\r\n\t\t\tfeatures[img_size*img_size+i].index = img_size*img_size+i+1;\r\n\t\t\tfeatures[img_size*img_size+i].value = (double)LBP_Feature.at<int>(0, i);\r\n\t\t}\r\n\tfeatures[fea_size].index = -1;\r\n\t// Return\r\n\treturn features;\r\n}\r\n\r\n// Prediction\r\ndouble Liveness_Predict(Mat img, svm_model* model, double* Feature_Max, double* Feature_Min, \r\n\t\t\t\t\t\tvector<int> mapping_r8, vector<int> mapping_r16, int img_size, int LBP_size)\r\n{\r\n\tint fea_size = img_size * img_size + LBP_size;\r\n\tsvm_node* features = Liveness_Feature(img, mapping_r8, mapping_r16, img_size, LBP_size);\r\n\tfor(int i = 0; i < fea_size; i++)\r\n\t\tfeatures[i].value = (features[i].value - Feature_Min[i]) / (Feature_Max[i] - Feature_Min[i]);\r\n\tdouble Value;\r\n\tdouble Label = svm_predict_values(model, features, &Value);\r\n\tdelete[] features;\r\n\treturn Value;\r\n}\r\n\r\n// Initialization\r\nbool ThuVisionFaceLiveCheck::Init()\r\n{\r\n\t// Image size, LBP feature size and total feature size\r\n\timg_size = 64;\r\n\tLBP_size = 243 + 59 + 9*59;\r\n\tint fea_size = img_size * img_size + LBP_size;\r\n\r\n\t// Path\r\n\tchar* svm_path = \"svm_model\";\r\n\tchar* minmax_path = \"svm_minmax.txt\";\r\n\tstring Mapping_r8_path = \".\\\\lbp\\\\mapping_n8.txt\";\r\n\tstring Mapping_r16_path = \".\\\\lbp\\\\mapping_n16.txt\";\r\n\r\n\t// Load Model\r\n\tsvm_model* SVM_Model = svm_load_model(svm_path);\r\n\tif(model == NULL)\r\n\t{\r\n\t\tstd::cout << \"Can not open file: \" << svm_path << endl;\r\n\t\treturn false;\r\n\t}\r\n\tmodel = SVM_Model;\r\n\r\n\t// Scaling\r\n\tifstream feature_minmax_file;\r\n\tstring feature_minmax_path = minmax_path;\r\n\tfeature_minmax_file.open(feature_minmax_path);\r\n\tif(!feature_minmax_file.is_open())\r\n\t{\r\n\t\tstd::cout << \"Can not open file: \" << feature_minmax_path << endl;\r\n\t\treturn false;\r\n\t}\r\n\tdouble* SVM_Feature_Max = new double[fea_size];\r\n\tdouble* SVM_Feature_Min = new double[fea_size];\r\n\tfor(int Feature_Idx = 0; Feature_Idx < fea_size; Feature_Idx++)\r\n\t\tfeature_minmax_file >> SVM_Feature_Max[Feature_Idx] >> SVM_Feature_Min[Feature_Idx];\r\n\tFeature_Max = SVM_Feature_Max;\r\n\tFeature_Min = SVM_Feature_Min;\r\n\t\r\n\tint mapping;\r\n\t// LBP n=8 mapping\r\n\tvector<int> SVM_mapping_r8;\r\n\tifstream Mapping_r8_file;\r\n\tMapping_r8_file.open(Mapping_r8_path);\r\n\tif(!Mapping_r8_file.is_open())\r\n\t{\r\n\t\tstd::cout << \"Can not open file: \" << Mapping_r8_path << endl;\r\n\t\treturn false;\r\n\t}\r\n\tfor(int i = 0; i < 256; i++)\r\n\t{\r\n\t\tMapping_r8_file >> mapping;\r\n\t\tSVM_mapping_r8.push_back(mapping);\r\n\t}\r\n\tmapping_r8 = SVM_mapping_r8;\r\n\r\n\t// LBP n=16 mapping\r\n\tvector<int> SVM_mapping_r16;\r\n\tifstream Mapping_r16_file;\r\n\tMapping_r16_file.open(Mapping_r16_path);\r\n\tif(!Mapping_r16_file.is_open())\r\n\t{\r\n\t\tstd::cout << \"Can not open file: \" << Mapping_r16_path << endl;\r\n\t\treturn false;\r\n\t}\r\n\tfor(int i = 0; i < 65536; i++)\r\n\t{\r\n\t\tMapping_r16_file >> mapping;\r\n\t\tSVM_mapping_r16.push_back(mapping);\r\n\t}\r\n\tmapping_r16 = SVM_mapping_r16;\r\n\r\n\treturn true;\r\n}\r\n\r\n// Check with image as an input\r\ndouble ThuVisionFaceLiveCheck::Check(cv::Mat img)\r\n{\r\n\t// Predict\r\n\tdouble value = Liveness_Predict(img, model, Feature_Max, Feature_Min, mapping_r8, mapping_r16, img_size, LBP_size);\r\n\treturn sigmoid(value);\r\n}\r\n\r\n// Check with path as an input\r\ndouble ThuVisionFaceLiveCheck::Check(std::string imgPath)\r\n{\r\n\t// Load Image\r\n\tMat img = imread(imgPath);\r\n\tif(img.empty())\r\n\t{\r\n\t\tstd::cout << \"Can not load image: \" << imgPath << endl;\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn ThuVisionFaceLiveCheck::Check(img);\r\n}\r\n\r\nvoid Train()\r\n{\r\n\t// Image size, LBP feature size and total feature size\r\n\tint img_size = 64;\r\n\tint LBP_size = 243 + 59 + 9*59;\r\n\tint fea_size = img_size * img_size + LBP_size;\r\n\r\n\t// Path\r\n\tchar* svm_path = \"svm_model\";\r\n\tchar* minmax_path = \"svm_minmax.txt\";\r\n\tstring Mapping_r8_path = \".\\\\lbp\\\\mapping_n8.txt\";\r\n\tstring Mapping_r16_path = \".\\\\lbp\\\\mapping_n16.txt\";\r\n\r\n\t// Train data set\r\n\tint real_train_count[] = {1742, 22274, 6322};\r\n\tint fake_train_count[] = {1748, 14064, 22080};\r\n\tstring train_set[] = {\"NUAA\", \"PRINT-ATTACK\", \"CASIA\"};\r\n\tstring real_train_name;\r\n\tstring fake_train_name;\r\n\tvector<double> real_train_value;\r\n\tvector<double> fake_train_value;\r\n\r\n\t// LibSVM\r\n\tsvm_problem svm_prob;\r\n\tsvm_parameter svm_param;\r\n\tsvm_prob.l = real_train_count[0] + real_train_count[1] + real_train_count[2] + \r\n\t\tfake_train_count[0] + fake_train_count[1] + fake_train_count[2];\r\n\tsvm_prob.y = new double[svm_prob.l];\r\n\tsvm_prob.x = new svm_node*[svm_prob.l];\r\n\tsvm_param.svm_type = C_SVC;\r\n\tsvm_param.kernel_type = LINEAR;\r\n\t//svm_param.degree = 3;\r\n\t//svm_param.gamma = 0;\r\n\t//svm_param.coef0 = 0;\r\n\tsvm_param.cache_size = 1;\r\n\tsvm_param.eps = 1e-3;\r\n\tsvm_param.C = 1;\r\n\tsvm_param.shrinking = 1;\r\n\tsvm_param.probability = 1;\r\n\tsvm_param.nr_weight = NULL;\r\n\tsvm_param.weight_label = NULL;\r\n\tsvm_param.weight = NULL;\r\n\t\r\n\t// LBP n=8 mapping\r\n\tint mapping;\r\n\tvector<int> mapping_r8;\r\n\tifstream Mapping_r8_file;\r\n\tMapping_r8_file.open(Mapping_r8_path);\r\n\tfor(int i = 0; i < 256; i++)\r\n\t{\r\n\t\tMapping_r8_file >> mapping;\r\n\t\tmapping_r8.push_back(mapping);\r\n\t}\r\n\t// LBP n=16 mapping\r\n\tvector<int> mapping_r16;\r\n\tifstream Mapping_r16_file;\r\n\tMapping_r16_file.open(Mapping_r16_path);\r\n\tfor(int i = 0; i < 65536; i++)\r\n\t{\r\n\t\tMapping_r16_file >> mapping;\r\n\t\tmapping_r16.push_back(mapping);\r\n\t}\r\n\r\n\t// Extract Features\r\n\tint count = 0;\r\n\tfor(int setIdx = 0; setIdx < 3; setIdx++)\r\n\t{\r\n\t\t// Real face training\r\n\t\tfor(int imgIdx = 0; imgIdx < real_train_count[setIdx]; imgIdx++)\r\n\t\t{\r\n\t\t\t// Image Path\r\n\t\t\tstringstream real_train_stream;\r\n\t\t\treal_train_stream  << setw(5) << setfill('0') << imgIdx;\r\n\t\t\treal_train_name = \".\\\\\" + train_set[setIdx] + \"\\\\train\\\\real\\\\\" + real_train_stream.str() + \".png\";\r\n\t\t\t// Load Image\r\n\t\t\tMat img = imread(real_train_name);\r\n\t\t\tif(img.empty())\r\n\t\t\t{\r\n\t\t\t\tstd::cout << \"Can not load image: \" << real_train_name << endl;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Extract Features\r\n\t\t\tsvm_prob.y[count] = 1;\r\n\t\t\tsvm_prob.x[count] = Liveness_Feature(img, mapping_r8, mapping_r16, img_size, LBP_size);\r\n\t\t\tstd::cout << \"Training data: \" << train_set[setIdx] << \" Real \" << imgIdx + 1 << endl;\r\n\t\t\tcount++;\r\n\t\t}\r\n\r\n\t\t// Fake face training\r\n\t\tfor(int imgIdx = 0; imgIdx < fake_train_count[setIdx]; imgIdx++)\r\n\t\t{\r\n\t\t\t// Image Path\r\n\t\t\tstringstream fake_train_stream;\r\n\t\t\tfake_train_stream  << setw(5) << setfill('0') << imgIdx;\r\n\t\t\tfake_train_name = \".\\\\\" + train_set[setIdx] + \"\\\\train\\\\fake\\\\\" + fake_train_stream.str() + \".png\";\r\n\t\t\t// Load Image\r\n\t\t\tMat img = imread(fake_train_name);\r\n\t\t\tif(img.empty())\r\n\t\t\t{\r\n\t\t\t\tstd::cout << \"Can not load image: \" << fake_train_name << endl;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Extract Features\r\n\t\t\tsvm_prob.y[count] = -1;\r\n\t\t\tsvm_prob.x[count] = Liveness_Feature(img, mapping_r8, mapping_r16, img_size, LBP_size);\r\n\t\t\tstd::cout << \"Training data: \" << train_set[setIdx] << \" Fake \" << imgIdx + 1 << endl;\r\n\t\t\tcount++;\r\n\t\t}\r\n\t}\r\n\r\n\t// Scaling\r\n\tofstream minmax_file;\r\n\tminmax_file.open(minmax_path);\r\n\tfor(int Feature_Idx = 0; Feature_Idx < fea_size; Feature_Idx++)\r\n\t{\r\n\t\tdouble Max = 0;\r\n\t\tdouble Min = 4294967296;\r\n\t\t// Get Max and Min\r\n\t\tfor(int train_Idx = 0; train_Idx < svm_prob.l; train_Idx++)\r\n\t\t{\r\n\t\t\tMax = Max > svm_prob.x[train_Idx][Feature_Idx].value\r\n\t\t\t\t? Max : svm_prob.x[train_Idx][Feature_Idx].value;\r\n\t\t\tMin = Min < svm_prob.x[train_Idx][Feature_Idx].value\r\n\t\t\t\t? Min : svm_prob.x[train_Idx][Feature_Idx].value;\r\n\t\t}\r\n\t\t// Scaling Features\r\n\t\tfor(int svm_train_Idx = 0; svm_train_Idx < svm_prob.l; svm_train_Idx++)\r\n\t\t{\r\n\t\t\tsvm_prob.x[svm_train_Idx][Feature_Idx].value = \r\n\t\t\t\t(svm_prob.x[svm_train_Idx][Feature_Idx].value - Min) / (Max - Min);\r\n\t\t}\r\n\t\t// Save Max and Min\r\n\t\tminmax_file << Max << ' ' << Min << endl;\r\n\t}\r\n\r\n\t// Training\r\n\tsvm_model* svm_model = svm_train(&svm_prob, &svm_param);\r\n\t// Count correct rate\r\n\tint test_count = 0;\r\n\tfor(int test_Idx = 0; test_Idx < svm_prob.l; test_Idx++)\r\n\t{\r\n\t\tdouble value = svm_predict(svm_model, svm_prob.x[test_Idx]);\r\n\t\ttest_count += (value == svm_prob.y[test_Idx]);\r\n\t}\r\n\tcout << \"Correct rate: \" << (double) test_count / (svm_prob.l) << endl;\r\n\t// Free\r\n\tsvm_save_model(svm_path, svm_model);\r\n\tsvm_free_and_destroy_model(&svm_model);\r\n\tdelete[] svm_prob.x;\r\n\tdelete[] svm_prob.y;\r\n\tsvm_destroy_param(&svm_param);\r\n\r\n\treturn;\r\n}\r\n\r\nvoid Test()\r\n{\r\n\tThuVisionFaceLiveCheck liveness_test;\r\n\tbool Init_message = liveness_test.Init();\r\n\tif(Init_message == false)\r\n\t{\r\n\t\tstd::cout << \"Initialization failed. \" << endl;\r\n\t\treturn;\r\n\t}\r\n\tstd::cout << \"Initialized successfully. \" << endl;\r\n\r\n\t// Test data set\r\n\tint real_test_count[] = {3362, 29562, 9966};\r\n\tint fake_test_count[] = {5761, 18636, 31683};\r\n\tstring test_set[] = {\"NUAA\", \"PRINT-ATTACK\", \"CASIA\"};\r\n\tstring real_test_name;\r\n\tstring fake_test_name;\r\n\tvector<double> real_test_value[3];\r\n\tvector<double> fake_test_value[3];\r\n\r\n\t// Testing\r\n\tfor(int setIdx = 0; setIdx < 3; setIdx++)\r\n\t{\r\n\t\t// Real face testing\r\n\t\tfor(int imgIdx = 0; imgIdx < real_test_count[setIdx]; imgIdx++)\r\n\t\t{\r\n\t\t\t// Image Path\r\n\t\t\tstringstream real_test_stream;\r\n\t\t\treal_test_stream  << setw(5) << setfill('0') << imgIdx;\r\n\t\t\treal_test_name = \".\\\\\" + test_set[setIdx] + \"\\\\test\\\\real\\\\\" + real_test_stream.str() + \".png\";\r\n\t\t\t// Predict\r\n\t\t\tdouble value = liveness_test.Check(real_test_name);\r\n\t\t\treal_test_value[setIdx].push_back(value);\r\n\t\t\tstd::cout << \"Testing data: \" << test_set[setIdx] << \" Real \" << imgIdx + 1 << \"; \"\r\n\t\t\t\t<< \"Predict Value: \" << value << \"; \"\r\n\t\t\t\t<< \"True Label: 1. \" << endl;\r\n\t\t}\r\n\r\n\t\t// Fake face testing\r\n\t\tfor(int imgIdx = 0; imgIdx < fake_test_count[setIdx]; imgIdx++)\r\n\t\t{\r\n\t\t\t// Image Path\r\n\t\t\tstringstream fake_test_stream;\r\n\t\t\tfake_test_stream  << setw(5) << setfill('0') << imgIdx;\r\n\t\t\tfake_test_name = \".\\\\\" + test_set[setIdx] + \"\\\\test\\\\fake\\\\\" + fake_test_stream.str() + \".png\";\r\n\t\t\t// Predict\r\n\t\t\tdouble value = liveness_test.Check(fake_test_name);\r\n\t\t\tfake_test_value[setIdx].push_back(value);\r\n\t\t\tstd::cout << \"Testing data: \" << test_set[setIdx] << \" Fake \" << imgIdx + 1 << \"; \"\r\n\t\t\t\t<< \"Predict Value: \" << value << \"; \"\r\n\t\t\t\t<< \"True Label: 0. \" << endl;\r\n\t\t}\r\n\t}\r\n\r\n\t// Result\r\n\tofstream count_file[3];\r\n\tint correct_count;\r\n\tint* test_count = new int[3];\r\n\tfor(int setIdx = 0; setIdx < 3; setIdx++)\r\n\t{\r\n\t\tcount_file[setIdx].open(\"count_\" + test_set[setIdx] + \".txt\");\r\n\t\ttest_count[setIdx] = real_test_count[setIdx] + fake_test_count[setIdx];\r\n\t\tfor(double k = 0; k <= 1; k+=0.01)\r\n\t\t{\r\n\t\t\tcorrect_count = 0;\r\n\t\t\tfor(int i = 0; i < real_test_value[setIdx].size(); i++)\r\n\t\t\t\tcorrect_count += (real_test_value[setIdx][i] >= k);\r\n\t\t\tfor(int i = 0; i < fake_test_value[setIdx].size(); i++)\r\n\t\t\t\tcorrect_count += (fake_test_value[setIdx][i] < k );\r\n\t\t\tcount_file[setIdx] << \"k on \" << test_set[setIdx] << \": \" << k << endl;\r\n\t\t\tcount_file[setIdx] << \"Total data on \" << test_set[setIdx] << \": \" << test_count[setIdx] << endl;\r\n\t\t\tcount_file[setIdx] << \"Correct data on \" << test_set[setIdx] << \": \"  << correct_count << endl;\r\n\t\t\tcount_file[setIdx] << \"Correct rate on \" << test_set[setIdx] << \": \"  << (double) correct_count / test_count[setIdx] << endl;\r\n\t\t}\r\n\t}\r\n\r\n\treturn;\r\n}"
  },
  {
    "path": "C++/liveness.h",
    "content": "#include <iostream>\r\n#include <fstream>\r\n#include <sstream>\r\n#include <iomanip>\r\n#include <vector>\r\n#include <opencv2\\opencv.hpp>\r\n#include \".\\libsvm-3.19\\svm.h\" \r\n#include \".\\lbp\\lbp.hpp\" \r\n#include \".\\lbp\\histogram.hpp\" \r\nusing namespace std;\r\nusing namespace cv;\r\n\r\n// Sigmoid\r\ndouble sigmoid(double input);\r\n\r\n// DoG Features\r\nMat DoG(Mat input, double sigma1 = 0.5, double sigma2 = 1);\r\n\r\n// LBP Features\r\nMat LBP(Mat input, vector<int> mapping_r8, vector<int> mapping_r16);\r\n\r\n// Extract Features\r\nsvm_node* Liveness_Feature(Mat img, vector<int> mapping_r8, vector<int> mapping_r16, int img_size, int LBP_size);\r\n\r\n// Predict\r\ndouble Liveness_Predict(Mat img, svm_model* model, double* Feature_Max, double* Feature_Min, \r\n\t\t\t\t\t\tvector<int> mapping_r8, vector<int> mapping_r16, int img_size, int LBP_size);\r\n\r\n// Liveness Detection Class\r\nclass ThuVisionFaceLiveCheck{\r\npublic:\r\n\t// Initialization: successful - true; failed - false\r\n\tbool Init();\r\n\t// Liveness Predict: input image path or Mat. \r\n\tdouble Check(std::string imgPath);\r\n\tdouble Check(cv::Mat img);\r\nprivate:\r\n\t// Image size (DoG feature size = img_size * img_size)\r\n\tint img_size;\r\n\t// LBP feature size\r\n\tint LBP_size;\r\n\t// SVM Model\r\n\tsvm_model* model;\r\n\t// Min and Max (for scaling)\r\n\tdouble* Feature_Max;\r\n\tdouble* Feature_Min;\r\n\t// LBP mapping\r\n\tvector<int> mapping_r8;\r\n\tvector<int> mapping_r16;\r\n};\r\n\r\n// Training\r\nvoid Train();\r\n\r\n// Testing\r\nvoid Test();\r\n"
  },
  {
    "path": "C++/svm_minmax_NUAA.txt",
    "content": "4638 186\r\n2292.61 0.258032\r\n1968.03 0.0429906\r\n1056.06 0.0884837\r\n2106.64 0.168737\r\n814.024 0.120735\r\n1285.34 0.0165767\r\n748.185 0.00170226\r\n844.288 0.0834991\r\n574.271 0.0353163\r\n803.612 0.0325523\r\n643.701 0.00572559\r\n742.611 0.0302885\r\n704.634 0.0885741\r\n865.697 0.0245662\r\n818.328 6.21725e-015\r\n541.139 0.00862197\r\n675.26 0.00923781\r\n610.372 0.0268034\r\n565.88 0.000325988\r\n715.587 0.0847821\r\n560.933 0.0062252\r\n876.012 0.0324584\r\n678.649 0.0121225\r\n686.271 0.0135724\r\n595.999 0.0301275\r\n701.879 0.00912817\r\n498 0.0122942\r\n698.358 0.00511841\r\n544.79 0.00583248\r\n572.791 0.00293929\r\n623 0\r\n402 0\r\n598.563 0.0133827\r\n519.585 0.00705574\r\n540.404 0.00250907\r\n515.277 0.0203501\r\n454.082 0.00123163\r\n436.233 0.00668602\r\n477.899 0.00114529\r\n362.275 0.0183693\r\n308.319 0.000746276\r\n473.772 0.0128237\r\n345.295 0.00651096\r\n362.67 0.00298229\r\n386.227 0.0299721\r\n354.025 0.0127712\r\n461.863 8.88178e-016\r\n286.123 0.0121933\r\n279.589 0.0347225\r\n287.342 0.0131526\r\n266.558 0.00168677\r\n261.494 0.0094623\r\n270.138 0.0233686\r\n217.855 0.0465949\r\n250.662 0.0586835\r\n190.437 0.00332815\r\n287.271 0.0090122\r\n181.854 0.0142805\r\n321.398 0.00207759\r\n222.81 0.0178291\r\n367.611 0.00210843\r\n175.399 0.00537264\r\n493 0\r\n1191.26 0.0132862\r\n1272.52 0.534385\r\n1027.92 0.197807\r\n1150.38 0.0308084\r\n1442.69 0.710015\r\n901.662 0.00559385\r\n1053.75 0.0266603\r\n982.157 0.0969134\r\n861.551 0.00694012\r\n706.16 0.00404798\r\n887.749 0.0763378\r\n917.746 0.0139738\r\n684.177 0.0612228\r\n639.437 0.00550469\r\n735.161 0.00894135\r\n803.885 0.0138206\r\n681.999 0.0244332\r\n600.548 0.013805\r\n782.932 0.0200553\r\n429.771 0.00947661\r\n592.997 0.0029203\r\n461.528 0.144719\r\n646.107 0.0240248\r\n418.455 0.026494\r\n458.802 0.00240852\r\n442.052 0.0161637\r\n511.063 0.0530391\r\n472.054 0.0373713\r\n490.098 0.00491298\r\n566.848 0.0233287\r\n587.677 0.0151435\r\n454.53 0.029391\r\n572.913 0.0187844\r\n381.813 0.0275307\r\n399.031 0.00993181\r\n367.964 0.0135449\r\n372.675 0.0214892\r\n538.768 0.0292419\r\n505.79 0.0115374\r\n558.371 0.0127384\r\n419.524 0.00796698\r\n503.93 0.00292722\r\n542.759 0.0312349\r\n466.166 0.00495845\r\n452.066 0.0243236\r\n328.651 0.0229813\r\n402.096 0.0129765\r\n336.259 0.00636526\r\n390.83 0.0100214\r\n339.709 0.0102316\r\n437.798 0.00726407\r\n306.812 0.00792195\r\n329.633 0.00263265\r\n361.918 0.00608831\r\n368.935 0.0243964\r\n269.51 0.00461483\r\n343.242 0.0108465\r\n243.192 0.0272887\r\n213.837 9.45839e-005\r\n270.461 0.000843973\r\n241.703 0.0138016\r\n256.421 0.000354027\r\n228.683 0.00150489\r\n273.223 0.000966426\r\n1255.62 0.0727434\r\n1100.56 0.0537289\r\n903.181 0.0828493\r\n776.817 0.000661446\r\n966.542 0.135085\r\n809.154 0.109499\r\n624.316 0.082965\r\n749.833 0.0363108\r\n828.803 0.0794155\r\n635.865 0.0482245\r\n931.019 0.0283288\r\n840.368 0.0196538\r\n607.907 0.00296418\r\n580.334 0.112362\r\n559.817 0.147965\r\n541.093 0.00536489\r\n683.111 0.0256236\r\n496.128 0.0937267\r\n494.912 0.00267068\r\n471.192 0.00175061\r\n429.896 0.00650188\r\n449.279 0.00390718\r\n454.233 0.00620899\r\n449.279 0.0239917\r\n468.357 0.0206665\r\n430.127 0.0363543\r\n432.361 0.0185265\r\n431.108 0.020497\r\n509.963 0.0176186\r\n455.382 0.00615107\r\n425.749 0.0143736\r\n459.278 0.00782328\r\n531.453 0.00820711\r\n387.278 0.0208447\r\n666.226 0.0242608\r\n490.683 0.0214072\r\n629.575 0.00615557\r\n480.968 0.0129884\r\n595.965 0.0136598\r\n456.217 0.024403\r\n370.487 0.00750192\r\n267.374 0.00623814\r\n397.787 0.00449583\r\n477 0.011655\r\n370.061 0.00373504\r\n320.224 0.00319924\r\n367.329 0.0194477\r\n432.823 0.0103622\r\n261.002 0.00984015\r\n300.032 0.000807762\r\n317.769 0.0139045\r\n301.103 0.000416534\r\n276.367 0.0126043\r\n406.312 0.00660743\r\n252.666 0.00385511\r\n376.192 0.0301101\r\n222.33 0.0232183\r\n273.377 0.00373185\r\n343.889 0.00713145\r\n263.738 0.00995165\r\n403.621 0.0046526\r\n282.603 0.00584146\r\n363.619 0.0036613\r\n227.406 0.0197452\r\n1640.21 0.132571\r\n722.763 0.122084\r\n990.83 0.065559\r\n805.847 0.0436376\r\n753.1 0.0495231\r\n479.096 0.0569496\r\n740.235 0.00308668\r\n633.875 0.00887367\r\n552.75 0.042442\r\n646.946 0.0548192\r\n478.904 0.0485743\r\n508.171 0.0427687\r\n697.427 0.00264661\r\n619.659 0.0123616\r\n648.415 0.0118865\r\n537.915 0.00734329\r\n456.086 0.00852339\r\n523.654 0.00316749\r\n620.368 0.000245148\r\n455.493 0.0387759\r\n410.356 0.0307251\r\n449.886 0.0313531\r\n427.101 0.0107647\r\n391.424 0.0558898\r\n380.502 0.0498883\r\n457.903 0.0188219\r\n560.479 0.000388067\r\n439.922 0.0110602\r\n362.369 0.00428629\r\n396.31 0.0107113\r\n383.09 0.00160793\r\n367.179 0.00999502\r\n414.61 0.00484781\r\n478.148 0.00928183\r\n416.203 0.00669265\r\n330.647 0.00346521\r\n279.461 0.00226358\r\n338.656 0.000528617\r\n305.376 0.00373747\r\n253.129 0.000763232\r\n257.122 0.00917065\r\n390.278 0.00259718\r\n314.599 0.0207473\r\n331.422 0.00119396\r\n288.857 0.000947032\r\n343.541 0.0198409\r\n298.489 0.00622538\r\n250.826 0.0137948\r\n238.008 0.00186629\r\n307.772 0.0639878\r\n205.343 0.00331676\r\n257.375 0.00866105\r\n227.442 0.00405915\r\n255.746 0.000996362\r\n230.452 0.0737804\r\n219.794 0.00685649\r\n270.586 0.00934284\r\n186.194 0.0085002\r\n229.35 0.00523108\r\n251.875 0.00362591\r\n262.192 0.0354053\r\n257.757 0.00168949\r\n281.937 0.0161841\r\n325.867 0.00893534\r\n1440.7 0.0493222\r\n757.073 0.0340349\r\n628.744 0.18866\r\n709.967 0.00938141\r\n718.138 0.020334\r\n571.921 0.0263652\r\n613.958 0.0138249\r\n663.748 0.0845945\r\n503.802 0.0198822\r\n663.536 0.00722288\r\n502.657 0.0247267\r\n561.044 0.0137579\r\n529.707 0.0437586\r\n501.141 0.0399298\r\n567.409 0.0138549\r\n573.914 0.0360973\r\n581.831 0.0655676\r\n625.943 0.00494519\r\n551.08 0.0517938\r\n485.526 0.0352965\r\n554.985 0.00557072\r\n621.947 0.0179256\r\n431.818 0.0419553\r\n442.927 0.0274282\r\n413.022 0.0438075\r\n334.606 0.0128968\r\n449.513 0.071765\r\n355.823 0.0130854\r\n344.05 0.00532927\r\n460.85 0.00802145\r\n292.53 0.00735568\r\n379.189 0.0147083\r\n395.3 0.00252128\r\n399.84 0.00366313\r\n369.003 0.0266241\r\n280.349 0.0120607\r\n344.016 0.012053\r\n344.18 0.0570188\r\n255.704 0.0106002\r\n257.373 0.014672\r\n258.842 0.00993619\r\n265.773 0.034679\r\n254.952 0.0205942\r\n240.952 0.00608497\r\n208.36 0.00130549\r\n279.619 0.00142747\r\n244.542 0.0201925\r\n242.114 0.0012693\r\n258.541 0.00714668\r\n183.148 0.00549695\r\n238.453 0.0119491\r\n204.33 0.00342101\r\n218.185 0.0169233\r\n212.844 0.0165412\r\n246.974 0.0102653\r\n198.999 0.00271908\r\n193.838 0.0105552\r\n185.461 0.0192424\r\n222.376 0.0162523\r\n208.189 0.00216341\r\n215.107 0.0113122\r\n219.601 0.00178331\r\n177.656 0.0148194\r\n275.611 0.068843\r\n780.137 0.0596555\r\n699.994 0.0173279\r\n617.54 0.0702795\r\n867.475 0.0376144\r\n797.563 0.197515\r\n602.045 0.0201447\r\n611.959 0.00553249\r\n641.916 0.229798\r\n724.708 0.0270652\r\n638.359 0.037588\r\n537.113 0.0333842\r\n438.848 0.027168\r\n493.381 0.0615987\r\n563.725 0.0220584\r\n623.804 0.0851137\r\n677.967 0.131888\r\n779.866 0.0122134\r\n496.186 0.0144989\r\n600.538 0.0197237\r\n472.319 0.00641686\r\n526.274 0.0143642\r\n487.433 0.0673951\r\n492.439 0.0230945\r\n476.76 0.00302257\r\n372.148 0.00398936\r\n480.136 0.00602851\r\n324.562 0.00280523\r\n400.205 0.011406\r\n381.157 0.0328635\r\n293.869 0.00145467\r\n304.621 0.00656718\r\n279.046 0.0142855\r\n285.744 0.0158958\r\n328.707 0.0156746\r\n298.238 0.000608692\r\n299.382 0.0372867\r\n255.023 0.0157539\r\n322.713 0.0124566\r\n286.233 0.00850505\r\n330.579 0.0582298\r\n210.516 0.0139116\r\n281.059 0.0325826\r\n257.73 0.0345326\r\n265.689 0.0014341\r\n291.329 0.000192702\r\n259.306 0.010315\r\n270.352 0.00273505\r\n223.833 0.00651605\r\n234.593 0.00689698\r\n209.777 0.00520375\r\n234.021 0.0248795\r\n230.832 0.00700281\r\n186.009 0.00479342\r\n215.325 0.00883306\r\n172.211 0.00787606\r\n171.061 0.0344103\r\n250.449 0.00388549\r\n224.621 0.00307069\r\n180.096 0.00828193\r\n174.78 0.00413204\r\n207.899 0.0388119\r\n169.403 0.0116287\r\n173.233 0.0229973\r\n248.831 0.00816905\r\n886.566 0.0406534\r\n638.313 0.0112496\r\n632.87 0.00416263\r\n580.809 0.0589929\r\n887.519 0.00927245\r\n535.674 0.252007\r\n621.415 0.00746439\r\n697.931 0.00894357\r\n672.498 0.0558532\r\n524.265 0.000429605\r\n500.814 0.051768\r\n486.462 0.0458626\r\n437.984 0.00658947\r\n542.924 0.115029\r\n632.608 0.0244561\r\n485.868 0.0160883\r\n457.834 0.0994676\r\n490.01 0.0182187\r\n445.043 0.0509663\r\n501.614 0.0137698\r\n437.329 0.0114546\r\n494.816 0.0567037\r\n528.345 0.0171306\r\n436.157 0.0119338\r\n467.823 0.0152752\r\n447.428 0.0167352\r\n361.283 0.0152427\r\n356.478 0.0225472\r\n361.976 0.00691573\r\n320.488 0.000689988\r\n394.195 0.00312927\r\n288.809 0.00961029\r\n314.581 0.0309721\r\n307.499 0.0462257\r\n263.478 0.0203871\r\n319.601 0.00464118\r\n278.019 0.0212052\r\n281.659 0.00157834\r\n301.611 0.00284802\r\n272.549 0.00106111\r\n237.11 0.0103515\r\n311.811 0.00271541\r\n284.927 0.00114032\r\n266.044 0.00954874\r\n220.524 0.0120683\r\n254.3 0.00130736\r\n250.099 0.00565345\r\n221.311 0.000401597\r\n214.121 0.000492644\r\n221.879 0.0162612\r\n224.986 0.00515991\r\n183.394 0.0289187\r\n211.761 0.00246625\r\n159.109 0.00650098\r\n187.054 0.00459205\r\n189.879 0.019107\r\n263.816 0.0420695\r\n207.337 0.0154198\r\n195.482 0.0227388\r\n208.437 0.0193973\r\n159.579 0.0041315\r\n198.664 0.000779011\r\n178.935 0.00501289\r\n237.876 0.0062234\r\n1312.76 0.0128697\r\n810.686 0.13632\r\n950.86 0.162369\r\n799.131 0.0696833\r\n935.098 0.019626\r\n435.478 0.00180704\r\n643.709 0.0500153\r\n542.519 0.0309342\r\n478.914 0.0592094\r\n470.604 0.0963666\r\n496.853 0.0132806\r\n610.658 0.0368446\r\n490.725 0.0666337\r\n520.744 0.0256029\r\n496.738 0.00278224\r\n445.985 0.00262883\r\n436.001 0.0488392\r\n530.377 0.018393\r\n437.573 0.0633349\r\n465.303 0.016024\r\n463.984 0.0714806\r\n476.664 0.00345176\r\n426.106 0.00318597\r\n414.457 0.0396652\r\n455.299 0.0242992\r\n361.494 0.0119915\r\n435.544 0.00254752\r\n353.957 0.0422888\r\n350.209 0.00528273\r\n307.933 0.00454534\r\n324.959 0.00532537\r\n327.932 0.0377839\r\n317.648 0.00800579\r\n298.341 0.00458976\r\n290.194 0.00582124\r\n251.978 0.00563544\r\n324.299 0.013745\r\n296.635 0.0379007\r\n268.39 0.0187713\r\n238.409 0.019234\r\n238.586 0.0257409\r\n270.718 0.00758231\r\n217.836 0.000908456\r\n271.513 0.0134114\r\n208.236 0.0104568\r\n206.255 0.0413205\r\n181.917 0.0107658\r\n256.087 0.0131974\r\n185.115 0.00129049\r\n201.838 0.000739494\r\n242.559 0.0106154\r\n204.632 0.00199428\r\n200.943 0.0190009\r\n194.321 0.023882\r\n176.4 0.0135134\r\n174.748 0.00430499\r\n168.817 0.0105613\r\n181.689 0.00722373\r\n175.094 0.00175579\r\n169.327 0.00540145\r\n183.694 0.00226151\r\n178.153 0.000130526\r\n191.858 0.0133038\r\n260.634 0.00605769\r\n1004.87 0.488064\r\n825.048 0.0729063\r\n857.606 0.159203\r\n710.738 0.00563896\r\n986.656 0.0135068\r\n560.569 0.035051\r\n597.404 0.143727\r\n746.865 0.00775507\r\n549.977 0.0324632\r\n510.476 0.0188016\r\n477.584 0.0436527\r\n508.569 0.0356127\r\n544.028 0.0182946\r\n419.973 0.00368945\r\n449.465 0.117749\r\n490.345 0\r\n511.366 0.0294373\r\n410.746 0.1625\r\n437.482 0.0954769\r\n433.335 0.0151438\r\n418.837 0.011256\r\n419.321 0.0347788\r\n409.712 0.0601338\r\n424.153 0.0619666\r\n413.533 0.0263254\r\n382.876 0.0364199\r\n400.152 0.00564688\r\n344.638 0.00691178\r\n350.904 0.0256278\r\n352.536 0.0163868\r\n336.662 0.000600316\r\n370.182 0\r\n249.421 0.0208153\r\n297.733 0.0131185\r\n301.913 0.00414217\r\n345.262 0.00578713\r\n336.561 0.00817469\r\n244.996 0.0136825\r\n254.406 0.00689602\r\n208.518 0.0218947\r\n262.104 0.00150889\r\n230.057 0.004154\r\n264.366 0.0210725\r\n190.753 0.023388\r\n253.381 0.0111895\r\n204.829 0.00196606\r\n226.051 0.00302824\r\n206.53 0\r\n220.338 0.00862197\r\n205.191 0.023511\r\n252.584 0.00832025\r\n200.282 0.0171891\r\n194.413 0.00528203\r\n151.835 0.000596075\r\n189.399 0.0257673\r\n157.156 0.0131407\r\n180.868 0.00592646\r\n199.301 0.000359288\r\n196.747 0.0125198\r\n176.58 0.00121978\r\n187.18 0.0041575\r\n188.943 0.00792582\r\n147.904 0.00188737\r\n204.616 0.00947911\r\n1218.49 0.0133147\r\n796.408 0.0131225\r\n922.232 0.012003\r\n995.895 0.102706\r\n1007.59 0.0815763\r\n973.471 0.0134424\r\n838.709 0.082816\r\n929.165 0.00658016\r\n568.897 0.00876938\r\n544.105 0.0230912\r\n622.181 0.110535\r\n568.47 0.0322394\r\n519.063 0.0457494\r\n507.605 0.0479848\r\n627.443 0.0242485\r\n398.653 0.0115916\r\n450.397 0.0157299\r\n448.48 0.0313163\r\n441.128 0.062877\r\n385.977 0.021853\r\n372.619 0.00508895\r\n374.864 0.00771593\r\n409.33 0.0488965\r\n392.06 0.00473102\r\n401.769 0.0650026\r\n358.904 0.0379418\r\n422.877 0.0564785\r\n344.25 0.0149906\r\n328.328 0.00576113\r\n365.934 0.00601613\r\n344.761 0.0164361\r\n363.668 0.00301101\r\n351.281 0.0273031\r\n310.324 0.00412046\r\n296.982 0.0107577\r\n281.544 2.57204e-005\r\n239.294 0.0469302\r\n259.001 0.00735718\r\n318.359 0.00481453\r\n235.938 0.0170581\r\n286.71 0.00266075\r\n253.835 0.0607267\r\n212.429 0.0231415\r\n189.435 0.0202806\r\n229.846 0.00421727\r\n301.38 0.00214588\r\n209.215 0.00892544\r\n226.755 0.00263731\r\n185.761 0.0272977\r\n189.286 0.0384934\r\n209.145 0.0113176\r\n194.25 0.0106572\r\n180.48 0.000226084\r\n195.663 0.0103094\r\n171.266 0.00556771\r\n245.946 0.00876436\r\n207.818 0.0109711\r\n228.517 0.00761149\r\n160.694 0.0168468\r\n167.771 0.0116276\r\n148.666 0.00266782\r\n236.123 0.00479453\r\n147.642 9.66406e-005\r\n175.923 0.0376264\r\n1372.45 0.0688802\r\n781.147 0.0498678\r\n647.995 0.114334\r\n885.835 0.0278703\r\n859.213 0.0200285\r\n841.641 0.00610925\r\n795.986 0.0228158\r\n535.776 0.00089108\r\n641.11 0.0507355\r\n592.455 0.00110148\r\n538.249 0.000714014\r\n557.64 0.0332788\r\n454.418 0.0119264\r\n412.62 0.0163935\r\n486.268 0.0420817\r\n416.485 0.0240103\r\n501.322 0.0249774\r\n369.052 0.130187\r\n446.038 0.0553453\r\n377.56 0.037791\r\n375.584 0.0428642\r\n385.112 0.0299576\r\n398.906 0.0603655\r\n340.801 0.0434097\r\n394.196 0.00473168\r\n398.356 0.0435559\r\n323.554 0.0431413\r\n343.144 0.00343671\r\n339.171 0.0382026\r\n330.279 0.00761199\r\n345.799 0.0239973\r\n324.13 0.0128746\r\n304.183 0.0640834\r\n261.049 0.000964929\r\n320.141 0.00623427\r\n287.117 0.0172366\r\n258.609 0.00900628\r\n264.611 0.00183942\r\n233.861 0.0196949\r\n221.021 0.0110746\r\n255.341 0.0180585\r\n263.16 0.0267308\r\n231.23 0.0216207\r\n249.053 0.0379785\r\n217.1 0.00667422\r\n253.659 0.0208645\r\n245.374 0.0090496\r\n193.91 0.00488763\r\n290.06 0.00100218\r\n209.313 0.00338291\r\n171.387 0.00908013\r\n180.944 0.0176125\r\n180.356 0.0223481\r\n157.296 0.00987173\r\n173.092 0.00159479\r\n161.938 0.00753154\r\n195.821 0.00271022\r\n187.63 0.00747216\r\n213.373 0.000417325\r\n177.693 0.0170065\r\n142.361 0.00330763\r\n186.414 2.22877e-005\r\n150.828 0.0116914\r\n203.113 0.00270702\r\n1183.21 0.00284046\r\n789.256 0.00430291\r\n865.974 0.108858\r\n796.881 0.0153261\r\n807.495 0.105319\r\n626.176 0.0304201\r\n649.466 0.0299184\r\n721.442 0.0450185\r\n656.578 0.0283945\r\n521.003 0.0100424\r\n534.405 0.00268475\r\n505.939 0.05191\r\n514.238 0.000321863\r\n443.328 0.0179879\r\n520.46 0.0601801\r\n392.513 0.0520324\r\n376.353 0.0179581\r\n438.025 0.0615352\r\n342.996 0.00614174\r\n420.545 0.0507134\r\n344.63 0.0247192\r\n429.618 0.00719914\r\n414.515 0.014726\r\n382.796 0.0205614\r\n355.04 0.0269288\r\n401.59 0.0098668\r\n388.658 0.0182762\r\n367.048 0.00047404\r\n343.821 0.00207849\r\n367.311 0.0491386\r\n351.788 0.00383876\r\n272.058 6.47363e-005\r\n289.329 0.000992799\r\n259.867 0.00574819\r\n312.671 0.00403759\r\n290.731 0.0270517\r\n284.844 0.0124866\r\n272.512 0.00908418\r\n280.375 0.021713\r\n240.237 0.000322021\r\n253.311 0.00771112\r\n210.723 0.0353157\r\n234.008 0.00473687\r\n207.183 0.0060558\r\n213.444 0.00299069\r\n172.568 0.00736968\r\n177.31 0.0312765\r\n207.799 0.0151233\r\n174.205 0.0100615\r\n179.654 0.002764\r\n163.207 0.00380754\r\n165.536 0.00746979\r\n149.81 0.00836258\r\n153.117 0.010897\r\n183.323 0.00579208\r\n150.323 0.0190107\r\n173.508 0.000830714\r\n144.242 9.95809e-005\r\n169.136 0.00508633\r\n164.234 0.0262662\r\n168.001 0.00314081\r\n163.074 0.000990893\r\n194.768 0.000866039\r\n216.83 0.0114548\r\n1043.97 0.047412\r\n844.681 0.0215442\r\n888.753 0.0182805\r\n1065.63 0.0872829\r\n915.753 0.00659901\r\n650.729 0.00520247\r\n539.735 0.0506084\r\n685.664 0.0402993\r\n656.17 0.0978621\r\n465.851 0.0360456\r\n471.108 0.0824067\r\n414.812 0.109196\r\n373.379 0.103195\r\n465.594 0.00618119\r\n433.78 0.0472414\r\n377.403 0.00977416\r\n346.467 0.0436379\r\n366.799 0.0255638\r\n375.792 3.88909e-005\r\n308.124 0.0575353\r\n316.864 0.00970081\r\n363.097 0.0135907\r\n363.872 0.0154353\r\n426.755 0.0314373\r\n373.535 0.00079864\r\n359.449 0.000277789\r\n383.238 0.04103\r\n323.061 0.0155659\r\n370.351 0.100771\r\n314.718 0.0476902\r\n329.324 0.00214327\r\n287.447 0.0350946\r\n303.212 0.00052088\r\n273.473 0.00311099\r\n265.681 0.00492154\r\n257.66 0.00951338\r\n284.241 0.0026087\r\n262.733 0.00219536\r\n278.527 0.00941731\r\n246.208 0.0246171\r\n243.412 0.00255761\r\n213.599 0.0428965\r\n212.604 0.000244867\r\n190.046 0.00631955\r\n218.216 0.0122307\r\n169.421 0.0246572\r\n207.989 0.0140551\r\n167.256 0.0186569\r\n171.554 0.00360955\r\n158.414 0.0073474\r\n205.195 0.0169953\r\n194.637 0.0353738\r\n150.644 0.016362\r\n183.814 0.00229342\r\n153.92 0.00686781\r\n151.895 0.0093702\r\n153.048 0.00380513\r\n226.233 0.00998915\r\n150.236 0.00981295\r\n192.941 0.00306985\r\n151.575 0.00713192\r\n163.941 0.00415667\r\n151.264 0.00132603\r\n160.395 0.00464289\r\n1172.11 0.0369811\r\n962.054 0.00850806\r\n915.938 0.041668\r\n946.502 0.151234\r\n915.704 0.00593401\r\n601.166 0.0403542\r\n529.186 0.00255239\r\n557.725 0.0651595\r\n507.916 0.0201692\r\n557.916 0.0875186\r\n462.823 0.0679427\r\n466.129 0.0518698\r\n467.426 0.021492\r\n503.413 0.012907\r\n373.008 0.0813309\r\n407.188 0.0368384\r\n410.184 0.0135508\r\n394.89 0.0362479\r\n394.461 0.0248081\r\n327.618 0.000217996\r\n324.763 0.0144604\r\n270.337 0.0155431\r\n348.887 0.0236064\r\n395.593 0.0335841\r\n330.555 0.00656011\r\n308.551 0.0197274\r\n275.617 0.032734\r\n298.292 0.0173268\r\n306.928 0.000125058\r\n288.629 0.00189019\r\n294.71 0.0185168\r\n264.345 0.00707288\r\n283.928 0.0416141\r\n231.817 0.00309802\r\n294.206 0.020248\r\n259.619 0.0120529\r\n263.727 0.00300092\r\n232.793 0.0341519\r\n223.145 0.000486681\r\n216.552 0.00322999\r\n239.307 0.0361965\r\n215.045 0.00108625\r\n202.531 0.00952396\r\n214.775 0.0109529\r\n193.771 0.00256711\r\n166.455 0.011008\r\n189.518 0.00419746\r\n167.964 0.0160467\r\n206.184 0.00741664\r\n173.386 0.0106826\r\n208.743 0.0131182\r\n165.508 0.00484359\r\n175.033 0.0285204\r\n177.648 0.0139417\r\n153.118 0.012507\r\n156.062 0.0095676\r\n171.175 0.030527\r\n159.935 0.0406691\r\n184.534 0.00712874\r\n149.679 0.00055582\r\n160.713 9.14027e-005\r\n137.028 0.00359163\r\n178.097 0.0088684\r\n165.612 0.00464831\r\n1072.41 0.186927\r\n907.385 0.043115\r\n880.723 0.102422\r\n778.259 0.0103338\r\n1055.18 0.0955651\r\n668.294 0.0665592\r\n684.008 0.0015098\r\n627.636 0.0278179\r\n480.617 0.00676326\r\n510.05 0.0598459\r\n507.827 0.0201249\r\n431.623 0.0539181\r\n461.168 0.0293618\r\n402.11 0.0244759\r\n371.91 0.0718006\r\n427.851 0.0030381\r\n343.803 0.0154507\r\n346.444 0.00362184\r\n399.177 0.00613637\r\n313.187 0.0197935\r\n372.562 0.0390484\r\n291.427 0.0805942\r\n336.63 0.0201896\r\n289.387 0.0071158\r\n341.103 0.00851063\r\n339.943 0.0392215\r\n334.065 0.0452933\r\n300.66 0.00460515\r\n269.858 0.0222587\r\n235.247 0.00179692\r\n289.968 0.0436365\r\n255.503 0.0117649\r\n263.377 0.0194048\r\n244.118 0.0294814\r\n373.234 0.0120543\r\n236.792 0.0171343\r\n215.933 0.0247962\r\n218.197 0.00134187\r\n234.109 0.0206231\r\n186.791 0.02565\r\n217.933 0.0102919\r\n208.361 0.000145189\r\n180.033 0.0107053\r\n171.131 0.0206364\r\n193.821 0.0074508\r\n202.141 0.0159166\r\n236.641 0.0164718\r\n148.125 0.00333548\r\n153.372 0.0109219\r\n152.068 0.00400518\r\n154.409 0.000938875\r\n149.111 0.0130139\r\n166.086 0.0104366\r\n200.19 0.0233706\r\n165.032 0.00441456\r\n171.838 0.00534525\r\n148.443 0.0153091\r\n140.103 0.0010295\r\n159.293 0.0157056\r\n150.572 0.000521582\r\n178.741 0.016501\r\n149.533 0.0217056\r\n171.151 0.0162687\r\n196.862 0.00846543\r\n1406.73 0.0710678\r\n838.04 0.0464442\r\n762.512 0.0156526\r\n571.131 0.0334829\r\n775.698 0.0988375\r\n659.337 0.010053\r\n770.962 0.0448717\r\n514.056 0.046741\r\n506.447 0.00935677\r\n549.609 0.0114489\r\n512.273 0.00694931\r\n434.941 0.000907881\r\n389.678 0.0317639\r\n325.065 0.00766098\r\n389.675 0.0248351\r\n344.841 0.0616618\r\n324.647 0.0609445\r\n375.052 0.0453313\r\n346.263 0.000845515\r\n306.98 0.00140248\r\n277.877 0.0121571\r\n289.491 0.0242226\r\n280.51 0.00391418\r\n278.179 0.00847973\r\n263.244 0.00483333\r\n294.344 0.0273841\r\n309.769 0.000279817\r\n253.955 0.00592002\r\n260.181 0.0133259\r\n260.819 0.0106753\r\n259.07 0.0214017\r\n290.651 0.015125\r\n224.946 0.0327696\r\n233.537 0.0110893\r\n215.586 0.00597953\r\n254.594 0.0208394\r\n200.543 0.00304657\r\n194.159 0.0220582\r\n227.668 0.0143708\r\n246.995 0.00908165\r\n204.216 3.95982e-005\r\n236.059 0.00674788\r\n195.246 0.00689312\r\n221.814 0.03178\r\n201.925 0.0230913\r\n199.07 0.0263735\r\n184.93 0.00334786\r\n193.479 0.00390789\r\n186.221 0.0289831\r\n255.35 0.00440218\r\n168.743 0.00300861\r\n156.478 0.0268462\r\n148.615 0.0037224\r\n150.562 0.00836448\r\n142.886 0.0117405\r\n197.402 0.00677026\r\n171.76 0.00205394\r\n174.736 0.000987378\r\n174.54 0.011404\r\n134.15 0.00825636\r\n164.934 0.0255316\r\n142.601 0.00371993\r\n145.624 0.00297494\r\n153.711 0\r\n1333.38 0.0796898\r\n846.133 0.0257432\r\n772.643 0.0718752\r\n623.112 0.0548283\r\n580.251 0.0412607\r\n551.415 0.0468356\r\n671.37 0.0651945\r\n626.766 0.00709808\r\n632.199 0.065961\r\n392.071 0.066734\r\n389.014 0.00862296\r\n328.136 0.00977224\r\n396.293 0.00724667\r\n302.145 0.00845397\r\n328.252 0.0891562\r\n333.957 0.0208153\r\n317.078 0.0502525\r\n329.423 0.0224944\r\n345.882 0.00378494\r\n349.387 0.0207379\r\n362.998 0.0144307\r\n293.778 0.0090864\r\n336.487 0.0426708\r\n338.096 0.0045424\r\n317.484 0.0164816\r\n243.169 0.0224296\r\n262.046 0.00257415\r\n222.071 0.00589161\r\n233.626 0.0100488\r\n256.267 0.0242381\r\n213.559 0.00629152\r\n281 0\r\n241 0\r\n285.695 0.00522802\r\n261.401 0.0219857\r\n242.245 0.0114675\r\n241.96 0.0100314\r\n250.634 0.0205188\r\n211.929 0.00264272\r\n230.773 0.00631239\r\n179.886 0.00225256\r\n193.653 0.00193851\r\n180.4 0.0153289\r\n185.505 0.0226095\r\n203.153 0.0154737\r\n165.883 0.00169893\r\n181.298 0.0106413\r\n176.77 0.00862197\r\n213.518 4.44089e-016\r\n156.262 0.0140281\r\n133.997 0.00615716\r\n155.824 0.012216\r\n153.693 0.000298796\r\n160.74 0.0013457\r\n184.741 0.00110125\r\n161.747 0.00382769\r\n127.467 0.00351242\r\n126.922 0.00342696\r\n135.735 0.00560428\r\n159.026 0.00350745\r\n232.483 0.00418529\r\n136.866 0.00361822\r\n166.046 0.00257949\r\n156.861 0\r\n1314.03 0.0666499\r\n705.807 0.029533\r\n957.768 0.0129098\r\n971.255 0.0298442\r\n839.736 0.0275717\r\n582.148 0.000388924\r\n664.765 0.0580522\r\n546.168 0.0279763\r\n574.333 0.00118732\r\n418.317 0.0202375\r\n442.919 0.0179866\r\n356.114 0.0097267\r\n346.455 0.0109189\r\n366.581 0.0108419\r\n366.123 0.0287035\r\n369.412 0.0270151\r\n428.991 0.0108276\r\n356.41 0.0366954\r\n328.424 0.0215469\r\n302.824 0.001569\r\n331.716 0.0252946\r\n267.202 0.00109689\r\n293.927 0.000515047\r\n317.284 0.0941225\r\n280.793 0.0242778\r\n236.792 0.000167187\r\n266.357 0.00421987\r\n254.464 0.0262808\r\n226.624 6.06064e-005\r\n246.743 0.016845\r\n256.05 0.00578438\r\n267.118 0.0137985\r\n251.6 0.00875541\r\n265.955 0.0230543\r\n228.104 0.00884064\r\n234.113 0.00470376\r\n223.509 0.00147727\r\n237.636 0.0267594\r\n214.899 0.00506343\r\n217.706 0.0235263\r\n221.014 0.00423493\r\n196.505 0.000486696\r\n215.198 0.00978295\r\n206.132 0.0266577\r\n186.998 0.0239977\r\n187.323 0.0187427\r\n199.1 0.00229537\r\n170.68 0.00268559\r\n141.805 0.012134\r\n158.045 0.0106451\r\n169.062 0.00313013\r\n136.947 0.00813011\r\n156.424 0.0282216\r\n143.99 0.000138413\r\n133.495 0.0221919\r\n139.76 0.00734815\r\n136.571 0.0100031\r\n135.082 0.00200586\r\n143.106 0.0146224\r\n127.919 0.00156977\r\n147.569 0.00346334\r\n163.531 0.0063104\r\n202.503 0.0161732\r\n182.467 0.0132478\r\n1278.72 0.0456354\r\n1027.58 0.0203601\r\n979.198 0.00319397\r\n698.894 0.084148\r\n720.099 0.000671354\r\n588.915 0.0295727\r\n704.911 0.0374246\r\n451.194 0.0785564\r\n591.554 0.0428468\r\n527.562 0.101089\r\n436.377 0.00470317\r\n370.554 0.0270299\r\n390.03 0.000123115\r\n334.976 0.00821951\r\n337.477 0.0246948\r\n377.346 0.0140247\r\n363.014 0.0278535\r\n299.44 0.0155624\r\n314.209 0.00876193\r\n294.357 0.024513\r\n244.756 0.00135285\r\n287.651 0.00425338\r\n296.59 0.0348295\r\n283.544 0.0176009\r\n279.855 0.0325887\r\n288.982 0.0135346\r\n200.289 0.00193693\r\n235.072 0.0277899\r\n198.892 0.00307014\r\n195.726 0.0287164\r\n219.849 0.0501834\r\n275.435 0.000936074\r\n230.26 0.00858149\r\n214.06 0.0239326\r\n206.209 0.000822165\r\n218.343 0.00878192\r\n188.827 0.00279732\r\n215.541 0.0194789\r\n201.466 0.011076\r\n180.938 0.010799\r\n205.913 0.000901691\r\n207.87 0.00476798\r\n231.396 0.000307093\r\n191.181 0.00848565\r\n172.358 7.98015e-005\r\n187.167 0.000214962\r\n169.874 0.019944\r\n172.236 0.00358803\r\n171.256 0.0152468\r\n138.244 0.000525441\r\n170.326 0.00099697\r\n161.943 0.00532483\r\n137.24 0.000464351\r\n135.691 0.0122565\r\n141.249 0.00190559\r\n131.078 0.0025142\r\n136.109 0.0049186\r\n157.32 0.00105144\r\n130.299 0.00164288\r\n139.582 0.00291231\r\n115.507 0.00281367\r\n114.321 0.000493578\r\n128.489 0.0375219\r\n174.067 0.0333371\r\n1429.32 0.0184414\r\n789.672 0.0201514\r\n787.132 0.0377345\r\n672.605 0.00343704\r\n531.436 0.00501213\r\n611.265 0.0427021\r\n456.999 0.0215649\r\n549.749 0.0113177\r\n555.555 0.0366531\r\n560.987 0.0221344\r\n543.999 0.0151436\r\n374.862 0.0190842\r\n413.391 0.000880371\r\n321.153 0.0227532\r\n320.329 0.0509003\r\n330.901 0.0864208\r\n353.819 0.0101678\r\n279.642 0.00893508\r\n250.81 0.0419779\r\n309.411 0.00215248\r\n362.082 0.0188667\r\n318.006 0.0191614\r\n217.261 0.0189799\r\n275.447 0.00584579\r\n231.563 0.0192595\r\n260.184 0.0115069\r\n206.948 0.0107608\r\n222.041 0.0675565\r\n200.49 0.0219985\r\n183.702 0.0134755\r\n205.476 0.00823949\r\n196.237 0.00384684\r\n237.628 0.0085356\r\n224.671 0.0198579\r\n221.584 0.0437772\r\n219.172 0.00593457\r\n186.069 0.0218772\r\n195.637 0.0203219\r\n181.268 0.00548033\r\n165.68 0.00958235\r\n169.865 0.0128819\r\n177.302 7.1287e-006\r\n174.791 0.00268728\r\n170.857 0.00401971\r\n201.941 0.00910717\r\n180.719 0.00780353\r\n179.586 0.00219294\r\n173.401 0.00855704\r\n169.552 0.000261073\r\n166.459 0.00181086\r\n204.449 0.00131063\r\n121.208 0.00105282\r\n148.345 0.00586915\r\n134.511 0.00735347\r\n137.668 0.00710554\r\n138.348 0.00846497\r\n146.563 0.000591274\r\n138.696 0.0161714\r\n128.774 0.000787918\r\n148.858 0.013365\r\n122.456 0.0115628\r\n135.512 0.00988229\r\n142.456 0.0013474\r\n172.703 0.000314986\r\n1106.34 0.0113791\r\n541.172 0.0106719\r\n676.57 0.0316254\r\n608.201 0.0154421\r\n534.517 0.011217\r\n501.76 0.0603644\r\n631.004 0.0146446\r\n459.239 0.0498598\r\n449.528 0.0872141\r\n477.992 0.0367039\r\n404.972 0.0130843\r\n333.74 0.010626\r\n316.295 0.0045949\r\n342.756 0.0561706\r\n354.919 0.000531511\r\n269.679 0.00502421\r\n304.473 0.00742646\r\n312.067 0.0408501\r\n265.748 0.0322947\r\n281.7 0.0069685\r\n274.012 0.0195528\r\n303.082 0.0212263\r\n297.671 0.0116987\r\n204.258 0.0317353\r\n208.573 0.0817034\r\n215.424 0.0192981\r\n210.251 0.0207808\r\n248.395 0.000601307\r\n200.323 0.00736739\r\n179.126 0.00896414\r\n188.243 0.0173725\r\n212.566 0.00502697\r\n192.216 0.00768128\r\n208.301 0.00885702\r\n187.028 0.00341774\r\n178.828 0.0135796\r\n161.137 0.00276958\r\n171.621 0.000606662\r\n177.156 0.00177049\r\n240.175 0.00955566\r\n206.909 0.00253491\r\n166.42 0.0162876\r\n171.535 0.0042485\r\n163.268 0.00476602\r\n206.516 0.0197684\r\n168.735 0.0155681\r\n157.878 0.0286275\r\n188.436 0.00767129\r\n144.687 0.00187438\r\n146.24 0.00539411\r\n162.61 0.00360048\r\n135.714 0.000499545\r\n186.054 0.00581867\r\n137.645 0.00994401\r\n192.906 0.0097677\r\n134.362 0.0111506\r\n154.272 0.00174995\r\n124.583 0.00860014\r\n154.808 0.00163655\r\n113.567 0.0120418\r\n158.437 0.0022279\r\n121.87 0.0194303\r\n115.375 0.00778894\r\n159.022 0.00361509\r\n1181.03 0.078366\r\n725.122 0.0179455\r\n589.995 0.025796\r\n706.596 0.00525339\r\n601.911 0.0875597\r\n543.16 0.0407733\r\n551.65 0.0392025\r\n591.702 0.0144555\r\n474.828 0.0492147\r\n409.152 0.0336696\r\n429.77 0.0170063\r\n396.718 0.00461675\r\n425.783 0.00402888\r\n293.389 0.0303199\r\n416.311 0.0322256\r\n309.699 2.9917e-005\r\n296.082 0.0090588\r\n351.861 0.00454158\r\n232.536 0.0139684\r\n234.682 0.00697639\r\n265.129 0.00174733\r\n261.885 0.0199239\r\n301.86 0.022947\r\n245.087 0.00942066\r\n240.618 0.0404492\r\n221.598 0.00434445\r\n232.016 0.00288235\r\n191.833 0.0029951\r\n170.873 9.35898e-005\r\n182.575 0.000205619\r\n153.408 0.000633215\r\n172.977 0.00110468\r\n172.319 0.00562983\r\n200.108 0.00221419\r\n195.325 0.0234152\r\n185.653 0.0155367\r\n158.008 0.00116007\r\n159.979 0.0299284\r\n149.116 0.000232248\r\n148.207 0.00150634\r\n173.934 0.00110922\r\n174.805 0.0196511\r\n203.995 0.0352096\r\n177.636 0.00939656\r\n164.225 0.0149877\r\n145.896 0.00752044\r\n180.036 0.0184788\r\n180.21 0.00888775\r\n153.867 0.0155795\r\n138.562 0.0108451\r\n146.131 0.00886544\r\n124.86 0.00188718\r\n150.207 0.000478674\r\n156.042 0.00325018\r\n135.189 0.00258968\r\n143.379 0.00252721\r\n121.851 0.00176086\r\n134.104 0.00265799\r\n144.514 0.00143602\r\n129.043 0.0110662\r\n124.33 0.000769857\r\n133.048 0.00174473\r\n109.64 0.00537689\r\n157.738 0.00556917\r\n1305.46 0.0446132\r\n759.214 0.0197065\r\n802.127 0.0255419\r\n708.734 0.111814\r\n770.195 0.00300654\r\n653.056 0.0229775\r\n595.858 0.0704811\r\n461.678 0.00911424\r\n418.394 0.026832\r\n352.333 0.0207569\r\n383.462 0.0082656\r\n347.914 0.0141112\r\n391.959 0.000246825\r\n392.371 0.00306071\r\n332.178 0.0375442\r\n351.143 0.0206669\r\n335.808 0.00164772\r\n288.305 0.0121431\r\n321.414 0.0101428\r\n223.443 0.00113816\r\n257.827 0.0103403\r\n305.043 0.0106282\r\n218.458 0.0065716\r\n203.643 0.00246133\r\n226.472 0.00347706\r\n247.96 0.0112946\r\n234.111 0.0254264\r\n181.537 0.0634687\r\n200.547 0.0114485\r\n155.907 0.0127635\r\n174.85 0.0205579\r\n167.746 0.00570823\r\n169.742 0.00607672\r\n154.643 0.0214159\r\n210.08 0.00445568\r\n150.08 0.0268666\r\n160.438 0.0105272\r\n154.677 0.00510441\r\n163.082 0.00144297\r\n159.032 0.0201595\r\n165.447 0.00379337\r\n165.612 0.0140195\r\n176.358 0.0134112\r\n167.932 0.000402721\r\n143.669 2.23347e-005\r\n150.083 0.0118539\r\n146.518 0.0048693\r\n161.529 0.0203767\r\n134.827 0.000380012\r\n126.586 0.00330378\r\n128.498 0.000145634\r\n136.193 0.0232635\r\n126.814 0.0110751\r\n151.937 0.00284843\r\n149.179 0.00872386\r\n140.33 0.0101498\r\n127.055 0.00148372\r\n136.337 0.00178058\r\n116.592 0.00235091\r\n126.696 0.00386658\r\n117.152 0.00235598\r\n141.423 0.00270731\r\n102.326 0.000627191\r\n150.162 0.0176561\r\n1244.42 0.151169\r\n727.394 0.0489626\r\n769.853 0.0396642\r\n644.11 0.00356679\r\n667.279 0.0174973\r\n576.458 0.0402357\r\n587.501 0.0622226\r\n385.946 0.0317828\r\n419.893 0.0233665\r\n486.165 0.0168045\r\n512.652 0.000524124\r\n380.167 0.0262298\r\n355.681 0.00620837\r\n343.404 0.0459841\r\n317.866 0.00246384\r\n325.021 0.00106956\r\n352.191 0.00568995\r\n261.238 0.00235249\r\n271.673 0.0101932\r\n227.841 0.00645878\r\n222.308 0.0323319\r\n214.035 0.00744668\r\n181.23 0.0179098\r\n200.597 0.0177449\r\n196.94 0.00997604\r\n199.362 0.0187991\r\n203.236 0.00345404\r\n169.847 0.00599182\r\n186.077 0.00603368\r\n192.566 0.00561311\r\n176.369 0.00341623\r\n154.814 2.45294e-005\r\n168.216 0.00359224\r\n147.713 0.01246\r\n144.241 0.00547772\r\n151.586 0.0010285\r\n139.292 0.00949008\r\n171.137 1.17788e-005\r\n148.535 0.000875852\r\n157.596 0.0102638\r\n142.766 0.0269764\r\n135.219 6.6686e-005\r\n132.886 0.00878034\r\n154.433 0.0105395\r\n144.887 0.00656018\r\n124.298 0.000160668\r\n120.43 0.00338283\r\n159.326 0.00482665\r\n111.964 0.00134112\r\n169.344 0.00802811\r\n120.558 0.000902861\r\n160.625 0.00427136\r\n116.304 0.00396058\r\n128.699 0.00128244\r\n125.701 0.00173355\r\n121.259 0.00544239\r\n129.391 0.00129861\r\n125.212 0.00507998\r\n136.14 0.0209395\r\n130.898 0.0075438\r\n121.516 0.00323687\r\n108.709 0.009651\r\n153.605 0.00610425\r\n174.194 0.0149698\r\n1294.4 0.0220054\r\n501.197 0.0512409\r\n803.708 0.0141997\r\n579.412 0.00414213\r\n531.29 0.0148446\r\n465.234 0.03576\r\n488.359 0.00733448\r\n375.768 0.025002\r\n414.064 0.00974825\r\n576.028 0.0060648\r\n417.955 0.0692799\r\n518.486 0.00596346\r\n362.654 0.00430703\r\n382.456 0.0115157\r\n313.983 0.0397991\r\n284.685 7.10543e-015\r\n291.999 0.0208153\r\n259.807 0.0196647\r\n232.481 0.0102357\r\n268.739 0.0340933\r\n243.208 0.0182665\r\n221.022 0.0508169\r\n241.282 0.0172199\r\n202.574 0.0199315\r\n242.027 0.0039046\r\n217.271 0.00855738\r\n170.85 0.00150662\r\n195.774 0.00347314\r\n176.387 0.00845662\r\n143.723 0.0351682\r\n175.835 0.00570501\r\n149.53 0\r\n148.74 0.0294373\r\n191.49 0.0176416\r\n149.985 0.0243949\r\n166.663 0.0313772\r\n160.861 0.00856153\r\n166.809 0.0155537\r\n193.963 0.0186534\r\n136.843 0.0080499\r\n150.958 0.00793653\r\n148.821 0.0008378\r\n183.758 0.0415593\r\n147.86 0.000439583\r\n161.21 0.00335123\r\n180.381 0.00670157\r\n124.409 0.00665182\r\n154.371 3.55271e-015\r\n161.463 0.0208153\r\n143.625 0.0046715\r\n131.766 0.00574094\r\n132.797 0.0037298\r\n135.133 0.00722989\r\n126.19 0.00231768\r\n139.704 0.0133\r\n115.249 0.00256588\r\n123.32 0.012343\r\n131.448 0.0032582\r\n105.491 0.00626194\r\n121.134 0.00671999\r\n103.317 0.00371798\r\n135.057 0.0034896\r\n116.541 0.00686141\r\n156.657 0.0074857\r\n1219.51 0.0382142\r\n710.743 0.00802268\r\n659.508 0.0449252\r\n479.45 0.0178489\r\n454.024 0.0160163\r\n588.819 0.00128414\r\n621.487 0.0351775\r\n649.301 0.0273071\r\n566.052 0.00899924\r\n369.261 0.0539344\r\n571.626 0.0143327\r\n334.662 0.00283466\r\n439.814 0.0260368\r\n343.014 0.00876364\r\n333.276 0.0262783\r\n391.638 0.00318469\r\n298.736 0.00683818\r\n263.179 0.00129726\r\n230.028 0.0621579\r\n234 0.00594043\r\n232.071 0.0579025\r\n255.436 0.0173768\r\n219.874 0.0134016\r\n221.559 0.00104013\r\n227.405 0.00746084\r\n207.934 0.00876131\r\n220.781 0.00702353\r\n153.633 0.0105635\r\n154.653 0.00135686\r\n167.392 0.00886671\r\n187.516 0.00627994\r\n187.733 0.0196676\r\n142.269 0.00610155\r\n164.293 0.028155\r\n185.904 0.0414876\r\n140.408 0.0171866\r\n146.34 0.0102776\r\n187.672 0.0010085\r\n156.735 0.020363\r\n145.304 0.0136945\r\n140.179 2.75153e-005\r\n196.96 0.0152567\r\n161.948 0.00981246\r\n114.753 0.00123007\r\n138.246 0.00165703\r\n162.385 0.0117695\r\n154.317 0.0174574\r\n135.584 0.0017063\r\n123.518 0.00110003\r\n135.983 0.0128841\r\n119.976 0.0107048\r\n122.828 0.00684346\r\n148.688 0.000971803\r\n113.741 0.00860417\r\n153.045 0.000468521\r\n95.5051 0.00920899\r\n115.186 0.00337943\r\n98.8121 0.000669289\r\n131.485 0.00364578\r\n115.312 0.00656985\r\n99.4516 0.0209648\r\n96.4902 0.00249186\r\n102.693 0.00264889\r\n131.536 0.0092262\r\n1456.8 0.35563\r\n588.044 0.0056552\r\n615.341 0.0124354\r\n769.302 0.0106035\r\n720.249 0.0270038\r\n556.477 0.0144336\r\n530.625 0.00410034\r\n411.652 0.0168705\r\n480.043 0.00425923\r\n358.959 0.0205185\r\n378.322 0.0112012\r\n392.099 0.00911943\r\n412.546 0.000995696\r\n346.86 0.0216434\r\n360.735 0.00743577\r\n216.417 0.00646567\r\n324.506 0.00207939\r\n269.356 0.048601\r\n207.826 0.0010036\r\n205.38 0.0556732\r\n220.774 0.0112099\r\n212.538 0.00110469\r\n196.447 0.00673823\r\n189.534 0.0377143\r\n213.487 0.00062643\r\n174.914 0.0311826\r\n168.454 0.0452659\r\n163.114 0.0246809\r\n148.886 0.0251061\r\n152.639 0.00513552\r\n192.683 0.0203763\r\n155.881 0.0195611\r\n157.376 0.0124643\r\n151.254 0.00484208\r\n146.208 0.0219391\r\n149.599 0.00580215\r\n152.258 0.00342268\r\n151.081 0.00276698\r\n158.228 0.0116592\r\n126.954 0.00153391\r\n155.615 0.00838753\r\n189.44 0.00979295\r\n143.678 0.0201897\r\n185.16 0.00718851\r\n117.3 0.00122305\r\n139.84 0.0128307\r\n154.225 0.00127787\r\n118.133 0.0114176\r\n122.713 0.0381512\r\n133.124 0.00215073\r\n148.259 0.0103236\r\n132.254 0.000385753\r\n119.854 0.00711647\r\n109.921 0.00735373\r\n128.136 0.0340002\r\n118.143 0.0101051\r\n113.262 0.00717143\r\n92.6208 0.00375505\r\n100.598 0.00961037\r\n110.48 0.00902488\r\n99.7202 0.0030443\r\n97.1804 0.00257776\r\n138.928 0.0122036\r\n153.371 0.00759355\r\n1409.22 0.166041\r\n932.222 0.0276589\r\n647.19 0.0128695\r\n614.456 0.0390943\r\n870.044 0.00229648\r\n417.592 0.00754825\r\n493.329 0.0162469\r\n404.431 0.0526703\r\n388.522 0.0211531\r\n411.948 0.0130497\r\n477.939 0.0083582\r\n440.167 0.02916\r\n398.352 0.00432099\r\n287.044 0.035515\r\n390.599 0.00628168\r\n277.149 0.00560186\r\n260.153 0.0208504\r\n219.179 0.0381849\r\n223.731 0.0183476\r\n190.436 0.0144831\r\n219.77 0.0318391\r\n170.29 0.017423\r\n167.157 0.0010604\r\n172.008 0.0068695\r\n179.06 0.0112807\r\n171.886 0.00372518\r\n181.638 0.00135371\r\n142.506 0.0277131\r\n143.966 0.000887386\r\n178.053 0.000604677\r\n187.284 0.0087515\r\n155.062 0.0240388\r\n158.643 0.0117126\r\n152.11 0.00331316\r\n179.748 0.00498652\r\n139.934 0.00503411\r\n126.368 0.00401512\r\n129.29 9.52435e-005\r\n142.921 0.00314338\r\n158.432 0.00586256\r\n135.755 0.0024775\r\n121.854 0.000129611\r\n156.785 0.00533078\r\n145.817 0.00788211\r\n128.385 0.0136892\r\n127.719 0.0154313\r\n116.267 0.0171097\r\n115.98 0.0125369\r\n127.613 0.00107185\r\n144.3 0.00117036\r\n124.636 0.00013442\r\n126.038 0.00691763\r\n105.559 0.00261403\r\n111.408 0.0139744\r\n128.887 0.00174918\r\n126.967 0.00685859\r\n109.286 0.00456009\r\n108.499 0.000654155\r\n93.1289 0.00391162\r\n115.275 0.00930799\r\n115.753 0.0137831\r\n122.838 0.00215065\r\n134.6 0.00113174\r\n149.522 0.000401904\r\n1111.51 0.0167433\r\n616.818 0.00129809\r\n563.356 0.017076\r\n619.432 0.0382042\r\n513.961 0.00047804\r\n541.143 0.0165394\r\n535.077 0.0327052\r\n394.313 0.0489732\r\n477.388 0.0130986\r\n464.692 0.00189765\r\n392.099 0.0277276\r\n438.36 0.00140613\r\n363.798 0.00591646\r\n278.196 0.00957798\r\n331.188 0.00412586\r\n388.45 0.00151179\r\n253.883 0.00340729\r\n258.869 0.0319993\r\n263.028 0.012744\r\n254.965 0.0303052\r\n283.76 0.00705053\r\n211.748 0.0157754\r\n218.385 0.0294896\r\n179.607 0.0355995\r\n192.886 0.0164647\r\n189.654 0.0040625\r\n163.335 0.0167645\r\n183.705 0.00685263\r\n220.577 0.00735488\r\n160.347 0.00288924\r\n146.127 0.00540926\r\n134.945 0.00525768\r\n154.653 0.00942323\r\n194.976 0.0100387\r\n149.761 0.00621798\r\n159.407 0.00314187\r\n151.132 0.00178805\r\n134.064 0.0148241\r\n143.945 0.00370807\r\n155.572 0.0142166\r\n153.149 0.00596001\r\n158.798 0.0115003\r\n142.079 0.0154332\r\n169.734 0.00247797\r\n113.107 0.00304666\r\n126.439 0.0169371\r\n119.047 0.0055158\r\n105.723 0.00863886\r\n151.191 0.00606947\r\n123.132 0.00239298\r\n129.733 0.0226104\r\n109.012 0.000576837\r\n130.609 0.00841834\r\n106.534 0.00163164\r\n131.086 0.0102301\r\n107.676 0.00684104\r\n108.311 0.0170368\r\n104.531 0.00219931\r\n111.109 0.00630626\r\n127.188 0.00397168\r\n119.253 0.0159141\r\n128.872 0.00586774\r\n115.546 0.00148061\r\n173.86 0.00396198\r\n1008.55 0.0228803\r\n566.09 0.00685793\r\n489.748 0.0593571\r\n587.982 0.0499316\r\n713.801 0.0266339\r\n463.823 0.00694483\r\n478.968 0.017805\r\n440.45 0.0214574\r\n425.672 0.0378581\r\n393.488 3.93156e-005\r\n381.027 0.0330278\r\n350.06 0.00263645\r\n456.802 0.00902147\r\n291.437 0.00515393\r\n304.901 0.0433796\r\n283.295 0.0187626\r\n261.975 0.00124352\r\n237.208 0.00584576\r\n280.29 0.00552992\r\n211.96 0.00478211\r\n201.928 0.0552732\r\n207.21 0.00180589\r\n250.372 0.0148694\r\n187.946 0.0102306\r\n208.846 0.00535934\r\n201.399 0.0619733\r\n146.7 0.00168686\r\n185.642 0.0208407\r\n184.889 0.00935121\r\n146.629 0.0061832\r\n199.762 0.00136871\r\n135.737 0.00512267\r\n174.473 0.00600411\r\n127.506 0.000596656\r\n138.887 0.0100902\r\n150.959 0.00342919\r\n207.423 0.000148148\r\n146.959 0.0155037\r\n166.485 0.0155682\r\n148.656 0.0177903\r\n132.081 0.000770203\r\n157.767 0.00845496\r\n134.235 3.96312e-005\r\n117.365 0.0181811\r\n122.254 0.00809325\r\n110.405 0.00312016\r\n129.319 0.0148854\r\n94.3056 0.00189511\r\n106.308 0.00656066\r\n134.341 0.0137053\r\n106.495 0.000804444\r\n102.054 0.00749285\r\n121.255 0.00967762\r\n96.639 0.0126037\r\n106.557 0.00483241\r\n108.597 0.0131693\r\n115.82 0.00445865\r\n117.207 0.00924788\r\n127.039 0.000674664\r\n106.063 0.00278426\r\n125.931 0.00449188\r\n96.053 0.00568378\r\n109.513 0.0023881\r\n123.596 0.0176456\r\n1238.49 0.00907884\r\n443.721 0.0176792\r\n652.332 0.017968\r\n609.63 0.0147151\r\n544.094 0.014587\r\n653.641 0.0144798\r\n469.722 0.0322128\r\n524.541 0.0161012\r\n467.596 0.000949793\r\n511.94 0.0145676\r\n356.909 0.040166\r\n494.8 0.101005\r\n329.077 0.0106811\r\n317.218 0.00673915\r\n391.687 0.0439205\r\n305.05 0.028742\r\n240.537 0.0086313\r\n256.901 0.0201528\r\n279.343 0.00715716\r\n180.662 0.00133842\r\n207.243 0.0142213\r\n231.452 0.0146105\r\n244.248 0.0273988\r\n204.675 0.0027048\r\n211.446 0.00469111\r\n166.005 0.00237549\r\n161.863 0.000736126\r\n155.617 0.00811905\r\n152.47 0.00443941\r\n148.625 0.0115551\r\n161.273 0.00713452\r\n162.138 0.000174987\r\n146.33 0.00611745\r\n129.198 0.00960017\r\n173.838 0.00336605\r\n126.771 0.00257472\r\n155.978 0.00779412\r\n119.508 0.00352808\r\n127.597 0.00739295\r\n139.073 0.0199697\r\n129.48 0.00682632\r\n105.322 0.00600193\r\n144.77 0.00118402\r\n128.234 8.97772e-005\r\n134.934 0.00350968\r\n123.883 0.00331332\r\n119.299 0.0179835\r\n116.294 0.00213259\r\n113.995 0.00760361\r\n157.598 0.000154505\r\n99.3105 0.00476536\r\n119.632 0.0069528\r\n106.196 0.00247571\r\n117.579 0.00623694\r\n98.0791 0.00503906\r\n102.469 0.00706931\r\n104.658 0.0012483\r\n138.96 0.0121671\r\n98.7993 0.00135792\r\n119.427 0.00638463\r\n119.511 0.000857567\r\n97.8474 0.0115668\r\n141.214 0.00147539\r\n141.591 0.00867109\r\n875 0\r\n599.086 0.0538732\r\n578.928 0.0533717\r\n523.435 0.016004\r\n689.289 0.00494032\r\n570.453 0.00292161\r\n583.236 0.0101146\r\n459.944 0.000141076\r\n526.796 0.0192391\r\n424.843 0.0177141\r\n337.575 0.0163068\r\n358.718 0.01053\r\n387.566 0.000118282\r\n327.105 0.0206806\r\n330.905 0.00621567\r\n304.287 0.00363444\r\n263.351 0.0194657\r\n203.932 0.00464471\r\n215.902 0.00207118\r\n213.804 0.00399606\r\n201.412 0.0386688\r\n193.083 0.0107687\r\n190.299 0.000237611\r\n198.69 0.0227808\r\n188.317 0.00520443\r\n161.646 0.00265116\r\n192.184 0.00887835\r\n161.291 0.0038514\r\n173.359 0.0128103\r\n141.193 0.00302017\r\n162.555 0.00057218\r\n142.325 0.000375954\r\n171.289 0.0105225\r\n158.269 0.000628239\r\n136.293 0.00635332\r\n140.007 0.00994886\r\n136.3 0.00385531\r\n127.28 0.00810692\r\n146.836 0.00199289\r\n125.69 0.0147223\r\n123.738 0.0103506\r\n130.056 0.0172377\r\n161.209 0.00235625\r\n106.786 0.00340525\r\n133.129 0.00489359\r\n120.164 0.00420028\r\n130.973 0.00954256\r\n122.365 0.00892346\r\n108.607 0.000165051\r\n122.051 0.00796021\r\n99.9403 0.0013606\r\n100.43 0.00428584\r\n159.617 0.00219385\r\n103.697 0.0115418\r\n121.089 0.0156305\r\n108.389 0.000308342\r\n101.112 0.00235036\r\n121.013 0.0116154\r\n101.596 0.00489378\r\n121.764 0.00803822\r\n106.144 0.00401705\r\n115.504 0.00239409\r\n104.46 0.00668959\r\n203 0\r\n759 0\r\n340.562 0.000968435\r\n882.071 0.000178137\r\n852.935 0.0260854\r\n377.021 0.003885\r\n444.905 0.0250121\r\n581.494 0.0347632\r\n367.24 0.0020503\r\n436.132 0.00592369\r\n468.371 0.00582264\r\n386.537 0.0156742\r\n460.655 0.0219863\r\n458.354 0.00504487\r\n280.791 0.0255752\r\n302.886 0.0208854\r\n302.421 0.0294373\r\n278.551 0.0416306\r\n229.417 0.00448139\r\n254.446 0.00145663\r\n197.626 0.0462073\r\n218.634 0.00457706\r\n183.731 0.00273921\r\n201.988 0.000879789\r\n223.14 0.00431188\r\n228.195 0.0119339\r\n188.858 0.025438\r\n214.329 0.015643\r\n169.451 0.0126141\r\n154.313 0.00782301\r\n155.053 0.0042446\r\n148.875 0.000541952\r\n140 0\r\n243 0\r\n147.08 0.015246\r\n172.799 0.00605903\r\n163.029 0.00576552\r\n144.31 0.00134171\r\n144.825 0.0287245\r\n119.96 0.0203692\r\n134.602 0.00361466\r\n121.062 0.000616213\r\n154.283 0.0174683\r\n119.836 0.000731562\r\n136.593 0.0109353\r\n123.093 0.0250822\r\n120.876 0.00466986\r\n132.181 0.00557879\r\n116.317 0.00862197\r\n119.317 0.0208153\r\n105.564 0.00064713\r\n107.607 0.00172063\r\n112.032 0.00133928\r\n142.466 0.00225366\r\n103.917 0.00275044\r\n104.155 0.0103274\r\n114.463 0.0387851\r\n125.62 0.00521979\r\n129.906 0.00150192\r\n121.098 0.00641905\r\n142.15 0.004694\r\n107.773 0.000736196\r\n131.414 0.00489236\r\n76.3441 0.00236743\r\n153 0\r\n976.148 0.0981966\r\n663.019 0.0105783\r\n577.291 0.0185994\r\n515.413 0.00533568\r\n483.057 0.013017\r\n613.729 0.0467658\r\n443.348 0.0163955\r\n423.954 0.029746\r\n377.004 0.00931034\r\n368.905 0.000549566\r\n482.485 0.00591085\r\n372.563 0.00657997\r\n488.41 0.0623834\r\n399.497 0.000537586\r\n265.802 0.000555982\r\n298.269 0.000237643\r\n329.293 0.000432599\r\n208.854 0.0120889\r\n268.817 0.00949958\r\n226.007 0.0571951\r\n255.088 0.0042215\r\n204.191 0.0188008\r\n225.76 0.00896469\r\n195.776 0.00140031\r\n236.759 0.0214661\r\n189.797 0.0197691\r\n170.957 0.000356235\r\n168.855 0.0401985\r\n202.496 0.0188758\r\n167.505 0.00778758\r\n183.757 0.00815582\r\n148.247 0.0104161\r\n147.528 0.00862514\r\n134.114 0.0186815\r\n147.085 0.0194045\r\n150.632 0.00845976\r\n146.852 0.00523626\r\n142.692 0.00479422\r\n129.124 0.000201585\r\n130.635 0.00926432\r\n138.708 0.00985063\r\n133.802 0.0639846\r\n137.859 0.0133485\r\n116.463 0.0086961\r\n134.498 0.00297873\r\n119.207 0.0129432\r\n137.578 0.0392338\r\n114.658 0.000637289\r\n120.769 0.00551053\r\n121.979 0.00432098\r\n114.375 0.00289002\r\n121.015 0.0105711\r\n106.282 0.00623895\r\n105.894 0.00623222\r\n127.531 0.00113629\r\n106.169 0.00216151\r\n112.355 0.00331675\r\n93.137 0.00441358\r\n104.413 0.00123657\r\n106.868 0.00551575\r\n123.312 0.00830867\r\n112.375 0.00733834\r\n119.689 0.00188503\r\n152.291 0.0162784\r\n1173.31 0.0168817\r\n711.242 0.00257427\r\n565.385 0.0463364\r\n595.397 0.0163591\r\n528.998 0.000900619\r\n509.209 0.00300694\r\n486.985 0.0398858\r\n525.763 0.0285888\r\n407.908 0.0332167\r\n558.968 0.000700352\r\n385.257 0.0455257\r\n490.403 0.0128102\r\n314.734 0.0252359\r\n301.889 0.00190826\r\n319.401 0.0260629\r\n259.797 0.00293131\r\n325.716 0.000128376\r\n261.237 0.0313169\r\n251.935 0.00964214\r\n208.586 0.000977824\r\n204.657 0.0129736\r\n210.514 0.0117754\r\n182.737 0.0129768\r\n189.427 0.00685209\r\n214.739 0.00100438\r\n209.832 0.00284764\r\n183.688 0.0151992\r\n212.186 0.00848975\r\n174.016 0.0103212\r\n191.615 0.00775973\r\n208.827 0.00377012\r\n162.267 0.0168826\r\n166.864 0.0191259\r\n155.235 0.00219717\r\n147.669 0.00762607\r\n166.638 0.00785959\r\n142.339 0.0060814\r\n145.563 0.00537167\r\n138.486 0.00670306\r\n104.636 0.00132791\r\n122.987 0.0059131\r\n108.076 0.00254391\r\n117.104 0.0104347\r\n109.362 0.00806673\r\n127.344 0.00674539\r\n135.876 0.000975695\r\n152.933 0.00160417\r\n114.036 0.0182854\r\n119.38 0.00137842\r\n107.831 0.00271245\r\n124.474 0.0053405\r\n101.074 0.027771\r\n127.666 0.00215082\r\n109.909 0.000527546\r\n122.215 0.0133729\r\n120.912 0.00150827\r\n120.219 0.000328686\r\n118.329 0.00180314\r\n105.215 0.00601071\r\n107.196 0.0162607\r\n116.63 0.0107509\r\n104.624 0.00706635\r\n124.313 0.00647324\r\n194.474 0.0117816\r\n1089.74 0.0603949\r\n609.267 0.0145547\r\n402.071 0.0191393\r\n503.433 0.0159139\r\n626.833 0.0301419\r\n454.747 0.00496946\r\n521.412 0.0113498\r\n562.881 0.00262871\r\n456.307 0.0275888\r\n405.462 0.00945944\r\n400.827 0.0492188\r\n368.714 0.0044\r\n531.119 0.0112807\r\n343.203 0.00993895\r\n356.424 0.0120394\r\n312.056 0.0076324\r\n303.819 0.00255604\r\n255.405 0.0327836\r\n233.088 0.00269513\r\n280.443 0.00220713\r\n246.583 0.0136167\r\n225.923 0.00633022\r\n276.328 0.00335113\r\n199.943 0.00311742\r\n189.787 0.00278982\r\n214.838 0.0106879\r\n184.413 0.00850102\r\n160.684 0.0111814\r\n243.126 0.00185325\r\n198.205 0.0333913\r\n148.129 0.00411992\r\n179.03 0.0212196\r\n144.277 0.00320244\r\n170.292 0.00459061\r\n162.774 0.0081666\r\n137.62 0.00401004\r\n152.245 0.0139794\r\n151.324 0.003942\r\n131.989 0.00667243\r\n157.041 0.00961776\r\n134.205 0.0119386\r\n112.936 0.00253336\r\n105.195 0.00269928\r\n122.32 0.000123454\r\n122.565 0.00387294\r\n120.622 0.0178327\r\n112.956 0.0138534\r\n121.181 0.00334422\r\n91.2479 0.00138319\r\n104.309 0.00247018\r\n99.3314 0.011601\r\n111.966 0.00298002\r\n124.628 0.00467668\r\n125.085 0.00445313\r\n140.927 0.000990506\r\n108.626 0.00935203\r\n124.118 0.00403399\r\n135.456 0.0047251\r\n117.952 0.000259875\r\n110.759 0.00475226\r\n108.836 0.00602148\r\n121.04 0.00346649\r\n116.487 0.000660232\r\n170.618 0.000605811\r\n1326.69 0.0101613\r\n637.372 0.0165984\r\n772.524 0.0110857\r\n579.204 0.0175381\r\n521.895 0.000774941\r\n416.224 0.0138284\r\n426.69 0.055744\r\n378.05 0.00741979\r\n426.42 0.020327\r\n374.758 0.0402489\r\n386.305 0.00468173\r\n334.939 0.00596153\r\n335.862 0.00375418\r\n338.373 0.0198149\r\n368.211 0.00731261\r\n395.439 0.0060118\r\n246.986 0.0115602\r\n230.203 0.00459008\r\n338.09 0.00283554\r\n189.117 0.00211993\r\n220.578 0.0116886\r\n212.31 0.0015796\r\n188.806 0.00429613\r\n201.395 0.0227903\r\n215.102 0.0020226\r\n162.787 0.00645935\r\n236.201 0.00264974\r\n163.382 0.00520556\r\n190.01 0.00383363\r\n173.25 0.00320257\r\n167.421 0.00725358\r\n161.135 0.00637452\r\n148.39 0.0184041\r\n173.143 0.00431139\r\n158.283 0.00950994\r\n145.302 0.00802508\r\n138.625 0.00421125\r\n133.387 0.00431531\r\n139.785 0.0142654\r\n120.322 0.00504165\r\n129.932 0.0014949\r\n129.93 0.00660195\r\n133.424 0.0157176\r\n115.713 0.0276976\r\n95.6526 0.00367221\r\n122.333 0.0357786\r\n111.501 0.000863249\r\n104.182 0.0035811\r\n126.65 0.00592369\r\n107.91 0.000917214\r\n131.337 0.00267057\r\n124.826 0.0194377\r\n126.036 0.00434837\r\n117.824 0.00157004\r\n115.136 0.00257237\r\n93.3136 0.0261081\r\n124.228 0.00232593\r\n110.196 0.000413858\r\n105.008 0.0103239\r\n124.005 0.00608178\r\n112.018 0.00126862\r\n132.184 0.00247456\r\n97.3983 0.00778191\r\n122.081 0.00105131\r\n1212.11 0.00661043\r\n638.543 0.00506047\r\n592.553 0.0028985\r\n545.312 0.00570369\r\n838.25 0.00111056\r\n467.107 0.0129616\r\n490.037 0.00354699\r\n466.787 0.0230223\r\n429.983 0.0010544\r\n494.361 0.00286815\r\n386.178 0.0348192\r\n362.625 0.0162214\r\n454.988 0.0360411\r\n326.424 0.00568112\r\n306.508 0.00380242\r\n334.601 0.0318525\r\n292.726 0.00686213\r\n239.313 0.0183726\r\n214.9 0.0148556\r\n208.862 0.0401285\r\n242.369 0.00565665\r\n217.549 0.0598143\r\n221.432 0.0110944\r\n279.024 0.00172932\r\n216.339 0.00670881\r\n175.766 0.0255753\r\n226.419 0.0736443\r\n225.006 0.000838004\r\n169.649 0.00636476\r\n188.159 0.0103662\r\n154.582 0.00225299\r\n178.399 0.0384591\r\n170.615 0.0154915\r\n141.554 0.0234129\r\n168.692 0.023512\r\n169.774 0.00990499\r\n145.737 0.000960126\r\n142.991 0.00219329\r\n146.689 0.0138364\r\n140.027 0.000282685\r\n135.019 0.00216162\r\n152.304 0.000221003\r\n162.176 0.000852544\r\n188.513 1.29902e-005\r\n129.865 0.00031426\r\n110.301 0.00237049\r\n128.159 0.00216649\r\n122.547 0.0108977\r\n116.631 0.00458464\r\n119.39 0.000431352\r\n131.434 0.0152396\r\n108.914 0.00404827\r\n117.974 0.00672069\r\n108.725 0.0172253\r\n134.182 0.00208031\r\n111.765 0.00290083\r\n103.721 0.00733698\r\n114.327 0.00759256\r\n133.874 0.00954667\r\n108.465 0.00459668\r\n120.655 0.000389445\r\n130.242 0.020099\r\n111.006 0.0020818\r\n135.557 0.00213493\r\n1066.24 0.0524833\r\n928.721 0.0243587\r\n642.592 0.00629818\r\n528.448 0.00785796\r\n875.833 0.0193482\r\n458.73 0.0129853\r\n493.573 0.0579886\r\n477.639 0.0373962\r\n449.54 0.019259\r\n404.047 0.0207152\r\n486.449 0.00393879\r\n390.16 0.00145505\r\n361.198 0.00651043\r\n259.78 0.0156283\r\n382.298 0.00632179\r\n313.565 0.00772409\r\n310.837 0.0126302\r\n244.425 0.0105445\r\n322.888 0.00155293\r\n242.128 0.000585684\r\n228.831 0.0335479\r\n231.164 0.0001803\r\n256.831 0.000806243\r\n172.612 0.0149631\r\n209.97 0.00802384\r\n183.782 0.0410918\r\n179.432 0.0188513\r\n198.431 0.0046875\r\n195.529 0.0192038\r\n167.671 0.0121677\r\n198.457 0.00599272\r\n167.89 0.00225768\r\n169.106 0.0035791\r\n152.442 0.00170987\r\n158.935 0.0056018\r\n159.378 0.0149189\r\n154.484 0.0156825\r\n145.84 0.00862716\r\n139.182 0.00300337\r\n147.12 0.00664225\r\n125.224 0.000685921\r\n120.651 0.0130612\r\n128.56 0.00757727\r\n137.93 0.000148427\r\n119.614 0.00719603\r\n120.345 0.0145092\r\n132.958 0.00357004\r\n136.503 0.019101\r\n124.223 0.00708428\r\n147.164 0.0143728\r\n145.466 0.00108176\r\n119.679 0.0121361\r\n131.089 0.0336323\r\n137.894 0.0186189\r\n165.412 0.0184481\r\n123.101 0.010692\r\n120.188 0.0143802\r\n108.15 0.00084846\r\n114.673 0.00647576\r\n137.278 0.00622927\r\n113.461 0.0166795\r\n114.646 0.00254918\r\n114.121 0.00433974\r\n122.662 0.0147487\r\n922.901 0.0132717\r\n570.911 0.00303682\r\n555.717 0.00520172\r\n763.06 0.0555761\r\n625.161 0.093177\r\n556.933 0.00371674\r\n597.244 0.0375603\r\n405.535 0.00503039\r\n432.328 0.0201067\r\n475.583 0.0336799\r\n386.426 0.00873269\r\n392.532 0.00483661\r\n360.883 0.0362014\r\n445.436 0.0107499\r\n298.071 0.0120674\r\n358.212 0.0136216\r\n253.332 0.0140989\r\n305.421 0.017503\r\n345.071 0.00982445\r\n230.817 0.00563213\r\n242.892 6.97386e-007\r\n273.158 0.0288895\r\n290.773 0.000140937\r\n285.927 0.0172472\r\n233.057 0.0129204\r\n236.312 0.00384307\r\n204.867 0.0119383\r\n194.687 0.00793425\r\n242.305 0.0121006\r\n190.024 0.000859775\r\n191.17 0.0284801\r\n183.005 0.00138195\r\n177.403 0.00420893\r\n187.642 0.00880828\r\n147.507 0.0100524\r\n150.736 0.0250813\r\n143.481 0.0024494\r\n161.452 0.00216581\r\n136.957 0.00237527\r\n120.193 0.00845611\r\n149.832 0.00251386\r\n136.014 0.0117019\r\n137.559 0.00630103\r\n115.411 0.00397417\r\n144.465 0.0181091\r\n114.582 0.00534313\r\n141.85 0.00709783\r\n137.403 0.0104502\r\n122.252 0.00497537\r\n134.613 0.0218776\r\n134.803 1.93082e-005\r\n139.469 0.0323633\r\n125.636 0.00258688\r\n120.377 0.00151119\r\n138.838 0.00223433\r\n123.881 0.00163216\r\n132.713 0.0116501\r\n115.869 0.00303427\r\n123.377 0.0085867\r\n127.814 0.0132978\r\n120.602 3.58391e-006\r\n131.034 0.00384994\r\n124.768 0.000116333\r\n151.765 0.000983263\r\n656.719 0.0491902\r\n578.484 0.0323763\r\n735.737 0.00848941\r\n719.871 0.0524859\r\n511.099 0.0579063\r\n609.434 0.0102038\r\n775.434 0.00412823\r\n692.173 0.0224701\r\n416.307 0.00639298\r\n389.059 0.0176986\r\n422.624 0.00368345\r\n382.007 0.000397929\r\n362.446 0.0315139\r\n350.249 0.0116087\r\n397.534 0.0468838\r\n320.815 0.0208153\r\n335.572 7.10543e-015\r\n227.857 0.0200912\r\n261.334 0.0101156\r\n220.715 0.0349937\r\n234.706 0.0281084\r\n219.861 0.0586923\r\n289.324 0.00141336\r\n287.601 0.00177012\r\n199.06 0.00218057\r\n284.877 0.00292644\r\n178.129 9.7545e-005\r\n204.274 0.000508614\r\n207.131 0.000759365\r\n199.265 0.00878881\r\n215.834 0.0179541\r\n167.584 0\r\n207.936 0.0208153\r\n162.619 0.0275271\r\n183.779 0.000797445\r\n167.333 0.0321693\r\n161.689 0.00585502\r\n181.628 0.00243578\r\n131.123 0.00500257\r\n135.486 0.00650244\r\n206.641 0.00625995\r\n180.379 0.00389726\r\n145.315 0.00918232\r\n160.237 0.000416888\r\n153.044 0.0319833\r\n135.997 0.0227123\r\n170.352 0.0163112\r\n118.806 3.55271e-015\r\n156.676 3.55271e-015\r\n135.725 0.00941986\r\n109.307 0.000389811\r\n115.039 0.0109405\r\n127.461 0.00497614\r\n124.421 0.00184776\r\n123.711 0.00685168\r\n131.175 0.00710296\r\n125.296 0.00118161\r\n132.579 0.000974044\r\n126.102 0.0123557\r\n118.794 0.00224941\r\n135.958 0.00163213\r\n121.338 0.0009847\r\n103.497 0.00357133\r\n123.136 0.00361466\r\n735.168 0.016412\r\n803.371 0.0217359\r\n675.722 0.0229033\r\n704.993 0.0093776\r\n868.88 0.102541\r\n558.329 0.0523825\r\n502.105 0.0155605\r\n464.657 0.0597763\r\n472.636 0.0411025\r\n468.41 0.0140658\r\n498.871 0.0294783\r\n346.145 0.0187048\r\n408.129 0.023565\r\n403.608 0.00463149\r\n400.413 0.00668392\r\n325.314 0.0021803\r\n273.875 0.00810348\r\n262.083 0.00454918\r\n264.128 0.0549676\r\n268.598 0.0238376\r\n228.191 0.00407752\r\n262.619 0.00640593\r\n239.536 0.00826852\r\n235.481 0.00502444\r\n188.971 0.00558101\r\n212.929 0.0145678\r\n193.072 0.00547465\r\n165.961 0.00185238\r\n218.794 0.0047289\r\n217.771 0.00665162\r\n193.701 0.00560365\r\n186.194 0.0108921\r\n194.538 0.00165183\r\n199.414 0.00261899\r\n175.81 0.017702\r\n148.035 0.00551133\r\n160.697 0.00603521\r\n144.619 0.0113248\r\n157.011 0.00367955\r\n139.449 0.00290088\r\n142.863 0.00822513\r\n171.086 0.0172806\r\n180.003 0.00491629\r\n152.722 0.0120543\r\n140.51 0.00442837\r\n144.591 0.00077476\r\n157.673 3.7434e-005\r\n123.136 0.00449596\r\n155.435 0.0285613\r\n132.822 0.0118038\r\n174.291 0.00724025\r\n136.582 0.00551987\r\n148.242 0.0195628\r\n124.686 0.00160438\r\n122.585 0.00016455\r\n112.431 0.0107176\r\n116.283 0.00811008\r\n103.969 0.00498327\r\n116.263 0.000240166\r\n122.203 0.00162268\r\n131.259 0.000811325\r\n120.294 0.0162943\r\n126.407 0.00260216\r\n134.615 0.00664028\r\n629.387 0.0674516\r\n943.335 0.00606174\r\n930.724 0.0111521\r\n631.738 0.0136677\r\n726.63 0.168959\r\n528.002 0.0154341\r\n535.179 0.0156788\r\n489.3 0.0162939\r\n454.973 0.022314\r\n459.558 0.00244004\r\n435.506 0.00225963\r\n478.465 0.00972495\r\n409.852 0.00963737\r\n378.789 0.130422\r\n443.064 0.0096681\r\n305.607 0.0145541\r\n261.434 0.00536134\r\n258.842 0.013301\r\n308.49 0.00324355\r\n287.768 0.00800692\r\n255.871 0.00465426\r\n292.559 0.0143506\r\n222.493 0.00601462\r\n235.496 0.0181365\r\n258.768 0.0287549\r\n210.472 0.0113303\r\n304.63 0.000750188\r\n248.528 0.00579771\r\n231.099 0.00905754\r\n198.068 0.012693\r\n206.623 0.0105327\r\n187.977 0.0622481\r\n201.084 0.0192646\r\n187.434 0.00380666\r\n163.718 0.00822396\r\n180.34 0.0152228\r\n187.491 0.0182976\r\n180.899 0.00575862\r\n189.551 0.00829056\r\n149.006 0.0445844\r\n160.001 0.0194099\r\n136.245 0.00502196\r\n182.086 0.0154623\r\n156.719 0.0100332\r\n147.607 1.00254e-005\r\n147.223 0.00991049\r\n138.138 0.00779698\r\n156.509 0.00674351\r\n156.07 0.0119169\r\n141.152 0.000238196\r\n168.649 0.0205768\r\n124.59 0.0143079\r\n140.029 0.00273578\r\n147.758 0.0146551\r\n155.324 0.00454583\r\n116.232 0.0142494\r\n125.53 0.00143201\r\n122.441 0.0115078\r\n131.547 0.00749952\r\n114.411 0.00650873\r\n117.017 0.00685503\r\n127.184 0.00483775\r\n108.427 0.0156095\r\n131.44 0.0132859\r\n806.342 0.0593448\r\n853.014 0.057213\r\n612.871 0.00432342\r\n672.272 0.031159\r\n603.189 0.0336007\r\n648.036 0.0431911\r\n514.297 0.0330982\r\n508.137 0.0502348\r\n472.72 0.0625474\r\n415.774 0.0493429\r\n490.956 0.0239349\r\n546.36 0.0410123\r\n459.453 0.00432562\r\n321.361 0.02295\r\n390.055 0.00289824\r\n356.603 0.0795328\r\n383.637 0.0321483\r\n339.046 0.000229717\r\n291.27 0.00555932\r\n383.299 0.0300611\r\n285.844 0.0417654\r\n252.305 0.00564159\r\n298.825 0.00992275\r\n238.549 0.004571\r\n318.651 0.00811808\r\n266.309 0.00884501\r\n246.883 0.00718962\r\n299.602 0.00935811\r\n306.735 0.00538913\r\n209.974 0.0200007\r\n204.808 0.0173393\r\n193.309 0.0188994\r\n202.556 0.0539397\r\n210.758 0.0103217\r\n190.296 0.000799438\r\n193.804 0.0114176\r\n166.859 0.00601499\r\n214.055 0.00229846\r\n176.385 0.00846181\r\n157.364 0.0175851\r\n192.94 0.0332792\r\n182.275 0.00785169\r\n176.886 0.00188521\r\n157.466 0.00419523\r\n156.122 0.00190724\r\n159.451 0.00424834\r\n142.557 0.00582189\r\n134.076 0.0192767\r\n147.244 0.0274208\r\n165.963 0.00205444\r\n160.418 0.0170289\r\n132.363 0.00192443\r\n140.351 0.00136711\r\n132.823 0.00301524\r\n124.814 0.00380692\r\n176.738 0.00399641\r\n144.727 0.0224675\r\n122.371 0.00205844\r\n131.296 0.00288973\r\n120.211 0.00199211\r\n133.357 0.00495252\r\n131.34 0.000627569\r\n176.574 0.00113154\r\n103.084 0.00842349\r\n807.169 0.0211939\r\n489.389 0.0293143\r\n937.405 0.0185618\r\n495.983 0.08049\r\n561.134 0.00804027\r\n480.45 0.0091956\r\n618.254 0.0190648\r\n481.676 0.0432736\r\n558.869 0.00704095\r\n399.353 0.00239799\r\n476.269 0.00621079\r\n421.813 0.0469319\r\n450.781 0.00460798\r\n342.3 0.0411393\r\n391.818 0.0149326\r\n327.983 0.00340296\r\n376.029 0.0360968\r\n391.592 0.0270098\r\n357.121 0.00774852\r\n296.4 0.0192953\r\n369.405 0.0178755\r\n257.576 0.0568202\r\n364.326 0.00583356\r\n251.083 0.00519802\r\n390.314 0.0104357\r\n390.348 0.00346889\r\n225.472 0.00384976\r\n332.805 0.0338088\r\n233.726 0.00422692\r\n213.646 0.00449288\r\n247.751 0.0074967\r\n253.275 0.00570243\r\n182.318 0.00204086\r\n219.456 0.0135081\r\n173.946 0.000390914\r\n180.648 0.0188577\r\n165.878 0.0313991\r\n187.133 0.00402316\r\n175.948 0.0117721\r\n207.168 0.0125245\r\n211.626 0.00808084\r\n213.061 0.000506996\r\n214.578 0.00396799\r\n163.788 0.000919518\r\n212.781 0.00307602\r\n169.551 0.0033677\r\n170.773 0.00269807\r\n166.93 0.0143887\r\n157.281 0.00254762\r\n154.969 0.00692432\r\n130.774 0.0325645\r\n125.997 0.0139396\r\n159.358 0.000802562\r\n135.548 0.0116732\r\n163.163 0.00466186\r\n140.256 0.0167985\r\n145.636 0.0164537\r\n125.496 0.00163074\r\n118.71 0.000855854\r\n122.817 0.00864739\r\n137.888 0.000928627\r\n134.42 0.0106451\r\n140.651 0.0106894\r\n124.45 0.00605673\r\n784.189 0.021423\r\n747.003 0.045389\r\n662.46 0.0034779\r\n570.392 0.00691781\r\n678.013 0.019274\r\n501.04 0.0241573\r\n480.773 0.0140726\r\n603.054 0.0154979\r\n491.494 0.0358753\r\n508.535 0.00217512\r\n473.034 0.0349217\r\n392.57 0.038735\r\n453.876 0.0340198\r\n457.977 0.022043\r\n474.909 0.00403553\r\n365.895 0.00807861\r\n347.126 0.0216427\r\n356.017 0.0193726\r\n297.365 0.0163081\r\n347.543 0.014119\r\n375.817 0.00204431\r\n424.713 0.0498696\r\n323.103 0.010421\r\n220.67 0.00735029\r\n287.897 0.00981292\r\n237.286 0.00637611\r\n234.066 0.00201961\r\n229.326 0.00751741\r\n255.231 0.0100729\r\n228.682 0.00600635\r\n239.438 0.0299401\r\n201.848 0.00213102\r\n207.065 0.00652156\r\n236.133 0.00240585\r\n238.391 0.00874369\r\n234.621 0.0131499\r\n255.608 0.00218431\r\n204.658 0.0231428\r\n196.834 0.00361215\r\n218.559 0.00117636\r\n182.554 0.00516486\r\n190.672 0.00876955\r\n171.28 0.0294708\r\n204.976 0.016242\r\n218.315 0.0103179\r\n181.113 0.00454428\r\n179.371 0.00615342\r\n185.997 0.00767791\r\n195.566 0.006881\r\n157.285 0.0137433\r\n166.603 0.00502438\r\n182.14 0.00840036\r\n143.138 0.00686293\r\n159.511 0.0314978\r\n175.306 0.014991\r\n131.405 0.0045912\r\n152.661 0.0044894\r\n139.267 0.00011637\r\n147.683 0.0110863\r\n131.541 0.00799131\r\n136.516 0.00587065\r\n143.833 0.0128779\r\n120.849 0.0185017\r\n115.688 0.0126401\r\n1024 0.00758619\r\n884.77 0.0963309\r\n786.872 0.00282619\r\n711.369 0.0113794\r\n904.226 0.00280081\r\n478.083 0.00303036\r\n524.198 0.0250352\r\n527.293 0.00125966\r\n669.847 0.00312748\r\n610.091 0.0185395\r\n564.478 0.00524395\r\n412.609 0.0143534\r\n557.649 0.0135107\r\n476.195 0.0374265\r\n464.676 0.0402846\r\n378.946 0.00547556\r\n347.731 0.0161573\r\n415.342 0.154972\r\n299.922 0.0115394\r\n358.977 0.00197542\r\n334.384 0.0167125\r\n379.457 0.0039726\r\n358.525 0.00857461\r\n295.575 0.0171225\r\n348.344 0.0124139\r\n237.594 0.00912114\r\n278.422 0.0375079\r\n255.316 0.0165004\r\n236.794 0.0283656\r\n244.051 0.0321267\r\n272.155 0.00916482\r\n235.214 0.00996319\r\n271.859 0.00210084\r\n255.041 0.00946277\r\n248.754 0.00131797\r\n251.857 0.000206006\r\n250.502 0.0315467\r\n207.183 0.00471455\r\n215.617 0.0158988\r\n197.644 0.00403054\r\n214.963 0.0154851\r\n198.571 0.00948358\r\n247.83 0.00521074\r\n180.985 0.0128948\r\n191.961 0.00672611\r\n174.747 0.0433238\r\n208.736 0.0162455\r\n185.622 0.00442639\r\n199.961 0.00154448\r\n155.042 0.00416844\r\n156.453 0.0130352\r\n171.61 0.0331165\r\n128.185 0.0278972\r\n146.826 0.000649337\r\n138.218 0.00131833\r\n144.508 0.00344509\r\n140.621 0.00657821\r\n140.198 0.0249743\r\n128.029 0.00846651\r\n139.148 0.00646352\r\n126.148 0.00274437\r\n129.102 0.00478215\r\n136.07 0.00789277\r\n122.352 0.0105713\r\n791.978 0.0466812\r\n889.258 0.0036446\r\n906.949 0.151615\r\n749.818 0.0599699\r\n841.457 0.0337433\r\n637.731 0.0302945\r\n947.861 0.039503\r\n532.514 0.0397703\r\n581.863 0.0520581\r\n436.374 0.0368026\r\n544.022 0.0458694\r\n495.519 0.0537496\r\n487.341 0.031408\r\n529.779 0.00583854\r\n396.381 0.0570397\r\n373.055 0.0208676\r\n303.406 0.0453537\r\n362.638 0.014822\r\n426.341 0.0553491\r\n340.802 0.00630762\r\n452.306 0.0216001\r\n322.01 0.0133413\r\n307.339 0.00856687\r\n293.671 0.00382421\r\n314.988 0.00469717\r\n361.623 0.0334\r\n268.011 0.0405365\r\n258.641 0.0113544\r\n260.558 0.00177451\r\n245.079 0.0293341\r\n359.145 0.00811494\r\n275.458 0.00626925\r\n264.764 0.0133587\r\n219.721 0.0131377\r\n236.84 0.011343\r\n261.127 0.00949395\r\n267.698 0.0147921\r\n253.456 0.0139539\r\n243.072 0.0144588\r\n236.514 0.00448604\r\n245.87 0.0150107\r\n254.617 0.00160432\r\n239.099 0.000807586\r\n200.79 0.000670071\r\n215.737 0.00477118\r\n215.892 0.0160166\r\n157.454 0.00783341\r\n156.227 0.0212591\r\n157.294 0.000444783\r\n201.4 0.00137196\r\n161.13 0.00164\r\n160.711 0.0212837\r\n198.399 0.00543829\r\n146.55 0.00120164\r\n167.855 0.00074625\r\n149.05 0.00250745\r\n160.806 0.0179669\r\n143.55 0.00402182\r\n181.104 0.0101086\r\n156.174 0.00188206\r\n151 0.00249984\r\n154.131 0.00433395\r\n166.399 0.0120605\r\n132.518 0\r\n766.922 0.0142853\r\n911.97 0.0379152\r\n691.52 0.0385442\r\n699.538 0.028081\r\n645.219 0.00820008\r\n746.805 0.0283335\r\n636.229 0.0090081\r\n502.48 0.0039974\r\n582.393 0.035123\r\n566.308 0.00592572\r\n534.886 0.083072\r\n432.916 0.0808881\r\n407.051 0.0838975\r\n622.476 0.0275248\r\n437.392 0.00686057\r\n419.032 0.0208153\r\n404.981 8.88178e-016\r\n426.489 0.0076092\r\n438.602 0.0248427\r\n382.598 0.056313\r\n344.4 0.0241061\r\n424.529 0.00456516\r\n333.567 0.013107\r\n295.443 0.0521372\r\n364.487 0.00612871\r\n281.072 0.00814817\r\n296.862 0.0158836\r\n314.433 0.0118431\r\n317.16 0.00605793\r\n266.425 0.00115167\r\n263.662 0.00788073\r\n342 0\r\n336 0\r\n284.609 0.0164378\r\n295.505 0.102583\r\n256.06 0.00881078\r\n283.678 0.00336754\r\n243.583 0.00169491\r\n253.076 0.00364583\r\n255.296 0.0136054\r\n229.576 0.00455769\r\n196.555 1.45957e-005\r\n232.442 0.00494955\r\n261.157 0.00562484\r\n232.607 0.0167414\r\n189.312 0.00413096\r\n179.15 0.0262382\r\n212.326 0.00862197\r\n175.406 0.00505063\r\n165.117 0.0042608\r\n165.039 0.00314693\r\n170.054 0.0299385\r\n184.893 0.00697644\r\n187.619 0.0154208\r\n182.998 0.00120345\r\n170.994 0.000506752\r\n173.611 0.0149742\r\n180.042 1.4829e-005\r\n188.943 0.00660354\r\n140.065 0.000645028\r\n132.821 0.00450689\r\n137.341 0.0143283\r\n132.377 0.00207087\r\n107.669 0\r\n634.789 0.0420082\r\n618.359 0.0574172\r\n684.751 0.0311527\r\n985.008 0.0506441\r\n695.617 0.00764941\r\n639.088 0.0086344\r\n710.701 0.0214625\r\n471.706 0.0466907\r\n528.638 0.0979733\r\n491.053 0.0106882\r\n515.887 0.00677199\r\n459.04 0.0936506\r\n530.116 0.0153905\r\n559.516 0.0062212\r\n417.792 0.000102521\r\n461.903 0.0958716\r\n495.754 0.00944041\r\n408.346 0.00177086\r\n474.91 0.0200292\r\n383.486 0.00762852\r\n384.103 0.0289767\r\n367.041 0.00414534\r\n327.686 0.0289584\r\n379.14 0.0139276\r\n333.747 0.00716368\r\n312.754 0.015457\r\n307.598 0.00900055\r\n366.76 0.0168566\r\n301.903 0.000171384\r\n314.158 0.0157215\r\n315.976 0.010696\r\n334.388 0.000722522\r\n339.61 0.00966768\r\n288.595 0.0016468\r\n362.504 0.0184209\r\n272.485 0.0066381\r\n284.498 0.0129526\r\n270.222 0.0260009\r\n239.309 0.00596908\r\n252.744 0.00307206\r\n250.722 0.0095339\r\n290.401 0.00207016\r\n215.784 0.00433743\r\n188.839 0.0163583\r\n196.952 0.0189767\r\n229.328 0.0104506\r\n200.335 0.00217561\r\n178.846 0.00431563\r\n250.905 0.00242797\r\n206.723 0.000637351\r\n144.945 0.00676583\r\n192.151 0.0126437\r\n175.651 0.0213515\r\n155.542 0.0076719\r\n161.469 0.00533394\r\n192.955 0.00510282\r\n169.619 0.00456819\r\n157.262 0.013675\r\n158.445 0.00176025\r\n166.457 0.000734306\r\n171.35 0.00536621\r\n159.182 0.0147934\r\n155.139 0.0176193\r\n119.398 0.000803083\r\n749.606 0.0192557\r\n880.146 0.156288\r\n1006.33 0.0210693\r\n1046.59 0.02138\r\n883.712 0.0180139\r\n590.866 0.138985\r\n545.143 0.00969328\r\n565.22 0.0396036\r\n508.718 0.10822\r\n674.443 0.282783\r\n444.3 0.0237333\r\n462.708 0.0189194\r\n442.076 0.0167774\r\n523.926 0.0303062\r\n563.111 0.0346331\r\n414.088 0.0208714\r\n498.162 0.061441\r\n476.286 0.0088024\r\n360.132 0.0235834\r\n381.901 0.0214665\r\n350.426 0.063547\r\n399.926 0.00262566\r\n344.846 0.0205255\r\n402.348 0.0203156\r\n421.704 0.0118821\r\n446.847 0.0086755\r\n336.789 0.0154965\r\n314.153 0.0289892\r\n346.232 0.0134524\r\n356.76 0.00568355\r\n339.389 0.0296997\r\n335.614 0.000838035\r\n387.433 0.0433776\r\n323.622 0.0234787\r\n367.942 0.034227\r\n367.873 0.0148022\r\n336.868 0.0311301\r\n271.769 0.0174258\r\n296.453 0.00198698\r\n239.053 0.00657368\r\n263.311 0.0134115\r\n229.635 0.00359817\r\n205.011 1.97428e-005\r\n199.266 0.00604834\r\n219.676 0.0621571\r\n246.345 0.00969205\r\n208.631 0.0145204\r\n179.129 0.000928628\r\n225.985 0.00787785\r\n258.557 0.000386162\r\n229.581 0.00158132\r\n196.855 0.014693\r\n158.558 0.00961701\r\n198.038 0.0102288\r\n197.02 0.00181283\r\n151.648 0.00602445\r\n191.836 0.000366663\r\n141.871 0.00798872\r\n149.768 0.00543501\r\n159.514 0.0189063\r\n182.934 0.000390875\r\n132.325 0.0141908\r\n199.004 0.0099233\r\n112.751 0.00720483\r\n701.407 0.0658818\r\n931.771 0.0272036\r\n1261.17 0.00970865\r\n786.442 0.0893475\r\n1011.37 0.112054\r\n729.979 0.0112179\r\n630.279 0.0224633\r\n638.374 0.0776908\r\n613.032 0.0317796\r\n497.237 0.0623157\r\n469.883 0.0634892\r\n531.745 0.0621033\r\n701.813 0.0367571\r\n488.327 0.0868857\r\n752.652 0.0406914\r\n406.718 0.0220239\r\n392.626 0.0152305\r\n457.397 0.00800545\r\n389.896 0.0494059\r\n336.135 0.0193317\r\n363.218 0.0313283\r\n386.148 0.00788477\r\n388.279 0.00709345\r\n348.319 0.0400386\r\n484.076 0.0132938\r\n400.374 0.00923204\r\n440.362 0.0102391\r\n368.103 0.0475282\r\n368.553 0.0733682\r\n292.714 0.0330714\r\n378.837 0.0359589\r\n383.05 0.0322115\r\n352.409 0.0155218\r\n274.321 0.00299948\r\n319.008 0.00965745\r\n263.225 0.000444285\r\n283.258 0.0672023\r\n358.42 0.0359482\r\n263.943 0.00514059\r\n233.782 0.00535327\r\n330.427 0.0243163\r\n249.757 0.0102032\r\n257.412 0.0157472\r\n224.696 0.00861131\r\n184.253 0.0068325\r\n218.057 0.00723537\r\n232.661 0.00897416\r\n219.339 0.0427747\r\n222.443 0.00855976\r\n161.773 0.0035739\r\n206.343 0.0029768\r\n188.132 0.0052401\r\n206.803 0.00733885\r\n198.429 0.0254563\r\n155.644 0.00905497\r\n194.587 0.00195764\r\n156.528 0.00701383\r\n192.313 0.00257518\r\n154.881 0.0132718\r\n158.315 0.00695326\r\n130.023 0.00351463\r\n192.772 0.00105897\r\n135.83 0.000941789\r\n113.779 0.0113248\r\n592.976 0.0187351\r\n966.15 0.0538876\r\n852.7 0.0495022\r\n1039.6 0.000509596\r\n848.415 0.000196181\r\n647.897 0.0324949\r\n569.308 0.0501262\r\n589.589 0.056536\r\n677.362 0.0908971\r\n568.874 0.114773\r\n685.786 0.00146605\r\n527.976 0.0576195\r\n668.091 0.0287313\r\n710.281 0.00932253\r\n695.094 0.0532956\r\n832.701 0.0577633\r\n489.674 0.0251897\r\n458.667 0.0231202\r\n585.857 0.043867\r\n412.901 0.00783615\r\n435.811 0.0270862\r\n392.341 0.00586431\r\n449.261 0.0937084\r\n471.29 0.0145218\r\n399.23 0.0079397\r\n346.594 0.013541\r\n403.031 0.00168522\r\n377.364 0.00833156\r\n375.736 0.0295829\r\n408.993 0.00806063\r\n409.18 0.00298113\r\n302.483 0.0344163\r\n333.857 0.0101497\r\n340.804 0.0113282\r\n324.615 0.0156975\r\n293.689 0.00563823\r\n296.07 0.00228635\r\n247.821 0.00847004\r\n274.742 0.00286179\r\n302.92 0.00904614\r\n265.095 0.00904104\r\n259.217 0.00334056\r\n248.316 0.00659612\r\n212.219 0.0134477\r\n245.268 0.0233598\r\n231.414 0.00755249\r\n207.554 0.00295104\r\n191.53 0.00752023\r\n171.718 0.00371647\r\n206.047 0.00884728\r\n185.995 0.00276707\r\n220.657 0.00939902\r\n167.333 0.00444911\r\n198.002 0.0072794\r\n188.249 0.00916341\r\n201.715 0.0173939\r\n169.648 0.000484786\r\n167.532 0.00182768\r\n158.553 0.00141708\r\n170.997 0.00334951\r\n156.035 0.00206724\r\n148.898 0.0231959\r\n200.147 0.00347184\r\n144.586 0.00413786\r\n711.959 0.000155679\r\n967.266 0.0950959\r\n819.435 0.0484261\r\n932.867 0.00805917\r\n967.251 0.0349879\r\n770.523 0.0902725\r\n792.635 0.0122818\r\n563.412 0.0483509\r\n620.115 0.0632731\r\n707.552 0.0594505\r\n517.278 0.0168444\r\n488.275 0.0438536\r\n659.862 0.0932406\r\n769.596 0.027945\r\n655.085 0.0478318\r\n805.614 0.126652\r\n827.323 0.0219762\r\n477.856 0.00131154\r\n543.184 0.00357907\r\n399.408 0.0454423\r\n566.187 0.0644547\r\n458.484 0.00801665\r\n440.668 0.0276616\r\n522.012 0.00680598\r\n447.372 0.0486676\r\n499.791 0.00333599\r\n385.439 0.0481573\r\n321.344 0.0589382\r\n400.264 0.00622656\r\n377.303 0.0211812\r\n354.98 0.000714722\r\n403.024 0.00662117\r\n334.364 0.0308412\r\n281.045 0.0103128\r\n325.7 0.00345393\r\n309.947 0.0103394\r\n324.992 0.0443416\r\n296.844 0.00062154\r\n322.959 0.0099659\r\n326.252 0.00802479\r\n343.469 0.00417829\r\n211.805 0.00322988\r\n272.115 0.000961663\r\n213.653 0.0363225\r\n229.482 0.0139083\r\n197.525 0.00249835\r\n229.503 0.0110894\r\n234.394 0.00126319\r\n259.616 0.0047587\r\n198.512 0.000269473\r\n230.339 0.0164547\r\n189.518 0.00710111\r\n187.056 0.00697185\r\n184.13 0.00153391\r\n176.151 0.00698242\r\n180.51 0.00145959\r\n157.621 0.00154249\r\n203.948 0.0161827\r\n169.988 0.00930151\r\n183.671 0.0179439\r\n181.764 0.0216166\r\n193.937 0.00410026\r\n173.874 8.59451e-005\r\n132.545 0.000480563\r\n866.144 0.0222552\r\n1011.35 0.0418748\r\n1387.06 0.0147543\r\n905.466 0.0117248\r\n783.586 0.0876522\r\n768.347 0.0375636\r\n674.882 0.0197716\r\n764.94 0.016189\r\n627.452 0.156323\r\n619.712 0.0499244\r\n665.573 0.0426628\r\n645.262 0.0360856\r\n618.985 0.0121644\r\n670.641 0.0300144\r\n575.432 0.0166408\r\n645.728 0.03836\r\n534.376 0.0412185\r\n526.476 0.00286092\r\n616.511 0.0437486\r\n523.524 0.027273\r\n516.96 0.0253331\r\n478.846 0.00123826\r\n480.341 0.00384421\r\n441.67 0.0307771\r\n440.765 0.0226537\r\n437.09 0.0125724\r\n375.927 0.0329648\r\n449.657 0.000751206\r\n387.194 0.00184001\r\n331.587 0.00977613\r\n406.303 0.00210215\r\n347.231 0.00902288\r\n359.243 0.0060241\r\n358.316 0.0237203\r\n319.867 0.0434237\r\n307.956 0.00280289\r\n295.752 0.00699317\r\n278.058 0.0189062\r\n303.448 0.00340057\r\n349.375 0.0025594\r\n361.375 0.0238709\r\n308.299 0.00313028\r\n304.273 0.00595338\r\n271.826 0.00714765\r\n299.284 0.010648\r\n239.963 0.00721343\r\n249.882 0.0039692\r\n273.392 0.0162713\r\n215.071 0.00209049\r\n190.382 0.00834547\r\n220.726 0.00643467\r\n180.416 0.000288151\r\n224.365 0.0128036\r\n181.851 0.00735586\r\n185.309 0.0146186\r\n176.465 0.0240687\r\n175.526 0.0088975\r\n174.874 0.0109501\r\n187.235 0.0279067\r\n176.225 0.00661828\r\n167.59 0.00265541\r\n181.542 0.000564813\r\n178.34 0.00158133\r\n104.591 0.00803287\r\n677.651 0.0108341\r\n1026.38 0.0616357\r\n1058.94 0.10722\r\n1099.68 0.0933835\r\n1009.15 0.112892\r\n608.383 0.0382769\r\n844.773 0.0410441\r\n696.227 0.00514578\r\n658.4 0.0125079\r\n650.665 0.0326857\r\n646.122 0.00287477\r\n691.983 0.0155852\r\n578.544 0.00800008\r\n536.314 0.0395194\r\n609.727 0.00899514\r\n605.447 0.00427317\r\n526.339 0.00575647\r\n749.711 0.114264\r\n439.759 0.00115988\r\n487.153 0.0518846\r\n485.408 0.071505\r\n537.676 0.00692681\r\n521.567 0.0726824\r\n480.813 0.0756482\r\n429.088 0.0176227\r\n501.741 0.0487144\r\n401.777 0.000654798\r\n362.145 0.0201289\r\n400.697 0.0935693\r\n421.353 0.0229787\r\n338.49 0.014596\r\n313.945 0.00285952\r\n378.749 0.00350925\r\n341.853 0.0122593\r\n337.752 0.00585516\r\n301.084 0.043526\r\n307.578 0.00322262\r\n309.668 0.0203201\r\n315.642 0.00445119\r\n331.896 0.0157691\r\n325 0.0151658\r\n261.156 0.00733509\r\n241.244 0.00126356\r\n262.255 0.00623686\r\n274.095 0.00409678\r\n259.941 0.00231349\r\n203.305 0.0042254\r\n243.059 0.00808375\r\n288.231 0.000465762\r\n202.298 0.0144339\r\n246.209 0.00367295\r\n202.656 0.00653943\r\n330.015 0.0204883\r\n157.76 0.0080881\r\n255.908 0.000127294\r\n157.41 0.000726926\r\n327.79 0.00118856\r\n171.254 0.00903797\r\n184.631 0.000685905\r\n188.28 0.0101549\r\n170.042 0.026485\r\n222.827 0.00662963\r\n182.186 0.00731475\r\n147.359 0.00951934\r\n802.217 0.012579\r\n728.701 0.0454012\r\n813.181 0.0233721\r\n850.712 0.0794516\r\n1072.39 0.010739\r\n570.401 0.0727747\r\n627.312 0.0164025\r\n648.658 0.0519599\r\n758.879 0.128718\r\n785.689 0.0223506\r\n556.738 0.0156018\r\n673.832 0.0490388\r\n667.51 0.0148532\r\n502.844 0.0445941\r\n568.955 0.0892124\r\n495.123 1.06581e-014\r\n484.425 1.42109e-014\r\n508.055 0.00864812\r\n573.498 0.170691\r\n520.22 0.0201816\r\n540.904 0.0165895\r\n448.849 0.0456084\r\n479.943 0.065222\r\n421.25 0.0128964\r\n498.584 0.0421522\r\n382.347 0.0111838\r\n367.108 0.0324684\r\n367.87 0.000422904\r\n355.584 0.0148226\r\n395.784 0.00114732\r\n355.875 0.0393753\r\n338.614 0\r\n406.706 0.0710678\r\n388.437 0.0113552\r\n486.909 0.0390635\r\n365.382 0.00161688\r\n357.395 0.0241137\r\n405.294 0.00342097\r\n368.651 0.00721046\r\n265.842 0.0115251\r\n317.401 0.011958\r\n247.922 0.0124263\r\n263.804 0.0107083\r\n292.874 0.0447871\r\n285.789 0.00267978\r\n310.292 0.0300609\r\n224.256 0.00308237\r\n242.714 0.0380592\r\n215.338 1.77636e-015\r\n241.966 0.00226827\r\n255.74 0.0488418\r\n217.406 0.00350902\r\n222.198 0.00501022\r\n227.722 0.00579109\r\n207.59 0.0088153\r\n170.127 0.011377\r\n213.738 0.00296356\r\n165.369 0.00284733\r\n207.651 0.0200218\r\n166.387 0.015788\r\n193.743 0.00166502\r\n158.74 0.0112305\r\n183.801 0.0167979\r\n90.139 2.8448e-005\r\n673.048 0.0522273\r\n890.354 0.254005\r\n958.209 0.0777392\r\n1064.39 0.201277\r\n977.369 0.0314228\r\n509.449 0.00940948\r\n946.571 0.00219884\r\n683.287 0.0660316\r\n621.602 0.0110357\r\n839.395 0.0208915\r\n655.522 0.0169133\r\n657.656 0.0227204\r\n606.302 0.0103209\r\n558.477 0.0612821\r\n583.749 0.00475387\r\n499.603 0.00995885\r\n529.285 0.00828184\r\n558.232 0.0344737\r\n493.093 0.0733961\r\n453.896 0.00316292\r\n506.071 0.0149105\r\n380.391 0.0385447\r\n445.424 0.0589094\r\n375.738 0.0563039\r\n411.902 0.0731767\r\n461.008 0.0174597\r\n351.514 0.00916461\r\n406.927 0.00299632\r\n558.658 0.00221491\r\n359.598 0.0132129\r\n555.941 0.021801\r\n421.956 0.00447364\r\n311.446 0.0262391\r\n336.924 0.0487913\r\n407.252 0.0141803\r\n365.386 0.000791243\r\n292.854 0.012854\r\n300.757 0.00126308\r\n335.679 0.00749453\r\n297.054 0.00132637\r\n313.285 0.00767536\r\n360.102 0.000718353\r\n314.281 0.0146009\r\n288.376 0.0180156\r\n248.363 0.00386633\r\n297.262 0.0227034\r\n255.997 0.0130808\r\n292.505 0.000679802\r\n237.743 0.062295\r\n182.39 0.00260578\r\n290.847 0.0288014\r\n193.013 0.00022687\r\n296.289 0.0331982\r\n208.174 0.0313543\r\n269.115 0.0102902\r\n188.362 0.00713225\r\n214.048 0.00832432\r\n158.715 0.00600131\r\n207.97 0.00694965\r\n166.314 0.0477353\r\n215.152 0.00219649\r\n188.764 0.000772446\r\n235.552 0.012332\r\n105.759 0.0152506\r\n722.083 0.00176718\r\n764.759 0.0111859\r\n841.63 0.0749285\r\n794.631 0.0538722\r\n1049.3 0.022854\r\n587.79 0.124041\r\n628.121 0.0514061\r\n700.761 0.0211616\r\n646.009 0.000948473\r\n606.126 0.0596979\r\n699.766 0.0381682\r\n680.622 0.0283263\r\n635.817 0.138117\r\n701.47 0.00385393\r\n631.98 0.0196221\r\n626.902 0.00118142\r\n686.068 0.0717862\r\n622.958 0.00194286\r\n467.137 0.0601935\r\n477.451 0.00619248\r\n511.562 0.0131106\r\n454.815 0.0321981\r\n566.909 0.0146406\r\n456.501 0.00359524\r\n398.766 0.00495432\r\n365.99 0.019769\r\n486.796 0.0438246\r\n506.533 0.00510144\r\n425.374 0.00991599\r\n359.471 0.0557944\r\n378.265 0.0125584\r\n384.678 0.0123699\r\n368.986 0.00225307\r\n398.052 0.0411579\r\n355.488 0.0704737\r\n387.933 0.0420964\r\n474.544 0.0235188\r\n416.955 0.0621819\r\n456.69 0.000149605\r\n349.953 0.00636837\r\n311.884 0.0162194\r\n317.908 0.00479852\r\n293.767 0.00280112\r\n281.224 0.0103045\r\n305.831 0.0278045\r\n295.421 0.0025806\r\n313.833 0.000291413\r\n221.981 0.013722\r\n293.588 0.00822501\r\n233.028 0.00421056\r\n272.416 0.0132114\r\n205.682 0.0245086\r\n259.12 0.00302927\r\n218.921 0.00863334\r\n300.038 0.0248418\r\n290.389 0.0103762\r\n249.999 0.00219402\r\n246.06 0.0207732\r\n220.374 0.00294332\r\n201.999 0.00291761\r\n223.187 0.00580777\r\n172.582 0.00562451\r\n177.985 0.042796\r\n134.324 0.00391126\r\n706.047 0.0173581\r\n620.598 0.0318851\r\n882.743 0.00789763\r\n965.468 0.0493681\r\n821.073 0.0592721\r\n892.394 0.00197597\r\n803.941 0.0738486\r\n774.611 0.0173849\r\n870.509 0.0728743\r\n610.866 0.0256006\r\n535.036 0.0420688\r\n666.451 0.0250342\r\n676.132 0.0131072\r\n602.415 0.000219968\r\n548.26 0.0592007\r\n583.264 0.0038803\r\n560.925 0.0601105\r\n631.95 0.0455948\r\n569.272 0.00259221\r\n588.894 0.0165742\r\n485.404 0.0305939\r\n610.647 0.00729934\r\n678.475 0.00283739\r\n449.985 0.00129108\r\n477.804 0.0198557\r\n454.243 0.0212205\r\n441.799 0.0193184\r\n445.051 0.0297257\r\n516.573 0.0143166\r\n350.63 0.000148478\r\n426.835 0.0722938\r\n360.691 0.0336723\r\n431.795 0.0114454\r\n369.216 0.0230481\r\n413.835 0.0114203\r\n326.736 0.00333539\r\n340.178 0.00225565\r\n352.208 0.00173355\r\n436.132 0.0192238\r\n321.215 0.00146116\r\n360.851 0.0119688\r\n259.382 0.0162517\r\n390.094 0.00401561\r\n313.165 0.0138685\r\n253.464 0.118319\r\n226.153 0.0516683\r\n236.427 0.0131878\r\n276.953 0.0178644\r\n241.055 0.00626173\r\n246.376 0.00302776\r\n182.617 0.0232214\r\n267.135 0.00737369\r\n196.836 0.0201332\r\n216.28 0.00245163\r\n194.607 0.00738367\r\n268.691 0.015994\r\n183.421 0.010951\r\n249.665 0.00959207\r\n191.349 0.00136859\r\n177.613 0.0420661\r\n194.876 0.0148504\r\n148.585 0.000272468\r\n287.501 0.000156306\r\n114.092 0.00506961\r\n574.92 0.0207753\r\n751.987 0.0085304\r\n711.491 0.137319\r\n932.161 0.0640677\r\n894.42 0.0709704\r\n747.106 0.0147503\r\n688.13 0.0614687\r\n668.083 0.0454753\r\n774.004 0.000730783\r\n630.905 0.00596977\r\n706.246 0.0548119\r\n694.804 0.0101314\r\n618.822 0.0311343\r\n657.095 0.147069\r\n601.766 0.00851599\r\n686.003 0.00703096\r\n569.537 0.00612637\r\n572.786 0.0361139\r\n507.738 0.0624175\r\n465.625 0.0609121\r\n586.095 0.01671\r\n613.572 0.00822011\r\n560.923 0.0311417\r\n574.716 0.00982438\r\n349.589 0.0150485\r\n418.519 0.004309\r\n436.994 0.0210839\r\n516.541 0.053777\r\n463.202 0.00857633\r\n445.002 0.0170981\r\n447.695 0.00294982\r\n377.378 0.00487217\r\n447.719 0.0472074\r\n316.844 0.000642669\r\n441.584 0.00125844\r\n485.958 0.00644447\r\n412.66 0.0541098\r\n388.839 0.016443\r\n431.155 0.0205425\r\n365.959 0.015767\r\n439.871 0.0579879\r\n313.598 0.0178942\r\n307.764 0.058827\r\n338.788 0.00736307\r\n246.3 0.0112874\r\n318.413 0.00523208\r\n280.525 0.0114572\r\n273.651 0.00759402\r\n268.219 0.00514545\r\n257.93 0.00114772\r\n267.166 0.018794\r\n197.236 0.00251474\r\n299.911 0.00574314\r\n237.541 0.00198928\r\n227.277 0.0133912\r\n198.865 0.000454737\r\n285.817 0.00528847\r\n196.793 0.00491877\r\n210.773 0.0174743\r\n239.482 0.00786311\r\n205.784 0.00652339\r\n248.664 0.0109826\r\n209.482 0.0214709\r\n140.253 0.00196243\r\n413.414 0.00921111\r\n731.499 0.0610662\r\n769.575 0.0256806\r\n729.744 0.00263506\r\n711.275 0.0033637\r\n740.03 0.00828849\r\n673.381 0.0255401\r\n749.233 0.0191584\r\n633.45 0.0291074\r\n695.778 0.012591\r\n748.357 0.077274\r\n653.366 0.0765287\r\n602.433 0.00070357\r\n550.496 0.0204692\r\n675.099 0.0345661\r\n587.234 0.0403236\r\n646.435 0.0549283\r\n624.857 0.0213951\r\n706.158 0.0424135\r\n739.312 0.0406961\r\n485.895 0.00257376\r\n689.968 0.0292653\r\n494.298 0.0314699\r\n594.211 0.00704812\r\n478.007 0.00801862\r\n502.272 0.0323557\r\n404.953 0.031035\r\n378.624 0.0445271\r\n386.971 0.0448159\r\n436.205 0.00264761\r\n593.591 0.024502\r\n423.202 0.000117287\r\n400.489 0.0424484\r\n407.622 0.00330334\r\n394.064 0.0674552\r\n426.622 0.0696237\r\n317.954 0.018586\r\n376.583 0.0305435\r\n340.417 0.0257955\r\n317.572 0.0182304\r\n378.848 0.00680598\r\n271.26 0.0128144\r\n373.065 0.00323251\r\n312.496 0.000114928\r\n276.799 0.0223909\r\n230.084 0.0105473\r\n247.672 0.0036985\r\n231.619 0.0104263\r\n248.641 0.00715702\r\n208.893 0.00173638\r\n241.04 0.0340593\r\n195.059 0.00276683\r\n219.701 0.00787296\r\n194.079 0.00520206\r\n230.434 0.0077585\r\n260.437 0.0119648\r\n220.574 0.00586253\r\n211.59 0.00422476\r\n237.112 0.021565\r\n245.664 0.0299832\r\n193.693 0.00349797\r\n253.6 0.0112285\r\n242.271 0.0114318\r\n117.147 0.000620479\r\n705.57 0.00427653\r\n895.259 0.181323\r\n770.879 0.043775\r\n961.658 0.0220002\r\n882.924 0.0641954\r\n786.3 0.0738589\r\n655.992 0.0706148\r\n906.016 0.0974426\r\n753.745 0.0490972\r\n774.052 0.0874245\r\n840.44 0.0169402\r\n662.327 0.014044\r\n660.508 0.0485504\r\n660.521 0.00109597\r\n724.22 0.005947\r\n523.493 0.0164564\r\n513.105 0.0146732\r\n541.481 0.00651403\r\n678.862 0.00349417\r\n573.185 0.00159889\r\n802.917 0.0429236\r\n678.222 0.0520517\r\n593.083 0.0168704\r\n495.509 0.00155243\r\n583.755 0.0327556\r\n699.121 0.00188814\r\n437.885 0.0678748\r\n518.716 0.0175334\r\n388.964 0.0099452\r\n540.67 0.0250294\r\n345.426 0.0185501\r\n506.344 0.00369412\r\n440.408 0.0297442\r\n587.851 0.0441182\r\n383.062 0.0339921\r\n413.938 0.000854205\r\n385.747 0.00180264\r\n411.86 0.00346397\r\n312.043 0.00408055\r\n417.396 0.00102795\r\n377.198 0.0174007\r\n303.857 0.021468\r\n285.569 0.0136738\r\n295.942 0.000791643\r\n347.897 0.0123769\r\n258.836 0.0276437\r\n333.695 0.0105296\r\n261.955 0.0103781\r\n309.152 9.82552e-005\r\n327.505 0.00972513\r\n277.091 0.0043737\r\n277.728 0.0117006\r\n239.639 0.00162563\r\n208.902 0.0204247\r\n205.111 0.0198722\r\n291.553 0.0116755\r\n243.147 0.0124723\r\n300.168 0.000161901\r\n231.825 0.00644288\r\n333.39 0.00701261\r\n206.019 0.00436731\r\n402.439 0.0194184\r\n252.334 0.00678385\r\n116.495 0.000420519\r\n708 0\r\n1256.19 0.262271\r\n1207.86 0.149885\r\n1068.5 0.142444\r\n1281.2 0.200632\r\n967.024 0.0473356\r\n1043.3 0.0555309\r\n865.299 0.0887381\r\n874.946 0.0848814\r\n810.299 0.000107228\r\n1132.11 0.0343828\r\n633.242 0.00919817\r\n794.579 0.0335508\r\n616.884 0.00516261\r\n843.72 0.0538873\r\n556.267 0.0217846\r\n989.304 0.0217001\r\n525.535 0.0198812\r\n773.074 0.0072922\r\n685.465 0.00466959\r\n597.521 0.00171237\r\n600.407 0.0384154\r\n562.712 0.0369988\r\n492.951 0.0435165\r\n552.64 0.0326909\r\n492.544 0.00827582\r\n461.807 0.00772907\r\n439.873 0.00564166\r\n484.622 0.0475485\r\n444.397 0.0132911\r\n425.651 0.00291719\r\n445.747 0.032654\r\n528.562 0.00567025\r\n581.581 0.031784\r\n449.752 0.0100063\r\n618.872 0.0185742\r\n357.728 0.00895302\r\n394.97 0.0203353\r\n404.221 0.00266255\r\n373.696 0.00167969\r\n415.363 0.0203366\r\n300.44 0.00159365\r\n452.683 0.071148\r\n385.039 0.00212965\r\n500.205 0.00775251\r\n402.312 0.00796841\r\n305.582 0.00849625\r\n257.69 0.0324419\r\n316.132 0.0115742\r\n279.348 0.00515323\r\n295.519 0.00351743\r\n418.267 0.0247348\r\n260.099 0.00267062\r\n323.569 0.0198201\r\n229.06 0.00272608\r\n282.507 0.000761054\r\n298.541 0.0539806\r\n274.246 0.00303334\r\n238.609 0.00404068\r\n280.875 0.000821492\r\n221.127 0.00617596\r\n261.634 0.0123741\r\n244.844 0.0053813\r\n156 0\r\n1698 53\r\n37 0\r\n28 0\r\n28 0\r\n12 0\r\n20 0\r\n29 0\r\n24 0\r\n18 0\r\n26 0\r\n32 0\r\n9 0\r\n12 0\r\n10 0\r\n17 0\r\n27 0\r\n11 0\r\n10 0\r\n15 0\r\n19 0\r\n37 1\r\n43 0\r\n14 0\r\n16 0\r\n12 0\r\n21 0\r\n24 0\r\n52 2\r\n85 3\r\n20 0\r\n20 0\r\n24 0\r\n21 0\r\n33 1\r\n47 2\r\n169 8\r\n212 14\r\n41 0\r\n34 0\r\n27 0\r\n34 0\r\n23 0\r\n35 0\r\n87 1\r\n259 10\r\n86 7\r\n19 0\r\n28 0\r\n35 2\r\n34 1\r\n40 3\r\n30 0\r\n88 2\r\n116 4\r\n100 4\r\n35 0\r\n16 0\r\n22 0\r\n23 0\r\n34 0\r\n32 0\r\n50 1\r\n51 0\r\n118 0\r\n101 5\r\n35 1\r\n15 0\r\n11 0\r\n20 0\r\n26 0\r\n27 0\r\n35 1\r\n49 1\r\n110 1\r\n131 0\r\n81 1\r\n33 2\r\n28 1\r\n15 0\r\n12 0\r\n11 0\r\n14 0\r\n16 0\r\n20 0\r\n29 0\r\n41 0\r\n89 0\r\n36 0\r\n24 0\r\n21 0\r\n17 0\r\n11 0\r\n10 0\r\n13 0\r\n17 0\r\n19 0\r\n31 0\r\n33 0\r\n56 1\r\n90 1\r\n57 0\r\n28 0\r\n31 0\r\n31 1\r\n24 0\r\n13 0\r\n15 0\r\n17 0\r\n12 0\r\n18 0\r\n29 0\r\n44 4\r\n63 5\r\n80 3\r\n46 2\r\n37 1\r\n21 0\r\n24 0\r\n28 0\r\n34 0\r\n11 0\r\n18 0\r\n27 0\r\n35 0\r\n51 1\r\n56 1\r\n41 0\r\n90 2\r\n122 5\r\n75 9\r\n26 0\r\n18 0\r\n15 0\r\n13 0\r\n13 0\r\n10 0\r\n20 0\r\n24 0\r\n42 0\r\n51 0\r\n70 1\r\n63 0\r\n112 0\r\n67 2\r\n36 1\r\n16 0\r\n17 0\r\n13 0\r\n11 0\r\n6 0\r\n29 0\r\n32 0\r\n60 1\r\n77 2\r\n133 0\r\n172 0\r\n83 1\r\n34 1\r\n31 1\r\n15 0\r\n15 0\r\n15 0\r\n17 0\r\n23 0\r\n29 0\r\n44 0\r\n54 0\r\n175 0\r\n54 0\r\n26 0\r\n21 0\r\n18 0\r\n9 0\r\n10 0\r\n7 0\r\n36 0\r\n36 1\r\n91 2\r\n100 0\r\n77 1\r\n29 0\r\n31 0\r\n24 0\r\n25 0\r\n12 0\r\n8 0\r\n57 3\r\n64 5\r\n115 5\r\n63 2\r\n44 1\r\n21 0\r\n26 0\r\n28 1\r\n33 1\r\n11 0\r\n133 15\r\n228 23\r\n75 12\r\n49 0\r\n44 1\r\n25 0\r\n30 1\r\n31 2\r\n42 2\r\n186 19\r\n76 8\r\n33 1\r\n19 0\r\n22 0\r\n12 0\r\n13 0\r\n10 0\r\n84 10\r\n30 1\r\n24 0\r\n16 0\r\n15 0\r\n8 0\r\n8 0\r\n40 3\r\n17 0\r\n16 0\r\n13 0\r\n13 0\r\n6 0\r\n35 1\r\n17 0\r\n21 0\r\n14 0\r\n18 0\r\n24 0\r\n11 0\r\n14 0\r\n6 0\r\n26 1\r\n12 0\r\n11 0\r\n33 1\r\n11 0\r\n42 0\r\n126 22\r\n727 203\r\n1705 69\r\n86 7\r\n68 3\r\n117 15\r\n36 0\r\n62 6\r\n162 12\r\n62 2\r\n63 6\r\n234 26\r\n421 54\r\n109 4\r\n103 16\r\n147 13\r\n499 45\r\n123 20\r\n61 3\r\n97 7\r\n180 10\r\n296 10\r\n157 24\r\n42 2\r\n38 0\r\n59 5\r\n103 7\r\n237 13\r\n90 11\r\n62 14\r\n33 0\r\n79 2\r\n122 12\r\n302 11\r\n310 4\r\n152 23\r\n41 2\r\n43 0\r\n76 3\r\n154 12\r\n318 17\r\n103 12\r\n68 9\r\n30 0\r\n210 34\r\n379 78\r\n170 13\r\n73 15\r\n99 10\r\n351 40\r\n127 33\r\n48 1\r\n27 0\r\n128 22\r\n54 2\r\n41 0\r\n78 9\r\n34 0\r\n117 8\r\n144 28\r\n519 124\r\n259 5\r\n30 0\r\n16 0\r\n29 0\r\n10 0\r\n19 0\r\n53 0\r\n14 0\r\n12 0\r\n61 1\r\n130 4\r\n35 0\r\n27 0\r\n30 0\r\n82 2\r\n29 0\r\n27 0\r\n31 0\r\n65 0\r\n64 0\r\n41 1\r\n7 0\r\n13 0\r\n23 0\r\n39 0\r\n104 0\r\n23 0\r\n14 0\r\n4 0\r\n22 0\r\n29 0\r\n128 2\r\n89 3\r\n41 2\r\n10 0\r\n12 0\r\n25 0\r\n83 3\r\n142 4\r\n30 0\r\n13 0\r\n4 0\r\n123 13\r\n183 19\r\n75 6\r\n16 0\r\n30 1\r\n151 7\r\n36 4\r\n12 0\r\n4 0\r\n46 0\r\n14 0\r\n20 0\r\n17 0\r\n5 0\r\n31 0\r\n28 1\r\n99 5\r\n186 4\r\n26 0\r\n26 0\r\n31 0\r\n10 0\r\n22 0\r\n53 0\r\n25 0\r\n24 0\r\n96 6\r\n123 3\r\n25 0\r\n31 0\r\n46 1\r\n147 8\r\n24 0\r\n30 0\r\n35 1\r\n113 0\r\n117 0\r\n51 5\r\n11 0\r\n14 0\r\n26 0\r\n40 0\r\n117 2\r\n26 0\r\n16 0\r\n4 0\r\n21 0\r\n29 0\r\n155 2\r\n141 0\r\n49 1\r\n11 0\r\n15 0\r\n20 0\r\n52 1\r\n130 1\r\n28 0\r\n17 0\r\n4 0\r\n115 10\r\n133 14\r\n54 7\r\n15 0\r\n23 0\r\n138 10\r\n29 2\r\n12 0\r\n4 0\r\n55 6\r\n15 0\r\n16 0\r\n19 0\r\n7 0\r\n32 0\r\n32 1\r\n103 8\r\n155 3\r\n26 0\r\n29 0\r\n39 0\r\n14 0\r\n27 0\r\n78 0\r\n41 0\r\n33 1\r\n132 16\r\n255 8\r\n20 0\r\n45 0\r\n74 1\r\n206 15\r\n36 1\r\n33 0\r\n33 0\r\n145 0\r\n172 2\r\n69 8\r\n18 0\r\n11 0\r\n23 0\r\n40 1\r\n130 1\r\n30 1\r\n21 0\r\n6 0\r\n18 0\r\n24 0\r\n98 0\r\n211 0\r\n71 0\r\n11 0\r\n25 0\r\n15 0\r\n37 0\r\n68 0\r\n24 0\r\n15 0\r\n4 0\r\n76 1\r\n105 2\r\n36 0\r\n15 0\r\n25 0\r\n133 5\r\n23 0\r\n8 0\r\n4 0\r\n57 6\r\n16 0\r\n13 0\r\n19 0\r\n5 0\r\n29 0\r\n31 1\r\n100 8\r\n581 6\r\n27 0\r\n16 0\r\n24 0\r\n12 0\r\n18 0\r\n38 1\r\n15 0\r\n17 0\r\n66 3\r\n108 1\r\n25 0\r\n22 0\r\n40 0\r\n114 3\r\n27 0\r\n23 0\r\n28 0\r\n89 1\r\n111 2\r\n38 4\r\n11 0\r\n20 0\r\n27 0\r\n46 2\r\n102 0\r\n25 1\r\n14 0\r\n4 0\r\n25 0\r\n27 0\r\n135 5\r\n112 4\r\n38 2\r\n10 0\r\n11 0\r\n31 0\r\n57 3\r\n111 4\r\n24 0\r\n13 0\r\n4 0\r\n121 6\r\n155 8\r\n61 4\r\n13 0\r\n26 0\r\n106 9\r\n30 1\r\n12 0\r\n5 0\r\n44 6\r\n15 0\r\n17 0\r\n15 0\r\n7 0\r\n23 0\r\n27 0\r\n89 6\r\n366 7\r\n22 0\r\n17 0\r\n25 0\r\n12 0\r\n19 0\r\n40 3\r\n15 0\r\n19 0\r\n62 7\r\n108 9\r\n24 0\r\n24 0\r\n36 1\r\n107 11\r\n29 1\r\n22 0\r\n26 0\r\n87 2\r\n86 1\r\n35 4\r\n13 0\r\n16 0\r\n23 0\r\n49 1\r\n110 0\r\n26 1\r\n16 0\r\n5 0\r\n23 0\r\n24 0\r\n99 6\r\n123 4\r\n37 3\r\n10 0\r\n16 0\r\n26 0\r\n46 3\r\n135 5\r\n37 0\r\n20 0\r\n5 0\r\n93 6\r\n98 9\r\n47 7\r\n18 0\r\n25 0\r\n116 4\r\n26 0\r\n13 0\r\n4 0\r\n46 5\r\n14 0\r\n16 0\r\n16 0\r\n5 0\r\n27 0\r\n32 0\r\n92 11\r\n223 9\r\n29 0\r\n24 0\r\n36 1\r\n9 0\r\n20 0\r\n60 2\r\n23 0\r\n20 0\r\n116 10\r\n193 21\r\n31 0\r\n28 1\r\n56 0\r\n219 19\r\n38 4\r\n21 0\r\n24 0\r\n60 0\r\n50 0\r\n45 1\r\n12 0\r\n13 0\r\n18 0\r\n37 0\r\n60 0\r\n20 0\r\n16 0\r\n3 0\r\n21 0\r\n35 0\r\n84 0\r\n90 0\r\n50 2\r\n10 0\r\n14 0\r\n18 0\r\n71 2\r\n85 1\r\n32 0\r\n19 0\r\n4 0\r\n99 9\r\n132 19\r\n58 4\r\n22 0\r\n33 1\r\n177 13\r\n33 2\r\n15 0\r\n3 0\r\n37 4\r\n12 0\r\n13 0\r\n19 0\r\n5 0\r\n28 1\r\n27 1\r\n106 9\r\n743 3\r\n34 0\r\n14 0\r\n28 0\r\n10 0\r\n11 0\r\n32 0\r\n15 0\r\n14 0\r\n67 1\r\n100 1\r\n32 0\r\n30 0\r\n44 0\r\n140 5\r\n29 0\r\n21 0\r\n33 0\r\n109 1\r\n114 1\r\n39 0\r\n12 0\r\n15 0\r\n23 0\r\n64 1\r\n123 3\r\n29 0\r\n14 0\r\n5 0\r\n23 0\r\n35 0\r\n67 0\r\n74 0\r\n41 0\r\n8 0\r\n14 0\r\n26 0\r\n54 1\r\n75 0\r\n22 0\r\n18 0\r\n4 0\r\n110 7\r\n150 3\r\n59 1\r\n20 0\r\n28 1\r\n167 8\r\n32 2\r\n12 0\r\n5 0\r\n84 5\r\n13 0\r\n15 0\r\n20 0\r\n4 0\r\n27 0\r\n28 1\r\n74 3\r\n696 7\r\n21 0\r\n27 0\r\n29 0\r\n12 0\r\n23 0\r\n45 0\r\n35 0\r\n24 0\r\n68 3\r\n118 5\r\n28 0\r\n35 0\r\n66 0\r\n186 1\r\n24 0\r\n25 0\r\n31 0\r\n141 0\r\n122 0\r\n69 1\r\n11 0\r\n14 0\r\n22 0\r\n47 1\r\n120 2\r\n27 0\r\n17 0\r\n5 0\r\n36 0\r\n35 0\r\n122 0\r\n109 1\r\n66 4\r\n12 0\r\n15 0\r\n28 0\r\n41 1\r\n136 2\r\n40 0\r\n18 0\r\n4 0\r\n103 5\r\n116 4\r\n58 7\r\n19 0\r\n26 0\r\n156 12\r\n31 1\r\n16 0\r\n4 0\r\n51 5\r\n12 0\r\n17 0\r\n14 0\r\n4 0\r\n22 0\r\n35 1\r\n90 8\r\n663 8\r\n18 0\r\n38 0\r\n35 0\r\n15 0\r\n27 0\r\n70 0\r\n36 0\r\n33 0\r\n132 7\r\n155 13\r\n22 0\r\n36 0\r\n116 0\r\n230 2\r\n33 0\r\n22 0\r\n26 0\r\n88 0\r\n146 0\r\n95 0\r\n14 0\r\n12 0\r\n16 0\r\n31 0\r\n68 0\r\n19 0\r\n14 0\r\n4 0\r\n33 0\r\n32 0\r\n135 0\r\n119 2\r\n64 4\r\n17 0\r\n17 0\r\n23 0\r\n40 0\r\n247 2\r\n52 1\r\n16 0\r\n5 0\r\n68 2\r\n92 5\r\n67 4\r\n17 0\r\n25 1\r\n97 1\r\n18 0\r\n11 0\r\n5 0\r\n34 0\r\n10 0\r\n14 0\r\n13 0\r\n3 0\r\n22 0\r\n31 0\r\n108 8\r\n"
  },
  {
    "path": "C++/test.cpp",
    "content": "#include\"liveness.h\"\r\n\r\n// Demo of Liveness Detection\r\nint main()\r\n{\r\n\tTest();\r\n\t/*\r\n\t// Initialization\r\n\tThuVisionFaceLiveCheck Check;\r\n\tbool Init_message = Check.Init();\r\n\tif(Init_message == false)\r\n\t{\r\n\t\tstd::cout << \"Initialization failed. \" << endl;\r\n\t\treturn -1;\r\n\t}\r\n\tstd::cout << \"Initialized successfully. \" << endl;\r\n\r\n\t// Check with Image Path\r\n\tstring imgPath0 = \"00000.png\";\r\n\tdouble value0 = Check.Check(imgPath0);\r\n\tcout << imgPath0 << \" is a \" << (value0 >= 0.5 ? \"real\" : \"fake\") << \" face. \" <<endl;\r\n\r\n\t// Check with Image Mat\r\n\tstring imgPath1 = \"00001.png\";\r\n\tMat img = imread(imgPath1);\r\n\tif(img.empty())\r\n\t{\r\n\t\tstd::cout << \"Can not load image: \" << imgPath1 << endl;\r\n\t\treturn -1;\r\n\t}\r\n\tdouble value1 = Check.Check(img);\r\n\tcout << \"img\" << \" is a \" << (value1 >= 0.5 ? \"real\" : \"fake\") << \" face. \" <<endl;\r\n\t*/\r\n\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "Matlab/DoG.m",
    "content": "function Y = DoG(X, sigma1, sigma2)\r\n%% default parameter\r\nif nargin == 1\r\n    sigma1 = 0.5;\r\n    sigma2 = 1;\r\nend\r\n%% Init. operations\r\nF1 = fspecial('gaussian', 2*ceil(3*sigma1)+1, sigma1);\r\nF2 = fspecial('gaussian', 2*ceil(3*sigma2)+1, sigma2);\r\n\r\n%% Filtering\r\nXF1 = imfilter(X, F1, 'replicate', 'same');\r\nXF2 = imfilter(X, F2, 'replicate', 'same');\r\nDXF = XF1 - XF2;\r\n\r\n%% Fourier Spectra\r\nY = abs(fftshift(fft2(DXF)));\r\nY = Y(:);\r\nend"
  },
  {
    "path": "Matlab/DoGLBP_Test.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUAA/client_test_normalized.txt');\r\nClientTestNormalizedNumber = size(ClientTestNormalizedName, 1);\r\nImposterTestNormalizedName = importdata('./NUAA/imposter_test_normalized.txt');\r\nImposterTestNormalizedNumber = size(ImposterTestNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nload('LBP_SVM.mat');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\nmodel_LBP = model;\r\nMinMax_LBP = MinMax;\r\nload DoG_SVM.mat\r\nmodel_DoG = model;\r\nMinMax_DoG = MinMax;\r\n\r\n%% client testing data\r\n% tic\r\nClientFlag = zeros(ClientTestNormalizedNumber, 1);\r\nfor i = 1 : ClientTestNormalizedNumber\r\n    ClientTest = imread(['./NUAA/ClientNormalized/' ClientTestNormalizedName{i}]);\r\n    ClientTestFeature_LBP = LBP_feature(ClientTest, Map_u2_16, Map_u2_8);\r\n    ClientTestFeature_LBP = (ClientTestFeature_LBP-MinMax_LBP(1,:))./(MinMax_LBP(2,:)-MinMax_LBP(1,:));\r\n    [~, ~, TestValue_LBP] = svmpredict(1, ClientTestFeature_LBP, model_LBP, '-q');\r\n    ClientTestFeature_DoG = DoG(ClientTest, 0.5, 1);\r\n    ClientTestFeature_DoG = (ClientTestFeature_DoG'-MinMax_DoG(1,:))./(MinMax_DoG(2,:)-MinMax_DoG(1,:));\r\n    [~, ~, TestValue_DoG] = svmpredict(1, ClientTestFeature_DoG, model_DoG, '-q');\r\n    ClientFlag(i) = TestValue_LBP+TestValue_DoG;\r\n%     disp(['frame:',num2str(i),'; flag:',num2str(ClientFlag(i))]);\r\n%     toc\r\nend\r\n\r\n%% LBP feature of imposter testing data\r\nImposterFlag = zeros(ImposterTestNormalizedNumber, 1);\r\nfor i = 1 : ImposterTestNormalizedNumber\r\n    ImposterTest = imread(['./NUAA/ImposterNormalized/' ImposterTestNormalizedName{i}]);  \r\n    ImposterTestFeature_LBP = LBP_feature(ImposterTest, Map_u2_16, Map_u2_8);\r\n    ImposterTestFeature_LBP = (ImposterTestFeature_LBP-MinMax_LBP(1,:))./(MinMax_LBP(2,:)-MinMax_LBP(1,:));\r\n    [~, ~, TestValue_LBP] = svmpredict(1, ImposterTestFeature_LBP, model_LBP, '-q');\r\n    ImposterTestFeature_DoG = DoG(ImposterTest, 0.5, 1);\r\n    ImposterTestFeature_DoG = (ImposterTestFeature_DoG'-MinMax_DoG(1,:))./(MinMax_DoG(2,:)-MinMax_DoG(1,:));\r\n    [~, ~, TestValue_DoG] = svmpredict(1, ImposterTestFeature_DoG, model_DoG, '-q');\r\n    ImposterFlag(i) = TestValue_LBP+TestValue_DoG;\r\n%     disp(['frame:',num2str(i),'; flag:',num2str(ImposterFlag(i))]);\r\n%     toc\r\nend\r\n"
  },
  {
    "path": "Matlab/DoG_CASIA_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./lbp-0.3.3');\r\n% Map_u2_16 = getmapping(16, 'u2');\r\n% Map_u2_8 = getmapping(8, 'u2');\r\n% load DoG_SVM_CASIA.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\n% flagSet = cell(30, 8);\r\n% for IdxSubject = 1 : 30\r\n%     for IdxData = 1 : 8\r\n%         if IdxData <= 8\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n%         else\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n%         end\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         flag = [];\r\n%         for IdxFrame = 1 : NumFrame\r\n%             data = read(Mov, IdxFrame);\r\n%             box = step(detector, data);\r\n%             if size(box, 1) == 1\r\n%                 frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n%                 TestFeature = DoG(frame_now, 0.5, 1)';\r\n%                 TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag,TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save DoG_SVM_CASIA_testfeature.mat flagSet\r\n\r\n%% testing\r\nload DoG_SVM_CASIA_testfeature.mat flagSet        \r\nDataCorrectRate = zeros(3, 601);\r\nCorrectRate = zeros(3, 601);\r\nfor Bias = -3:0.01:3;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 30\r\n        for IdxData = 1 : 8\r\n            if IdxData <= 2\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+3.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 240; DataCorrectNoReal / 60; DataCorrectNoFake / 180];\r\n    CorrectRate(:, round((Bias+3.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend\r\n\r\n"
  },
  {
    "path": "Matlab/DoG_CASIA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% extract features\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\nTrainFeatureSet = cell(20, 8);\r\nNumFrame = zeros(20, 8);\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        if IdxData <= 8\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n        else\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n        end\r\n        Mov = VideoReader(Name);\r\n        NumFrame(IdxSubject, IdxData) = Mov.NumberOfFrames;\r\n        TrainFeature = [];\r\n        for IdxFrame = 1 : NumFrame(IdxSubject, IdxData)\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n                Feature = DoG(frame_now, 0.5, 1)';\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\nsave DoG_SVM_CASIA_raw.mat TrainFeatureSet\r\n\r\n%% training\r\nload DoG_SVM_CASIA_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 2\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave DoG_SVM_CASIA.mat model MinMax"
  },
  {
    "path": "Matlab/DoG_LBP_All_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% add path\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\n\r\n%% NUAA\r\n% load\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainNormalizedNumber = size(ClientTrainNormalizedName, 1);\r\nImposterTrainNormalizedName = importdata('./NUAA/imposter_train_normalized.txt');\r\nImposterTrainNormalizedNumber = size(ImposterTrainNormalizedName, 1);\r\n% mapping\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n% features of client training data\r\nClientTrainFeature = zeros(ClientTrainNormalizedNumber, 833+64*64);\r\nfor i = 1 : ClientTrainNormalizedNumber\r\n    ClientTrain = imread(['./NUAA/ClientNormalized/' ClientTrainNormalizedName{i}]);\r\n    ClientTrainFeature(i, :) = [LBP_feature(ClientTrain, Map_u2_16, Map_u2_8), DoG(ClientTrain, 0.5, 1)'];\r\nend\r\n% features of imposter training data\r\nImposterTrainFeature = zeros(ImposterTrainNormalizedNumber, 833+64*64);\r\nfor i = 1 : ImposterTrainNormalizedNumber\r\n    ImposterTrain = imread(['./NUAA/ImposterNormalized/' ImposterTrainNormalizedName{i}]);  \r\n    ImposterTrainFeature(i, :) = [LBP_feature(ImposterTrain, Map_u2_16, Map_u2_8), DoG(ImposterTrain, 0.5, 1)'];\r\nend\r\n% features and truths\r\nTrainTruth = [ones(ClientTrainNormalizedNumber,1);-ones(ImposterTrainNormalizedNumber,1)];\r\nTrainFeatureAll = [ClientTrainFeature;ImposterTrainFeature];\r\nclear ClientTrainFeature ImposterTrainFeature\r\n\r\n%% CASIA\r\nload DoG&LBP_SVM_CASIA_raw.mat\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 2\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nclear TrainFeatureSet\r\n\r\n%% PRINT-ATTACK\r\nload DoG&LBP_SVM_PRINT_ATTACK_raw.mat\r\nfor IdxSubject = 1 : 15\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 4\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nclear TrainFeatureSet\r\n\r\n%% training\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave DoG&LBP_SVM_All.mat model MinMax"
  },
  {
    "path": "Matlab/DoG_LBP_CASIA_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./lbp-0.3.3');\r\n% Map_u2_16 = getmapping(16, 'u2');\r\n% Map_u2_8 = getmapping(8, 'u2');\r\n% load DoG&LBP_SVM_CASIA.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\n% flagSet = cell(30, 8);\r\n% for IdxSubject = 1 : 30\r\n%     for IdxData = 1 : 8\r\n%         if IdxData <= 8\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n%         else\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n%         end\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         flag = [];\r\n%         for IdxFrame = 1 : NumFrame\r\n%             data = read(Mov, IdxFrame);\r\n%             box = step(detector, data);\r\n%             if size(box, 1) == 1\r\n%                 frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n%                 TestFeature = [LBP_feature(frame_now, Map_u2_16, Map_u2_8), DoG(frame_now, 0.5, 1)'];\r\n%                 TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag,TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save DoG&LBP_SVM_CASIA_testfeature.mat flagSet\r\n\r\n%% testing\r\nload DoG&LBP_SVM_CASIA_testfeature.mat flagSet\r\nDataCorrectRate = zeros(3, 601);\r\nCorrectRate = zeros(3, 601);\r\nfor Bias = -3:0.01:3;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 30\r\n        for IdxData = 1 : 8\r\n            if IdxData <= 2\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+3.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 240; DataCorrectNoReal / 60; DataCorrectNoFake / 180];\r\n    CorrectRate(:, round((Bias+3.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend      \r\n\r\n"
  },
  {
    "path": "Matlab/DoG_LBP_CASIA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% extract features\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\nTrainFeatureSet = cell(20, 8);\r\nNumFrame = zeros(20, 8);\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        if IdxData <= 8\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n        else\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n        end\r\n        Mov = VideoReader(Name);\r\n        NumFrame(IdxSubject, IdxData) = Mov.NumberOfFrames;\r\n        TrainFeature = [];\r\n        for IdxFrame = 1 : NumFrame(IdxSubject, IdxData)\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n                Feature = [LBP_feature(frame_now, Map_u2_16, Map_u2_8), DoG(frame_now, 0.5, 1)'];\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\n% save DoG&LBP_SVM_CASIA_raw.mat TrainFeatureSet\r\n\r\n%% training\r\n% load DoG&LBP_SVM_CASIA_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 2\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave DoG&LBP_SVM_CASIA.mat model MinMax"
  },
  {
    "path": "Matlab/DoG_LBP_NUAA_Test.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUAA/client_test_normalized.txt');\r\nClientTestNormalizedNumber = size(ClientTestNormalizedName, 1);\r\nImposterTestNormalizedName = importdata('./NUAA/imposter_test_normalized.txt');\r\nImposterTestNormalizedNumber = size(ImposterTestNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\nload DoG&LBP_SVM_NUAA.mat\r\n\r\n%% client testing data\r\nClientTestFeature = zeros(ClientTestNormalizedNumber, 833+64*64);\r\nfor i = 1 : ClientTestNormalizedNumber\r\n    ClientTest = imread(['./NUAA/ClientNormalized/' ClientTestNormalizedName{i}]);\r\n    ClientTestFeature(i, :) = [LBP_feature(ClientTest, Map_u2_16, Map_u2_8), DoG(ClientTest, 0.5, 1)'];\r\n    ClientTestFeature(i, :) = (ClientTestFeature(i, :)-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\nend\r\n\r\n%% LBP feature of imposter testing data\r\nImposterTestFeature = zeros(ImposterTestNormalizedNumber, 833+64*64);\r\nfor i = 1 : ImposterTestNormalizedNumber\r\n    ImposterTest = imread(['./NUAA/ImposterNormalized/' ImposterTestNormalizedName{i}]);  \r\n    ImposterTestFeature(i, :) = [LBP_feature(ImposterTest, Map_u2_16, Map_u2_8), DoG(ImposterTest, 0.5, 1)'];\r\n    ImposterTestFeature(i, :) = (ImposterTestFeature(i, :)-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\nend\r\n\r\n%% SVM testing\r\n[ClientTestLabel, ClientTestAccuracy, ClientTestValue] = svmpredict(ones(ClientTestNormalizedNumber,1), ClientTestFeature, model);\r\n[ImposterTestLabel, ImposterTestAccuracy, ImposterTestValue] = svmpredict(-ones(ImposterTestNormalizedNumber,1), ImposterTestFeature, model);\r\naccuracy = zeros(601, 3);\r\nfor i=-3:0.01:3\r\n    accuracy(round(i*100+301),:)=[mean(ClientTestValue>=i),mean(ImposterTestValue<i),(sum(ClientTestValue>=i)+sum(ImposterTestValue<i))/(3362+5761)];\r\nend"
  },
  {
    "path": "Matlab/DoG_LBP_NUAA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainNormalizedNumber = size(ClientTrainNormalizedName, 1);\r\nImposterTrainNormalizedName = importdata('./NUAA/imposter_train_normalized.txt');\r\nImposterTrainNormalizedNumber = size(ImposterTrainNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\n\r\n%% mapping\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% LBP feature of client training data\r\nClientTrainFeature = zeros(ClientTrainNormalizedNumber, 833+64*64);\r\nfor i = 1 : ClientTrainNormalizedNumber\r\n    ClientTrain = imread(['./NUAA/ClientNormalized/' ClientTrainNormalizedName{i}]);\r\n    ClientTrainFeature(i, :) = [LBP_feature(ClientTrain, Map_u2_16, Map_u2_8), DoG(ClientTrain, 0.5, 1)'];\r\nend\r\n\r\n%% LBP feature of imposter training data\r\nImposterTrainFeature = zeros(ImposterTrainNormalizedNumber, 833+64*64);\r\nfor i = 1 : ImposterTrainNormalizedNumber\r\n    ImposterTrain = imread(['./NUAA/ImposterNormalized/' ImposterTrainNormalizedName{i}]);  \r\n    ImposterTrainFeature(i, :) = [LBP_feature(ImposterTrain, Map_u2_16, Map_u2_8), DoG(ImposterTrain, 0.5, 1)'];\r\nend\r\n\r\n%% SVM training\r\nMinMax = minmax([ClientTrainFeature;ImposterTrainFeature]')';\r\nClientTrainFeature = (ClientTrainFeature-kron(MinMax(1,:),ones(ClientTrainNormalizedNumber,1)))./(kron(MinMax(2,:),ones(ClientTrainNormalizedNumber,1))-kron(MinMax(1,:),ones(ClientTrainNormalizedNumber,1)));\r\nImposterTrainFeature = (ImposterTrainFeature-kron(MinMax(1,:),ones(ImposterTrainNormalizedNumber,1)))./(kron(MinMax(2,:),ones(ImposterTrainNormalizedNumber,1))-kron(MinMax(1,:),ones(ImposterTrainNormalizedNumber,1)));\r\nTruth = [ones(ClientTrainNormalizedNumber,1);-ones(ImposterTrainNormalizedNumber,1)];\r\nmodel = svmtrain(Truth, [ClientTrainFeature;ImposterTrainFeature], '-t 0');\r\n[ClientTrainLabel, ClientTrainAccuracy, ClientTrainValue] = svmpredict(ones(ClientTrainNormalizedNumber,1), ClientTrainFeature, model);\r\n[ImposterTrainLabel, ImposterTrainAccuracy, ImposterTrainValue] = svmpredict(-ones(ImposterTrainNormalizedNumber,1), ImposterTrainFeature, model);\r\nsave DoG&LBP_SVM_NUAA.mat model MinMax"
  },
  {
    "path": "Matlab/DoG_LBP_PRINT_ATTACK_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./lbp-0.3.3');\r\n% Map_u2_16 = getmapping(16, 'u2');\r\n% Map_u2_8 = getmapping(8, 'u2');\r\n% load DoG&LBP_SVM_PRINT_ATTACK.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\n% fileIndex = {'009', '011', '013', '014', '019', '020', '021', '023', '024', '026', '028', '031', '102', '104', '106', '107', '109', '112', '115', '117'};\r\n% fileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n%     'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\n% fileNo = size(fileIndex, 2);\r\n% flagSet = cell(fileNo, 8);\r\n% for IdxSubject = 1 : fileNo\r\n%     for IdxData = 1 : 8\r\n%         Name = ['./PRINT-ATTACK/test/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         flag = [];\r\n%         for IdxFrame = 1 : NumFrame\r\n%             data = read(Mov, IdxFrame);\r\n%             box = step(detector, data);\r\n%             if size(box, 1) == 1\r\n%                 frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n%                 TestFeature = [LBP_feature(frame_now, Map_u2_16, Map_u2_8), DoG(frame_now, 0.5, 1)'];\r\n%                 TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag,TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save DoG&LBP_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\n\r\n%% testing\r\nload DoG&LBP_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\nDataCorrectRate = zeros(3, 601);\r\nCorrectRate = zeros(3, 601);\r\nfor Bias = -3:0.01:3;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 20\r\n        for IdxData = 1 : 8\r\n            if IdxData > 4\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+3.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 160; DataCorrectNoReal / 80; DataCorrectNoFake / 80];\r\n    CorrectRate(:, round((Bias+3.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend"
  },
  {
    "path": "Matlab/DoG_LBP_PRINT_ATTACK_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% extract feature\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'001', '002', '004', '006', '007', '008', '012', '016', '018', '025', '027', '103', '105', '108', '110'};\r\nfileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n    'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\nfileNo = size(fileIndex, 2);\r\nTrainFeatureSet = cell(fileNo, 8);\r\nfor IdxSubject = 1 : fileNo\r\n    for IdxData = 1 : 8\r\n        Name = ['./PRINT-ATTACK/train/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n        Mov = VideoReader(Name);\r\n        NumFrame = Mov.NumberOfFrames;\r\n        TrainFeature = [];\r\n        for IdxFrame = 1 : NumFrame\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n                Feature = [LBP_feature(frame_now, Map_u2_16, Map_u2_8), DoG(frame_now, 0.5, 1)'];\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\n% save DoG&LBP_SVM_PRINT_ATTACK_raw.mat TrainFeatureSet\r\n\r\n%% training\r\n% load DoG&LBP_SVM_PRINT_ATTACK_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 15\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 4\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave DoG&LBP_SVM_PRINT_ATTACK.mat model MinMax\r\n        \r\n\r\n"
  },
  {
    "path": "Matlab/DoG_NUAA_Test.m",
    "content": "% clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUAA/client_test_normalized.txt');\r\nClientTestNormalizedNumber = size(ClientTestNormalizedName, 1);\r\nImposterTestNormalizedName = importdata('./NUAA/imposter_test_normalized.txt');\r\nImposterTestNormalizedNumber = size(ImposterTestNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\nload DoG_SVM_NUAA.mat\r\n\r\n%% DoG feature of client testing data\r\nClientTestFeature = zeros(ClientTestNormalizedNumber, 64*64);\r\nfor i = 1 : ClientTestNormalizedNumber\r\n    ClientTest = imread(['./NUAA/ClientNormalized/' ClientTestNormalizedName{i}]);\r\n    ClientTestFeature(i, :) = DoG(ClientTest, 0.5, 1);\r\n    ClientTestFeature(i, :) = (ClientTestFeature(i, :)-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\nend\r\n\r\n%% DoG feature of imposter testing data\r\nImposterTestFeature = zeros(ImposterTestNormalizedNumber, 64*64);\r\nfor i = 1 : ImposterTestNormalizedNumber\r\n    ImposterTest = imread(['./NUAA/ImposterNormalized/' ImposterTestNormalizedName{i}]);  \r\n    ImposterTestFeature(i, :) = DoG(ImposterTest, 0.5, 1);\r\n    ImposterTestFeature(i, :) = (ImposterTestFeature(i, :)-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\nend\r\n\r\n%% SVM testing\r\n[ClientTestLabel, ClientTestAccuracy, ClientTestValue] = svmpredict(ones(ClientTestNormalizedNumber,1), ClientTestFeature, model);\r\n[ImposterTestLabel, ImposterTestAccuracy, ImposterTestValue] = svmpredict(-ones(ImposterTestNormalizedNumber,1), ImposterTestFeature, model);\r\naccuracy = zeros(601, 3);\r\nfor i=-3:0.01:3\r\n    accuracy(round(i*100+301),:)=[mean(ClientTestValue>=i),mean(ImposterTestValue<i),(sum(ClientTestValue>=i)+sum(ImposterTestValue<i))/(3362+5761)];\r\nend"
  },
  {
    "path": "Matlab/DoG_NUAA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainNormalizedNumber = size(ClientTrainNormalizedName, 1);\r\nImposterTrainNormalizedName = importdata('./NUAA/imposter_train_normalized.txt');\r\nImposterTrainNormalizedNumber = size(ImposterTrainNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\n\r\n%% DoG feature of client training data\r\nClientTrainFeature = zeros(ClientTrainNormalizedNumber, 64*64);\r\nfor i = 1 : ClientTrainNormalizedNumber\r\n    ClientTrain = imread(['./NUAA/ClientNormalized/' ClientTrainNormalizedName{i}]);\r\n    ClientTrainFeature(i, :) = DoG(ClientTrain, 0.5, 1);\r\nend\r\n\r\n%% DoG feature of imposter training data\r\nImposterTrainFeature = zeros(ImposterTrainNormalizedNumber, 64*64);\r\nfor i = 1 : ImposterTrainNormalizedNumber\r\n    ImposterTrain = imread(['./NUAA/ImposterNormalized/' ImposterTrainNormalizedName{i}]);  \r\n    ImposterTrainFeature(i, :) = DoG(ImposterTrain, 0.5, 1);\r\nend\r\n\r\n%% SVM training\r\nMinMax = minmax([ClientTrainFeature;ImposterTrainFeature]')';\r\nClientTrainFeature = (ClientTrainFeature-kron(MinMax(1,:),ones(ClientTrainNormalizedNumber,1)))./(kron(MinMax(2,:),ones(ClientTrainNormalizedNumber,1))-kron(MinMax(1,:),ones(ClientTrainNormalizedNumber,1)));\r\nImposterTrainFeature = (ImposterTrainFeature-kron(MinMax(1,:),ones(ImposterTrainNormalizedNumber,1)))./(kron(MinMax(2,:),ones(ImposterTrainNormalizedNumber,1))-kron(MinMax(1,:),ones(ImposterTrainNormalizedNumber,1)));\r\nTruth = [ones(ClientTrainNormalizedNumber,1);-ones(ImposterTrainNormalizedNumber,1)];\r\nmodel = svmtrain(Truth, [ClientTrainFeature;ImposterTrainFeature], '-t 0');\r\n[ClientTrainLabel, ClientTrainAccuracy, ClientTrainValue] = svmpredict(ones(ClientTrainNormalizedNumber,1), ClientTrainFeature, model);\r\n[ImposterTrainLabel, ImposterTrainAccuracy, ImposterTrainValue] = svmpredict(-ones(ImposterTrainNormalizedNumber,1), ImposterTrainFeature, model);\r\nsave DoG_SVM_NUAA.mat model MinMax"
  },
  {
    "path": "Matlab/DoG_PRINT_ATTACK_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./lbp-0.3.3');\r\n% Map_u2_16 = getmapping(16, 'u2');\r\n% Map_u2_8 = getmapping(8, 'u2');\r\n% load DoG_SVM_PRINT_ATTACK.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\n% fileIndex = {'009', '011', '013', '014', '019', '020', '021', '023', '024', '026', '028', '031', '102', '104', '106', '107', '109', '112', '115', '117'};\r\n% fileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n%     'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\n% fileNo = size(fileIndex, 2);\r\n% flagSet = cell(fileNo, 8);\r\n% for IdxSubject = 1 : fileNo\r\n%     for IdxData = 1 : 8\r\n%         Name = ['./PRINT-ATTACK/test/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         flag = [];\r\n%         for IdxFrame = 1 : NumFrame\r\n%             data = read(Mov, IdxFrame);\r\n%             box = step(detector, data);\r\n%             if size(box, 1) == 1\r\n%                 frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n%                 TestFeature = DoG(frame_now, 0.5, 1)';\r\n%                 TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag,TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save DoG_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\n\r\n%% testing\r\nload DoG_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\nDataCorrectRate = zeros(3, 601);\r\nCorrectRate = zeros(3, 601);\r\nfor Bias = -3:0.01:3;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 20\r\n        for IdxData = 1 : 8\r\n            if IdxData > 4\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+3.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 160; DataCorrectNoReal / 80; DataCorrectNoFake / 80];\r\n    CorrectRate(:, round((Bias+3.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend"
  },
  {
    "path": "Matlab/DoG_PRINT_ATTACK_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% extract feature\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'001', '002', '004', '006', '007', '008', '012', '016', '018', '025', '027', '103', '105', '108', '110'};\r\nfileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n    'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\nfileNo = size(fileIndex, 2);\r\nTrainFeatureSet = cell(fileNo, 8);\r\nfor IdxSubject = 1 : fileNo\r\n    for IdxData = 1 : 8\r\n        Name = ['./PRINT-ATTACK/train/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n        Mov = VideoReader(Name);\r\n        NumFrame = Mov.NumberOfFrames;\r\n        TrainFeature = [];\r\n        for IdxFrame = 1 : NumFrame\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n                Feature = DoG(frame_now, 0.5, 1)';\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\nsave DoG_SVM_PRINT_ATTACK_raw.mat TrainFeatureSet\r\n\r\n%% training\r\nload DoG_SVM_PRINT_ATTACK_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 15\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 4\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave DoG_SVM_PRINT_ATTACK.mat model MinMax\r\n        \r\n\r\n"
  },
  {
    "path": "Matlab/HFD.m",
    "content": "%% High Frequency Descriptor\r\nfunction HFD = HFD(Image, ThresholdFrequency, ImageSize, HighFrequencyRadius)\r\n%% default parameter\r\nif nargin < 4\r\n    if nargin < 3\r\n        if nargin < 2\r\n            ThresholdFrequency = 100;\r\n        end\r\n        ImageSize = 64;\r\n    end\r\n    HighFrequencyRadius = ImageSize / 3;\r\nend\r\n%% fourier spectra\r\nClientTrainFFT = abs(fftshift(fft2(Image)));\r\n%% energy of high frequencies\r\nHighFrequencyEnergy = 0;\r\nfor x = 1 : ImageSize\r\n    for y = 1 : ImageSize\r\n        if ((x-(1+ImageSize)/2)^2+(y-(1+ImageSize)/2)^2)>HighFrequencyRadius^2 && ClientTrainFFT(x,y)>=ThresholdFrequency\r\n            HighFrequencyEnergy = HighFrequencyEnergy + ClientTrainFFT(x,y);\r\n        end\r\n    end\r\nend\r\n%% energy of all frequencies\r\nTotalEnergy = sum(ClientTrainFFT(:)) - sum(Image(:));\r\n%% high frequency descriptor\r\nHFD = HighFrequencyEnergy / TotalEnergy;\r\nend"
  },
  {
    "path": "Matlab/HFDTest.m",
    "content": "% clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUAA/client_test_normalized.txt');\r\nClientTestNormalizedNumber = size(ClientTestNormalizedName, 1);\r\nImposterTestNormalizedName = importdata('./NUAA/imposter_test_normalized.txt');\r\nImposterTestNormalizedNumber = size(ImposterTestNormalizedName, 1);\r\n\r\nfigure;\r\ncolor = 'brgymck';\r\nThresholdFrequency = [0, 10, 20, 50, 100, 200, 500];\r\nfor n = 1 : 7\r\n    %% HFD of client Testing data\r\n    ClientTestHFD = zeros(1, ClientTestNormalizedNumber);\r\n    for i = 1 : ClientTestNormalizedNumber\r\n        ClientTest = imread(['./NUAA/ClientNormalized/' ClientTestNormalizedName{i}]);\r\n        ClientTestHFD(i) = HFD(ClientTest, ThresholdFrequency(n));\r\n    end\r\n\r\n    %% HFD of imposter Testing data\r\n    ImposterTestHFD = zeros(1, ImposterTestNormalizedNumber);\r\n    for i = 1 : ImposterTestNormalizedNumber\r\n        ImposterTest = imread(['./NUAA/ImposterNormalized/' ImposterTestNormalizedName{i}]);  \r\n        ImposterTestHFD(i) = HFD(ImposterTest, ThresholdFrequency(n));\r\n    end\r\n\r\n    %% ROC curve\r\n    Thfd = 0 : 0.001 :0.5;\r\n    sensitivity = [1, size(Thfd, 2)];\r\n    specificity = [1, size(Thfd, 2)];\r\n    for i = 1 : size(Thfd, 2)\r\n        %% sensitivity and specificity\r\n        true_positive = sum(ClientTestHFD >= Thfd(i));\r\n        true_negative = sum(ImposterTestHFD < Thfd(i));\r\n        false_positive = sum(ImposterTestHFD >= Thfd(i));\r\n        false_negative = sum(ClientTestHFD < Thfd(i));\r\n        sensitivity(i) = true_positive/(true_positive+false_negative);\r\n        specificity(i) = true_negative/(false_positive+true_negative);\r\n    end\r\n    hold on\r\n    plot(1-specificity, sensitivity, color(n))\r\nend"
  },
  {
    "path": "Matlab/HFDTrain.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainNormalizedNumber = size(ClientTrainNormalizedName, 1);\r\nImposterTrainNormalizedName = importdata('./NUAA/imposter_train_normalized.txt');\r\nImposterTrainNormalizedNumber = size(ImposterTrainNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\n\r\nfigure;\r\ncolor = 'brgymck';\r\nThresholdFrequency = [0, 10, 20, 50, 100, 200, 500];\r\nfor n = 1 : 7\r\n    %% HFD of client training data\r\n    ClientTrainHFD = zeros(1, ClientTrainNormalizedNumber);\r\n    for i = 1 : ClientTrainNormalizedNumber\r\n        ClientTrain = imread(['./NUAA/ClientNormalized/' ClientTrainNormalizedName{i}]);\r\n        ClientTrainHFD(i) = HFD(ClientTrain, ThresholdFrequency(n));\r\n    end\r\n\r\n    %% HFD of imposter training data\r\n    ImposterTrainHFD = zeros(1, ImposterTrainNormalizedNumber);\r\n    for i = 1 : ImposterTrainNormalizedNumber\r\n        ImposterTrain = imread(['./NUAA/ImposterNormalized/' ImposterTrainNormalizedName{i}]);  \r\n        ImposterTrainHFD(i) = HFD(ImposterTrain, ThresholdFrequency(n));\r\n    end\r\n\r\n    %% ROC curve\r\n    Thfd = 0 : 0.001 :0.5;\r\n    sensitivity = [1, size(Thfd, 2)];\r\n    specificity = [1, size(Thfd, 2)];\r\n    for i = 1 : size(Thfd, 2)\r\n        %% sensitivity and specificity\r\n        true_positive = sum(ClientTrainHFD >= Thfd(i));\r\n        true_negative = sum(ImposterTrainHFD < Thfd(i));\r\n        false_positive = sum(ImposterTrainHFD >= Thfd(i));\r\n        false_negative = sum(ClientTrainHFD < Thfd(i));\r\n        sensitivity(i) = true_positive/(true_positive+false_negative);\r\n        specificity(i) = true_negative/(false_positive+true_negative);\r\n    end\r\n    hold on\r\n    plot(1-specificity, sensitivity, color(n))\r\nend"
  },
  {
    "path": "Matlab/HOOF/README",
    "content": "This code has been provided only for research purposes. If you want to use this for commerical purposes, you will need an appropriate license. Contact the email address below. Although care has been taken to collect this code, we do not assume any liability for any errors or incomplete files. Moreover, we are not responsible for any loss, financial or physical, that  results from any use of whole or part of the provided code in any situation.\n\nIf you decide to use this code and report results in a publication, please refer to the publication:\n\nR. Chaudhry, A. Ravichandran, G. Hager and R. Vidal\nHistograms of Oriented Optical Flow and Binet-Cauchy Kernels on Nonlinear Dynamical Systems for the Recognition of Human Actions\nCVPR 2009\n\n(c) Rizwan Chaudhry - JHU Vision Lab\n\nFor questions and bug reports, contact Rizwan Chaudhry at rizwanch@cis.jhu.edu\n\nUsage:\n\ngradientHistogram.m \n\n  Extract HOOF features from a frame of optical flow\n\nidentifySestemUsingKPCA.m\n\n  Use predefined kernels (in this case the ones provided for histograms) to compute the system parameters for the NLDS using KPCA.\n  computeDistanceModularHistogram\n    MDPA distance between two modular histograms.\n  computeDistanceOrdinalHistogram\n    MDPA distance between two ordinal (regular) histograms.\n  chiSquareDist.m\n    Chi-square distance between two histograms.\n  histKernel.m\n    Histogram intersection kernel\n\ncomputeDistancesBetweenKPCASystems.m\n\n  Compute several all-pair distances between NLDS identified using the appropriate kernels\n\n  findSubspaceAnglesBetweenKPCASystems.m\n    Compute subspace angles between NLDS to compute Martin distance\n  traceKernelKPCASystems.m\n    Compute the Binet-Cauchy trace kernel between NLDS\n\n\n\nFor faster implementation when the kernel used is the square-root representation, use PCA on the square-root representation and use regular metrics for LDS.\n\nfindSubspaceAnglesBetweenKPCASystemsSqrtHist.m\ntraceKernelKPCASystemsSqrtHist"
  },
  {
    "path": "Matlab/HOOF/README~",
    "content": "This code has been provided only for research purposes. If you want to use this for commerical purposes, you will need an appropriate license. Contact the email address below. Although care has been taken to collect this code, we do not assume any liability for any errors or incomplete files. Moreover, we are not responsible for any loss, financial or physical, that  results from any use of whole or part of the provided code in any situation.\n\nIf you decide to use this code and report results in a publication, please refer to the publication:\n\nR. Chaudhry, A. Ravichandran, G. Hager and R. Vidal\nHistograms of Oriented Optical Flow and Binet-Cauchy Kernels on Nonlinear Dynamical Systems for the Recognition of Human Actions\nCVPR 2009\n\n(c) Rizwan Chaudhry - JHU Vision Lab\n\nUsage:\n\ngradientHistogram.m \n\n  Extract HOOF features from a frame of optical flow\n\nidentifySestemUsingKPCA.m\n\n  Use predefined kernels (in this case the ones provided for histograms) to compute the system parameters for the NLDS using KPCA.\n  computeDistanceModularHistogram\n    MDPA distance between two modular histograms.\n  computeDistanceOrdinalHistogram\n    MDPA distance between two ordinal (regular) histograms.\n  chiSquareDist.m\n    Chi-square distance between two histograms.\n  histKernel.m\n    Histogram intersection kernel\n\ncomputeDistancesBetweenKPCASystems.m\n\n  Compute several all-pair distances between NLDS identified using the appropriate kernels\n\n  findSubspaceAnglesBetweenKPCASystems.m\n    Compute subspace angles between NLDS to compute Martin distance\n  traceKernelKPCASystems.m\n    Compute the Binet-Cauchy trace kernel between NLDS\n\n\n\nFor faster implementation when the kernel used is the square-root representation, use PCA on the square-root representation and use regular metrics for LDS.\n\nfindSubspaceAnglesBetweenKPCASystemsSqrtHist.m\ntraceKernelKPCASystemsSqrtHist"
  },
  {
    "path": "Matlab/HOOF/chiSquareDist.m",
    "content": "function distance = chiSquareDist(A)\r\n\r\n% Caclulate Chi Squared for a vector of Histograms\r\n\r\n\r\nL = A;\r\nt = size(L,2);\r\n\r\ndistance = zeros(t,t);\r\n\r\nfor i=1:t\r\n   temp = repmat(L(:,i),1,t);\r\n   G = (temp+L>0);\r\n   distance(i,:) = sum(G.*[(temp - L).^2]./ (G.*[temp+L]+not(G)),1) ;\r\nend"
  },
  {
    "path": "Matlab/HOOF/computeDistanceModularHistogram.m",
    "content": "function dist = computeDistanceModularHistogram(hist1, hist2)\r\n\r\n% dist = computeDistanceModularHistogram(hist1, hist2)\r\n%\r\n% Computes the distance between two modular histograms. Modular histograms are histograms formed from \r\n% modular data such as angles etc\r\n%\r\n% Implementation of the MDPA (Minimum Distance of Pair Assignments) algorithm in\r\n% S. -H. Cha, S.N. Srihari, On measuring the distance between histograms, Pattern Recognition, 35 (2002) 1355-1370\r\n%\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\n% Assuming both histograms have the same number of bins\r\n\r\nhistDiff = hist1-hist2;\r\nprefixsum = cumsum(histDiff);\r\nh_dist = sum(abs(prefixsum));\r\n\r\ndist = h_dist;\r\n\r\ndist_increased = 0;\r\n\r\nwhile dist_increased == 0\r\n    d = min(prefixsum(prefixsum > 0));\r\n    if isempty(d) == 1\r\n        break;\r\n    end\r\n    tempprefixsum = prefixsum - repmat(d,size(prefixsum));\r\n    h_dist2 = sum(abs(tempprefixsum));\r\n    if h_dist2 < h_dist\r\n        h_dist = h_dist2;\r\n        prefixsum = tempprefixsum;\r\n    else\r\n        dist_increased = 1;\r\n    end\r\nend\r\ndist_increased = 0;\r\nwhile dist_increased == 0\r\n    d = max(prefixsum(prefixsum < 0));\r\n    if isempty(d) == 1\r\n        break;\r\n    end\r\n    tempprefixsum = prefixsum - repmat(d,size(prefixsum));\r\n    h_dist2 = sum(abs(tempprefixsum));\r\n    if h_dist2 < h_dist\r\n        h_dist = h_dist2;\r\n        prefixsum = tempprefixsum;\r\n    else\r\n        dist_increased = 1;\r\n    end\r\nend\r\n\r\ndist = h_dist;"
  },
  {
    "path": "Matlab/HOOF/computeDistanceOrdinalHistogram.m",
    "content": "function dist = computeDistanceOrdinalHistogram(hist1, hist2)\r\n% dist = computeDistanceOrdinalHistogram(hist1, hist2)\r\n%\r\n% Computes the distance between two ordinal histograms. Ordinal histograms are histograms formed from \r\n% ordinal data such as linear intervals etc\r\n%\r\n% Implementation of the MDPA (Minimum Distance of Pair Assignments) algorithm in\r\n% S. -H. Cha, S.N. Srihari, On measuring the distance between histograms, Pattern Recognition, 35 (2002) 1355-1370\r\n%\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\n% Assuming both histograms have the same number of bins\r\n\r\nhistDiff = hist1-hist2;\r\nprefixsum = cumsum(histDiff);\r\nh_dist = sum(abs(prefixsum));\r\n\r\ndist = h_dist;"
  },
  {
    "path": "Matlab/HOOF/computeDistancesBetweenKPCASystems.m",
    "content": "function distances = computeDistancesBetweenKPCASystems(sysParams,metric,kernel)\r\n\r\n% function distances =\r\n% computeDistancesBetweenKPCASystems(sysParams,metric,kernel)\r\n%\r\n% Computes the required kernel distance\r\n%\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n%\r\n\r\nkernelName{1} = 'Geodesic';\r\nkernelName{2} = 'MDPA-ordinal';\r\nkernelName{3} = 'ChiSquare';\r\nkernelName{4} = 'HIST';\r\n\r\nmetricName{1} = 'Martin';\r\nmetricName{2} = 'BC-trace';\r\nmetricName{3} = 'BC-init-ind';\r\n\r\nlambda = 0.9; % Parameter for Binet Cauchy kernels\r\n\r\n% Compute all pairwise sequence kernels\r\n%disp('Computing all pairwise sequence kernels');\r\nfor ind_i = 1:length(sysParams)\r\n    for ind_j = 1:ind_i\r\n        Y_12 = double([sysParams{ind_i}.Yoriginal, sysParams{ind_j}.Yoriginal]);\r\n        % Evaluate the kernel on these vectors;\r\n        kernel_12 = zeros(size(Y_12,2),'double');\r\n\r\n        % Evaluate the kernel on these vectors;\r\n\r\n        if strcmp(kernelName{kernel}, 'Geodesic')\r\n            Y_12 = sqrt(Y_12);\r\n            kernel_12 = Y_12'*Y_12;\r\n        elseif strcmp(kernelName{kernel}, 'MDPA-ordinal')\r\n            for i=1:size(Y_12,2)\r\n               for j =1:i-1\r\n                   kernel_12(i,j) = computeDistanceOrdinalHistogram(Y_12(:,i),Y_12(:,j));  % MDPA\r\n               end\r\n            end\r\n            kernel_12 = kernel_12 + kernel_12';\r\n            kernel_12 = exp(-(kernel_12.^2));\r\n        elseif strcmp(kernelName{kernel}, 'ChiSquare')\r\n            kernel_12 = exp(-(chiSquareDist(Y_12).^2));\r\n        elseif strcmp(kernelName{kernel}, 'HIST')\r\n            for i=1:size(Y_12,2)\r\n                for j = 1:i\r\n                    kernel_12(i,j) = histogramKernel(Y_12(:,i),Y_12(:,j));\r\n                end\r\n            end\r\n            kdiag = diag(kernel_12);\r\n            kernel_12 = kernel_12 + kernel_12' - diag(kdiag);\r\n        end\r\n        \r\n        allPairWiseKernels{ind_i,ind_j} = kernel_12;\r\n        \r\n    end\r\nend\r\n\r\ndistances = zeros(length(sysParams),length(sysParams),length(metric));\r\n\r\nfor m = 1:length(metric)\r\n   if strcmp(metricName{metric(m)},'Martin') == 1\r\n       \r\n       %disp('Martin distance');\r\n       \r\n       for ind_i = 1:length(sysParams)\r\n           for ind_j = 1:ind_i\r\n               sysParams1 = sysParams{ind_i};\r\n               sysParams2 = sysParams{ind_j};\r\n               kernel_12 = allPairWiseKernels{ind_i,ind_j};\r\n       \r\n                N1 = size(sysParams1.Yoriginal,2);\r\n                N2 = size(sysParams2.Yoriginal,2);\r\n\r\n                order = min(sysParams1.order,sysParams2.order);\r\n                \r\n%                 alphaPrime1 = sysParams1.alpha;\r\n%                 alphaPrime2 = sysParams2.alpha;\r\n                alphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\n                alphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\n                F_11 = alphaPrime1'*kernel_12(1:N1,1:N1)*alphaPrime1;\r\n                F_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\n                F_21 = alphaPrime2'*kernel_12(N1+1:end,1:N1)*alphaPrime1;\r\n                F_22 = alphaPrime2'*kernel_12(N1+1:end,N1+1:end)*alphaPrime2;\r\n%                 \r\n%                 M_11 = dlyap(sysParams1.A',sysParams1.A,F_11);\r\n%                 M_12 = dlyap(sysParams1.A',sysParams2.A,F_12);\r\n%                 M_21 = dlyap(sysParams2.A',sysParams1.A,F_21);\r\n%                 M_22 = dlyap(sysParams2.A',sysParams2.A,F_22);\r\n% \r\n%                 evals = eig(pinv(M_11)*M_12*pinv(M_22)*M_21);\r\n%\r\n%                 angles = real(acos(sqrt(evals(1:order))));\r\n                \r\n\r\n                Ft = [F_11,F_12;F_21,F_22];                \r\n                At = [sysParams1.A,zeros(order);zeros(order),sysParams2.A];                \r\n                \r\n                M = dlyap(At',Ft);\r\n                evals = eig([zeros(order) pinv(M(1:order,1:order))*M(1:order,order+1:2*order);...\r\n                    pinv(M(order+1:2*order,order+1:2*order))*M(order+1:2*order,1:order) zeros(order)]);\r\n                \r\n                evals = real(evals);\r\n                evals = max(-ones(size(evals)),evals);\r\n                evals = min(ones(size(evals)),evals);\r\n                evals = sort(evals,'descend');\r\n                \r\n                angles = real(acos(evals(1:order)));\r\n                \r\n                distances(ind_i,ind_j,m) = sqrt(-sum(log((cos(angles)).^2)));\r\n                \r\n                distances(ind_j,ind_i,m) = distances(ind_i,ind_j,m);\r\n           end\r\n       end\r\n       \r\n       \r\n       \r\n       \r\n   elseif strcmp(metricName{metric(m)},'BC-trace') == 1\r\n       \r\n       %disp('Binet Cauchy Kernel');       \r\n    \r\n        for ind_i = 1:length(sysParams)\r\n           for ind_j = 1:ind_i\r\n               sysParams1 = sysParams{ind_i};\r\n               sysParams2 = sysParams{ind_j};\r\n               kernel_12 = allPairWiseKernels{ind_i,ind_j};\r\n\r\n               N1 = size(sysParams1.Yoriginal,2);\r\n               N2 = size(sysParams2.Yoriginal,2);\r\n\r\n               alphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\n               alphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\n               F_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\n\r\n               M_12 = dlyap(lambda*sysParams1.A',sysParams2.A,F_12);\r\n               M_12 = real(M_12);\r\n\r\n               % Check for numerical errors due to very small eigenvalues\r\n               % of Q\r\n%                [V1,D1] = eig(sysParams1.Q);\r\n%                if any(diag(D1) <= 0)\r\n%                    diag1 = diag(D1);\r\n%                    diag1(diag1 <= 0) = min(abs(diag1));\r\n%                    D1 = diag(diag1);\r\n%                    sysParams1.Q = V1*D1*V1';\r\n%                end\r\n%                [V2,D2] = eig(sysParams2.Q);\r\n%                if any(diag(D2) <= 0)                   \r\n%                    diag2 = diag(D2);\r\n%                    diag2(diag2 <= 0) = min(abs(diag2));\r\n%                    D2 = diag(diag2);\r\n%                    sysParams2.Q = V2*D2*V2';\r\n%                end\r\n\r\n               % Regularize Qs with 1\r\n               sysParams1.Q = sysParams1.Q + eps*eye(size(sysParams1.Q));\r\n               sysParams2.Q = sysParams2.Q + eps*eye(size(sysParams2.Q));               \r\n               \r\n               B1 = real(chol(sysParams1.Q))';\r\n               B2 = real(chol(sysParams2.Q))';\r\n\r\n               kernel = sysParams1.X(:,1)'*M_12*sysParams2.X(:,1) + lambda/(1-lambda)*trace(B1'*M_12*B2);\r\n\r\n               distances(ind_i,ind_j,m) = kernel;\r\n               distances(ind_j,ind_i,m) = kernel;\r\n           end\r\n        end\r\n\r\n   elseif strcmp(metricName{metric(m)},'BC-init-ind') == 1\r\n       \r\n       %disp('Initial state independent Binet Cauchy Kernel');       \r\n\r\n        for ind_i = 1:length(sysParams)\r\n           for ind_j = 1:ind_i\r\n               sysParams1 = sysParams{ind_i};\r\n               sysParams2 = sysParams{ind_j};\r\n               kernel_12 = allPairWiseKernels{ind_i,ind_j};\r\n\r\n               N1 = size(sysParams1.Yoriginal,2);\r\n               \r\n               N2 = size(sysParams2.Yoriginal,2);\r\n\r\n               alphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\n               alphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\n               F_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\n\r\n               M_12 = dlyap(lambda*sysParams1.A',sysParams2.A,F_12);\r\n               M_12 = real(M_12);\r\n               \r\n               kernel = max(svd(M_12));\r\n\r\n               distances(ind_i,ind_j,m) = kernel;\r\n               distances(ind_j,ind_i,m) = kernel;\r\n           end\r\n        end\r\n        \r\n   end\r\n   \r\nend"
  },
  {
    "path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystems.m",
    "content": "function angles = findSubspaceAnglesBetweenKPCASystems(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesBetweenKPCASystems(sysParams1,sysParams2)\r\n%\r\n% Finds subspace angles between two systems identified using KPCA\r\n%\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_12 = [sysParams1.Yoriginal, sysParams2.Yoriginal];\r\n\r\n% Evaluate the kernel on these vectors;\r\nkernel_12 = zeros(size(Y_12,2));\r\n\r\nfor i=1:length(Y_12)\r\n   for j =1:i-1\r\n      % Choose appropriate kernel here\r\n       kernel_12(i,j) = computeDistanceModularHistogram(Y_12(:,i),Y_12(:,j));  % MDPA\r\n   end\r\nend\r\n\r\nkernel_12 = kernel_12 + kernel_12';\r\n\r\nkernel_12 = exp(-kernel_12.^2);\r\n\r\nN1 = size(sysParams1.Yoriginal,2);\r\nN2 = size(sysParams2.Yoriginal,2);\r\n\r\ne1 = ones(1,N1)';\r\ne2 = ones(1,N2)';\r\n\r\nalphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\nalphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\nF_11 = alphaPrime1'*kernel_12(1:N1,1:N1)*alphaPrime1;\r\nF_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\nF_21 = alphaPrime2'*kernel_12(N1+1:end,1:N1)*alphaPrime1;\r\nF_22 = alphaPrime2'*kernel_12(N1+1:end,N1+1:end)*alphaPrime2;\r\n\r\nM_11 = dlyap(sysParams1.A',sysParams1.A,F_11);\r\nM_12 = dlyap(sysParams1.A',sysParams2.A,F_12);\r\nM_21 = dlyap(sysParams2.A',sysParams1.A,F_21);\r\nM_22 = dlyap(sysParams2.A',sysParams2.A,F_22);\r\n\r\nlambda = eig(pinv(M_11)*M_12*pinv(M_22)*M_21);\r\nlambda = real(lambda);\r\nlambda = max(zeros(size(lambda)),lambda);\r\nlambda = min(ones(size(lambda)),lambda);\r\nlambda = sort(lambda,'descend');\r\n\r\nlambda = sqrt(lambda);\r\n\r\norder = min(sysParams1.order,sysParams2.order);\r\n\r\nangles = real(acos(lambda(1:order)));"
  },
  {
    "path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv",
    "content": "function angles = findSubspaceAnglesBetweenKPCASystemsSqrtHist(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesBetweenKPCASystems(sysParams1,sysParams2)\r\n%\r\n% Finds subspace angles between two systems identified using KPCA\r\n%\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_12 = [sysParams1.Yoriginal, sysParams2.Yoriginal];\r\n\r\n% Evaluate the kernel on these vectors;\r\nY_12 = sqrt(Y_12);\r\nkernel_12 = Y_12'*Y_12;\r\n\r\nN1 = size(sysParams1.Yoriginal,2);\r\nN2 = size(sysParams2.Yoriginal,2);\r\n\r\ne1 = ones(1,N1)';\r\ne2 = ones(1,N2)';\r\n\r\nalphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\nalphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\nF_11 = alphaPrime1'*kernel_12(1:N1,1:N1)*alphaPrime1;\r\nF_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\nF_21 = alphaPrime2'*kernel_12(N1+1:end,1:N1)*alphaPrime1;\r\nF_22 = alphaPrime2'*kernel_12(N1+1:end,N1+1:end)*alphaPrime2;\r\n\r\nM_11 = dlyap(sysParams1.A',sysParams1.A',F_11);\r\nM_12 = dlyap(sysParams1.A',sysParams2.A',F_12);\r\nM_21 = dlyap(sysParams2.A',sysParams1.A',F_21);\r\nM_22 = dlyap(sysParams2.A',sysParams2.A',F_22);\r\n\r\nlambda = eig(pinv(M_11)*M_12*pinv(M_22)*M_21);\r\nlambda = real(lambda);\r\nlambda = max(zeros(size(lambda)),lambda);\r\nlambda = min(ones(size(lambda)),lambda);\r\nlambda = sort(lambda,'descend');\r\n\r\nlambda = sqrt(lambda);\r\n\r\norder = min(sysParams1.order,sysParams2.order);\r\n\r\nangles = real(acos(lambda(1:order)));"
  },
  {
    "path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystemsSqrtHist.m",
    "content": "function angles = findSubspaceAnglesBetweenKPCASystemsSqrtHist(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesBetweenKPCASystems(sysParams1,sysParams2)\r\n%\r\n% Finds subspace angles between two systems identified using KPCA\r\n%\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_12 = [sysParams1.Yoriginal, sysParams2.Yoriginal];\r\n\r\n% Evaluate the kernel on these vectors;\r\nY_12 = sqrt(Y_12);\r\nkernel_12 = Y_12'*Y_12;\r\n\r\nN1 = size(sysParams1.Yoriginal,2);\r\nN2 = size(sysParams2.Yoriginal,2);\r\n\r\ne1 = ones(1,N1)';\r\ne2 = ones(1,N2)';\r\n\r\nalphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\nalphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\nF_11 = alphaPrime1'*kernel_12(1:N1,1:N1)*alphaPrime1;\r\nF_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\nF_21 = alphaPrime2'*kernel_12(N1+1:end,1:N1)*alphaPrime1;\r\nF_22 = alphaPrime2'*kernel_12(N1+1:end,N1+1:end)*alphaPrime2;\r\n\r\nM_11 = dlyap(sysParams1.A',sysParams1.A,F_11);\r\nM_12 = dlyap(sysParams1.A',sysParams2.A,F_12);\r\nM_21 = dlyap(sysParams2.A',sysParams1.A,F_21);\r\nM_22 = dlyap(sysParams2.A',sysParams2.A,F_22);\r\n\r\nlambda = eig(pinv(M_11)*M_12*pinv(M_22)*M_21);\r\nlambda = real(lambda);\r\nlambda = max(zeros(size(lambda)),lambda);\r\nlambda = min(ones(size(lambda)),lambda);\r\nlambda = sort(lambda,'descend');\r\n\r\nlambda = sqrt(lambda);\r\n\r\norder = min(sysParams1.order,sysParams2.order);\r\n\r\nangles = real(acos(lambda(1:order)));"
  },
  {
    "path": "Matlab/HOOF/gradientHistogram.m",
    "content": "function ohog = gradientHistogram(Fx,Fy,binSize)\r\n% Compute HOOF feature\r\n% INPUTS\r\n%   Fx      - X-flow \r\n%   Fy\t    - Y-flow\r\n%   binSize - number of bins used\r\n%\r\n% OUTPUTS\r\n%   ohog    - output histogram of oriented optical flow\r\n%\r\n% EXAMPLE\r\n%\r\n\r\n%% Written by  : Rizwan Chaudhry and Avinash Ravichandran\r\n%% $DATE       : 28-Aug-2008 11:00:58 $\r\n%% $Revision   : 1.00 $\r\n%% Matlab      : 7.4.0.287 (R2007a)\r\n%% FILENAME    : gradientHistogram.m\r\n%\r\n% (c) Rizwan Chaudhry, Avinash Ravichandran - JHU Vision Lab\r\n\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%gradientHistogram.m\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n\r\n\r\nmagnitudeImage   = (Fx.^2 + Fy.^2 ).^0.5;\r\norientationImage =  atan2(Fy,Fx);\r\n\r\ngreaterPiBy2Index = orientationImage > pi/2;\r\nsmallerMinusPiBy2Index = orientationImage < -pi/2;\r\nremainingIndex = orientationImage <=pi/2 & orientationImage >= -pi/2;\r\n\r\ngreaterPiBy2Mat = greaterPiBy2Index.*orientationImage;\r\nsmallerMinusPiBy2Mat = smallerMinusPiBy2Index.*orientationImage;\r\nremainingMat = remainingIndex.*orientationImage;\r\n\r\npiMat = pi*ones(size(orientationImage));\r\n\r\nconvertGreaterPiBy2Mat = greaterPiBy2Index.*piMat - greaterPiBy2Mat;\r\nconvertSmallerMinusPiBy2Mat = smallerMinusPiBy2Index.*(-piMat) - smallerMinusPiBy2Mat;\r\n\r\nnewOrientationImage = convertGreaterPiBy2Mat + remainingMat + convertSmallerMinusPiBy2Mat;\r\n\r\n\r\n% [hog,idx] =\r\n% histc(reshape(orientationImage,1,[]),linspace(-pi,pi,binSize+1) );\r\n[hog,idx] = histc(reshape(newOrientationImage,1,[]),linspace(-pi/2,pi/2,binSize+1) );\r\nvalues = reshape(magnitudeImage,1,[]);\r\n\r\nfor k=1:binSize\r\n    bin(k) = sum(values(find(idx==k)));\r\nend\r\n\r\nohog = bin/sum(bin);\r\n\r\nohog = ohog';\r\n"
  },
  {
    "path": "Matlab/HOOF/histogramKernel.m",
    "content": "function [ output ] = histogramKernel( hist1, hist2 )\n%HISTOGRAMKERNEL find the 'histogram kernel' between time series of\n%histograms\n%  This test code implements a so-called histogram intersection kernel for\n%  histogram time series data by extending the original histogram kernel.\n%\n% Parameters:\n%       hist1:  first normalized to 1 histogram of size d1 bins x N1 samples\n%       hist2:  second normalized to 1 histogram of size d2 bins x N2 samples\n% Outputs:\n%       output: the value of the histogram kernel between two histogram\n%       time series\n%\n% (c) Rizwan Chaudhry - JHU Vision Lab\n\n[d1, N1] = size(hist1);\n[d2, N2] = size(hist2);\n\nif d1 ~= d2\n    error('Number of bins in the histograms must be the same');\nend\n\n% TODO: check for normalization\n\nN = min(N1,N2);\n\noutput = sum(sum(min(hist1(:,1:N), hist2(:,1:N)),1))/N;"
  },
  {
    "path": "Matlab/HOOF/identifySystemUsingKPCA.m",
    "content": "function sysParams = identifySystemUsingKPCA(Yoriginal,kernelMatrix, order)\r\n\r\n% sysParams = identifySystemUsingKPCA(Yoriginal, kernelMatrix, order)\r\n%\r\n% Takes as input the kernel computed on the output trajectory of a sequence\r\n% and computes the relevant system parameters as mentioned in A.B.Chan CVPR\r\n% 07\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nK = double(kernelMatrix);\r\nN = size(kernelMatrix,1);\r\n\r\ne = ones(1,N)';\r\n\r\nKTilde = (eye(N)-e*e'/N)*K*(eye(N)-e*e'/N);\r\n\r\n% remove any numerical inconsistencies by making KTilde symmetric\r\n\r\nKTilde = (KTilde + KTilde')/2;\r\n\r\n[V,D] = eig(KTilde);\r\n\r\nd = real(diag(D))';\r\n\r\n% Format data such that the eigen values and corresponding eigen vectors\r\n% are listed in descending order\r\n\r\nV = V(:,end:-1:1);\r\nd = d(end:-1:1);\r\n\r\nalpha = V./sqrt(repmat(d,size(V,1),1));\r\n\r\nX = alpha'*KTilde;\r\n\r\nX = X(1:order,:);\r\nalpha = alpha(:,1:order);\r\n\r\nA = X(:,2:end)*pinv(X(:,1:end-1));\r\nV = zeros(order,N);\r\nV(:,2:end) = X(:,2:end)-A*X(:,1:end-1);\r\nQ = zeros(size(V,1),size(V,1));\r\nfor i=1:N-1\r\n    Q = Q + V(:,i)*V(:,i)';\r\nend\r\nQ = 1/(N-1)*Q;\r\n\r\n% Y - minimum norm reconstruction\r\n% R\r\n\r\nsysParams.A = A;\r\nsysParams.alpha = alpha;\r\nsysParams.X = X;\r\nsysParams.K = K;\r\nsysParams.KTilde = KTilde;\r\nsysParams.Yoriginal = Yoriginal;\r\nsysParams.Q = Q;\r\nsysParams.order = order;"
  },
  {
    "path": "Matlab/HOOF/traceKernelKPCASystems.m",
    "content": "function kernel = traceKernelKPCASystems(sysParams1, sysParams2, lambda)\r\n\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_12 = [sysParams1.Yoriginal, sysParams2.Yoriginal];\r\n\r\n% Evaluate the kernel on these vectors;\r\nkernel_12 = zeros(size(Y_12,2));\r\n\r\nfor i=1:length(Y_12)\r\n   for j =1:i-1\r\n       % Choose appropriate kernel here\r\n       kernel_12(i,j) = computeDistanceModularHistogram(Y_12(:,i),Y_12(:,j));  % MDPA\r\n   end\r\nend\r\n\r\nkernel_12 = kernel_12 + kernel_12';\r\n\r\nkernel_12 = exp(-kernel_12.^2);\r\n\r\nN1 = size(sysParams1.Yoriginal,2);\r\nN2 = size(sysParams2.Yoriginal,2);\r\n\r\ne1 = ones(1,N1)';\r\ne2 = ones(1,N2)';\r\n\r\nalphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\nalphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\nF_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\n\r\nM_12 = dlyap(lambda*sysParams1.A',sysParams2.A,F_12);\r\nM_12 = real(M_12);\r\n\r\nB1 = real(chol(sysParams1.Q,'lower'));\r\nB2 = real(chol(sysParams2.Q,'lower'));\r\n\r\nkernel = sysParams1.X(:,1)'*M_12*sysParams2.X(:,1) + lambda/(1-lambda)*trace(B1'*M_12*B2);"
  },
  {
    "path": "Matlab/HOOF/traceKernelKPCASystemsSqrtHist.m",
    "content": "function kernel = traceKernelKPCASystemsSqrtHist(sysParams1, sysParams2, lambda)\r\n\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_12 = [sysParams1.Yoriginal, sysParams2.Yoriginal];\r\n\r\n% Evaluate the kernel on these vectors;\r\nY_12 = sqrt(Y_12);\r\nkernel_12 = Y_12'*Y_12;\r\n\r\nN1 = size(sysParams1.Yoriginal,2);\r\nN2 = size(sysParams2.Yoriginal,2);\r\n\r\ne1 = ones(1,N1)';\r\ne2 = ones(1,N2)';\r\n\r\nalphaPrime1 = sysParams1.alpha-1/N1*(repmat(sum(sysParams1.alpha,1),size(sysParams1.alpha,1),1));\r\nalphaPrime2 = sysParams2.alpha-1/N2*(repmat(sum(sysParams2.alpha,1),size(sysParams2.alpha,1),1));\r\n\r\nF_12 = alphaPrime1'*kernel_12(1:N1,N1+1:end)*alphaPrime2;\r\n\r\nM_12 = dlyap(lambda*sysParams1.A',sysParams2.A,F_12);\r\nM_12 = real(M_12);\r\n\r\nB1 = real(chol(sysParams1.Q,'lower'));\r\nB2 = real(chol(sysParams2.Q,'lower'));\r\n\r\nkernel = sysParams1.X(:,1)'*M_12*sysParams2.X(:,1) + lambda/(1-lambda)*trace(B1'*M_12*B2);"
  },
  {
    "path": "Matlab/HOOF.m",
    "content": "function Feature = HOOF(OF, bins, blocks)\r\nFeature = zeros(1, bins * blocks * blocks);\r\n[h, w] = size(OF);\r\nOF(isnan(OF)) = 0;\r\nfor iBlock = 1 : blocks\r\n    for jBlock = 1 : blocks\r\n        Feature(((iBlock - 1) * blocks + jBlock - 1) * bins + 1 : ((iBlock - 1) * blocks + jBlock - 1) * bins + bins) = ...\r\n            gradientHistogram(...\r\n            real(OF(round(1+h*(iBlock-1)/(blocks+1)):round(h*(iBlock+1)/(blocks+1)), round(1+w*(jBlock-1)/(blocks+1)):round(w*(jBlock+1)/(blocks+1)))), ...\r\n            imag(OF(round(1+h*(iBlock-1)/(blocks+1)):round(h*(iBlock+1)/(blocks+1)), round(1+w*(jBlock-1)/(blocks+1)):round(w*(jBlock+1)/(blocks+1)))), ...\r\n            bins)';\r\n    end\r\nend\r\nFeature(isnan(Feature)) = 0;\r\nend"
  },
  {
    "path": "Matlab/HSoptflow.m",
    "content": "function [us,vs] = HSoptflow(Xrgb,n)\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n% Author: Gregory Power gregory.power@wpafb.af.mil\r\n% This MATLAB code shows a Motion Estimation map created by\r\n% using a Horn and Schunck motion estimation technique on two\r\n% consecutive frames.  Input requires.\r\n%     Xrgb(h,w,d,N) where X is a frame sequence of a certain\r\n%                height(h), width (w), depth (d=3 for color), \r\n%                and number of frames (N). \r\n%     n= is the starting frame number which is less than N \r\n%     V= the output variable which is a 2D velocity array\r\n%\r\n% Sample Call: V=HSoptflow(X,3);\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n[h,w,d,N]=size(Xrgb);\r\nif n>N-1\r\n   error(1,'requested file greater than frame number required');\r\nend; \r\n%get two image frames\r\nif d==1\r\n    Xn=double(Xrgb(:,:,1,n));\r\n    Xnp1=double(Xrgb(:,:,1,n+1));\r\nelseif d==3\r\n    Xn=double(Xrgb(:,:,1,n)*0.299+Xrgb(:,:,2,n)*0.587+Xrgb(:,:,3,n)*0.114);\r\n    Xnp1=double(Xrgb(:,:,1,n+1)*0.299+Xrgb(:,:,2,n+1)*0.587+Xrgb(:,:,3,n+1)*0.114);\r\nelse\r\n    error(2,'not an RGB or Monochrome image file');\r\nend;\r\n\r\n%get image size and adjust for border\r\nsize(Xn);\r\nhm5=h-5; wm5=w-5;\r\nz=zeros(h,w); v1=z; v2=z;\r\n\r\n%initialize\r\ndsx2=v1; dsx1=v1; dst=v1;\r\nalpha2=625;\r\nimax=20;\r\n\r\n%Calculate gradients\r\ndst(5:hm5,5:wm5) = ( Xnp1(6:hm5+1,6:wm5+1)-Xn(6:hm5+1,6:wm5+1) + Xnp1(6:hm5+1,5:wm5)-Xn(6:hm5+1,5:wm5)+ Xnp1(5:hm5,6:wm5+1)-Xn(5:hm5,6:wm5+1) +Xnp1(5:hm5,5:wm5)-Xn(5:hm5,5:wm5))/4;\r\ndsx2(5:hm5,5:wm5) = ( Xnp1(6:hm5+1,6:wm5+1)-Xnp1(5:hm5,6:wm5+1) + Xnp1(6:hm5+1,5:wm5)-Xnp1(5:hm5,5:wm5)+ Xn(6:hm5+1,6:wm5+1)-Xn(5:hm5,6:wm5+1) +Xn(6:hm5+1,5:wm5)-Xn(5:hm5,5:wm5))/4;\r\ndsx1(5:hm5,5:wm5) = ( Xnp1(6:hm5+1,6:wm5+1)-Xnp1(6:hm5+1,5:wm5) + Xnp1(5:hm5,6:wm5+1)-Xnp1(5:hm5,5:wm5)+ Xn(6:hm5+1,6:wm5+1)-Xn(6:hm5+1,5:wm5) +Xn(5:hm5,6:wm5+1)-Xn(5:hm5,5:wm5))/4;\r\n\r\nfor i=1:imax\r\n   delta=(dsx1.*v1+dsx2.*v2+dst)./(alpha2+dsx1.^2+dsx2.^2);\r\n   v1=v1-dsx1.*delta;\r\n   v2=v2-dsx2.*delta;\r\nend;\r\nu=z; u(5:hm5,5:wm5)=v1(5:hm5,5:wm5);\r\nv=z; v(5:hm5,5:wm5)=v2(5:hm5,5:wm5);\r\n\r\nxskip=round(h/64);\r\n[hs,ws]=size(u(1:xskip:h,1:xskip:w));\r\nus=zeros(hs,ws); vs=us;\r\n\r\nN=xskip^2;\r\nfor i=1:hs-1\r\n  for j=1:ws-1\r\n     hk=i*xskip-xskip+1;\r\n     hl=i*xskip;\r\n     wk=j*xskip-xskip+1;\r\n     wl=j*xskip;\r\n     us(i,j)=sum(sum(u(hk:hl,wk:wl)))/N;\r\n     vs(i,j)=sum(sum(v(hk:hl,wk:wl)))/N;\r\n   end;\r\nend;\r\n\r\nfigure(1);\r\nquiver(us,vs);\r\ncolormap('default');\r\naxis ij;\r\naxis tight;\r\naxis equal;\r\n\r\nend"
  },
  {
    "path": "Matlab/LBP_CASIA_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./lbp-0.3.3');\r\n% Map_u2_16 = getmapping(16, 'u2');\r\n% Map_u2_8 = getmapping(8, 'u2');\r\n% load LBP_SVM_CASIA.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\n% flagSet = cell(30, 8);\r\n% for IdxSubject = 1 : 30\r\n%     for IdxData = 1 : 8\r\n%         if IdxData <= 8\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n%         else\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n%         end\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         flag = [];\r\n%         for IdxFrame = 1 : NumFrame\r\n%             data = read(Mov, IdxFrame);\r\n%             box = step(detector, data);\r\n%             if size(box, 1) == 1\r\n%                 frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n%                 TestFeature = LBP_feature(frame_now, Map_u2_16, Map_u2_8);\r\n%                 TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag,TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save LBP_SVM_CASIA_testfeature.mat flagSet\r\n\r\n%% testing\r\nload LBP_SVM_CASIA_testfeature.mat flagSet        \r\nDataCorrectRate = zeros(3, 601);\r\nCorrectRate = zeros(3, 601);\r\nfor Bias = -3:0.01:3;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 30\r\n        for IdxData = 1 : 8\r\n            if IdxData <= 2\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+3.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 240; DataCorrectNoReal / 60; DataCorrectNoFake / 180];\r\n    CorrectRate(:, round((Bias+3.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend\r\n\r\n"
  },
  {
    "path": "Matlab/LBP_CASIA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% extract features\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\nTrainFeatureSet = cell(20, 8);\r\nNumFrame = zeros(20, 8);\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        if IdxData <= 8\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n        else\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n        end\r\n        Mov = VideoReader(Name);\r\n        NumFrame(IdxSubject, IdxData) = Mov.NumberOfFrames;\r\n        TrainFeature = [];\r\n        for IdxFrame = 1 : NumFrame(IdxSubject, IdxData)\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n                Feature = LBP_feature(frame_now, Map_u2_16, Map_u2_8);\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\nsave LBP_SVM_CASIA_raw.mat TrainFeatureSet\r\n\r\n%% training\r\nload LBP_SVM_CASIA_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 2\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave LBP_SVM_CASIA.mat model MinMax"
  },
  {
    "path": "Matlab/LBP_NUAA_Test.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUAA/client_test_normalized.txt');\r\nClientTestNormalizedNumber = size(ClientTestNormalizedName, 1);\r\nImposterTestNormalizedName = importdata('./NUAA/imposter_test_normalized.txt');\r\nImposterTestNormalizedNumber = size(ImposterTestNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nload LBP_SVM.mat\r\n\r\n%% mapping\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% LBP feature of client testing data\r\nClientTestFeature = zeros(ClientTestNormalizedNumber, 833);\r\nfor i = 1 : ClientTestNormalizedNumber\r\n    ClientTest = imread(['./NUAA/ClientNormalized/' ClientTestNormalizedName{i}]);\r\n    ClientTestFeature(i, :) = LBP_feature(ClientTest, Map_u2_16, Map_u2_8);\r\n    ClientTestFeature(i, :) = (ClientTestFeature(i, :)-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\nend\r\n\r\n%% LBP feature of imposter testing data\r\nImposterTestFeature = zeros(ImposterTestNormalizedNumber, 833);\r\nfor i = 1 : ImposterTestNormalizedNumber\r\n    ImposterTest = imread(['./NUAA/ImposterNormalized/' ImposterTestNormalizedName{i}]);  \r\n    ImposterTestFeature(i, :) = LBP_feature(ImposterTest, Map_u2_16, Map_u2_8);\r\n    ImposterTestFeature(i, :) = (ImposterTestFeature(i, :)-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\nend\r\n\r\n%% SVM testing\r\n[ClientTestLabel, ClientTestAccuracy, ClientTestValue] = svmpredict(ones(ClientTestNormalizedNumber,1), ClientTestFeature, model);\r\n[ImposterTestLabel, ImposterTestAccuracy, ImposterTestValue] = svmpredict(-ones(ImposterTestNormalizedNumber,1), ImposterTestFeature, model);\r\naccuracy = zeros(601, 3);\r\nfor i=-3:0.01:3\r\n    accuracy(round(i*100+301),:)=[mean(ClientTestValue>=i),mean(ImposterTestValue<i),(sum(ClientTestValue>=i)+sum(ImposterTestValue<i))/(3362+5761)];\r\nend"
  },
  {
    "path": "Matlab/LBP_NUAA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainNormalizedNumber = size(ClientTrainNormalizedName, 1);\r\nImposterTrainNormalizedName = importdata('./NUAA/imposter_train_normalized.txt');\r\nImposterTrainNormalizedNumber = size(ImposterTrainNormalizedName, 1);\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\n\r\n%% mapping\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% LBP feature of client training data\r\nClientTrainFeature = zeros(ClientTrainNormalizedNumber, 833);\r\nfor i = 1 : ClientTrainNormalizedNumber\r\n    ClientTrain = imread(['./NUAA/ClientNormalized/' ClientTrainNormalizedName{i}]);\r\n    ClientTrainFeature(i, :) = LBP_feature(ClientTrain, Map_u2_16, Map_u2_8);\r\nend\r\n\r\n%% LBP feature of imposter training data\r\nImposterTrainFeature = zeros(ImposterTrainNormalizedNumber, 833);\r\nfor i = 1 : ImposterTrainNormalizedNumber\r\n    ImposterTrain = imread(['./NUAA/ImposterNormalized/' ImposterTrainNormalizedName{i}]);  \r\n    ImposterTrainFeature(i, :) = LBP_feature(ImposterTrain, Map_u2_16, Map_u2_8);\r\nend\r\n\r\n%% SVM training\r\nMinMax = minmax([ClientTrainFeature;ImposterTrainFeature]')';\r\nClientTrainFeature = (ClientTrainFeature-kron(MinMax(1,:),ones(ClientTrainNormalizedNumber,1)))./(kron(MinMax(2,:),ones(ClientTrainNormalizedNumber,1))-kron(MinMax(1,:),ones(ClientTrainNormalizedNumber,1)));\r\nImposterTrainFeature = (ImposterTrainFeature-kron(MinMax(1,:),ones(ImposterTrainNormalizedNumber,1)))./(kron(MinMax(2,:),ones(ImposterTrainNormalizedNumber,1))-kron(MinMax(1,:),ones(ImposterTrainNormalizedNumber,1)));\r\nTruth = [ones(ClientTrainNormalizedNumber,1);-ones(ImposterTrainNormalizedNumber,1)];\r\nmodel = svmtrain(Truth, [ClientTrainFeature;ImposterTrainFeature]);\r\n[ClientTrainLabel, ClientTrainAccuracy, ClientTrainValue] = svmpredict(ones(ClientTrainNormalizedNumber,1), ClientTrainFeature, model);\r\n[ImposterTrainLabel, ImposterTrainAccuracy, ImposterTrainValue] = svmpredict(-ones(ImposterTrainNormalizedNumber,1), ImposterTrainFeature, model);\r\nsave LBP_SVM.mat model MinMax"
  },
  {
    "path": "Matlab/LBP_PRINT_ATTACK_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./lbp-0.3.3');\r\n% Map_u2_16 = getmapping(16, 'u2');\r\n% Map_u2_8 = getmapping(8, 'u2');\r\n% load LBP_SVM_PRINT_ATTACK.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\n% fileIndex = {'009', '011', '013', '014', '019', '020', '021', '023', '024', '026', '028', '031', '102', '104', '106', '107', '109', '112', '115', '117'};\r\n% fileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n%     'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\n% fileNo = size(fileIndex, 2);\r\n% flagSet = cell(fileNo, 8);\r\n% for IdxSubject = 1 : fileNo\r\n%     for IdxData = 1 : 8\r\n%         Name = ['./PRINT-ATTACK/test/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         flag = [];\r\n%         for IdxFrame = 1 : NumFrame\r\n%             data = read(Mov, IdxFrame);\r\n%             box = step(detector, data);\r\n%             if size(box, 1) == 1\r\n%                 frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n%                 TestFeature = LBP_feature(frame_now, Map_u2_16, Map_u2_8);\r\n%                 TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag,TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save LBP_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\n\r\n%% testing\r\nload LBP_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\nDataCorrectRate = zeros(3, 601);\r\nCorrectRate = zeros(3, 601);\r\nfor Bias = -3:0.01:3;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 20\r\n        for IdxData = 1 : 8\r\n            if IdxData > 4\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+3.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 160; DataCorrectNoReal / 80; DataCorrectNoFake / 80];\r\n    CorrectRate(:, round((Bias+3.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend"
  },
  {
    "path": "Matlab/LBP_PRINT_ATTACK_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% extract feature\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'001', '002', '004', '006', '007', '008', '012', '016', '018', '025', '027', '103', '105', '108', '110'};\r\nfileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n    'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\nfileNo = size(fileIndex, 2);\r\nTrainFeatureSet = cell(fileNo, 8);\r\nfor IdxSubject = 1 : fileNo\r\n    for IdxData = 1 : 8\r\n        Name = ['./PRINT-ATTACK/train/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n        Mov = VideoReader(Name);\r\n        NumFrame = Mov.NumberOfFrames;\r\n        TrainFeature = [];\r\n        for IdxFrame = 1 : NumFrame\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = rgb2gray(imresize(data(box(2):box(2)+box(4), box(1):box(1)+box(3), :), [64,64]));\r\n                Feature = LBP_feature(frame_now, Map_u2_16, Map_u2_8);\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\nsave LBP_SVM_PRINT_ATTACK_raw.mat TrainFeatureSet\r\n\r\n%% training\r\nload LBP_SVM_PRINT_ATTACK_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 15\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 4\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nMinMax = minmax(TrainFeatureAll')';\r\nTrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave LBP_SVM_PRINT_ATTACK.mat model MinMax\r\n        \r\n\r\n"
  },
  {
    "path": "Matlab/LBP_feature.m",
    "content": "function Y = LBP_feature(X, Map_u2_16, Map_u2_8)\r\n%% histogram\r\nHist_u2_16_2=lbp(X, 2, 16, Map_u2_16,'h');\r\nHist_u2_8_2=lbp(X, 2, 8, Map_u2_8,'h');\r\nHist_u2_8_1_1=lbp(X(1:26,1:26), 1, 8, Map_u2_8,'h');   \r\nHist_u2_8_1_2=lbp(X(1:26,20:45), 1, 8, Map_u2_8,'h'); \r\nHist_u2_8_1_3=lbp(X(1:26,39:64), 1, 8, Map_u2_8,'h'); \r\nHist_u2_8_1_4=lbp(X(20:45,1:26), 1, 8, Map_u2_8,'h');   \r\nHist_u2_8_1_5=lbp(X(20:45,20:45), 1, 8, Map_u2_8,'h'); \r\nHist_u2_8_1_6=lbp(X(20:45,39:64), 1, 8, Map_u2_8,'h'); \r\nHist_u2_8_1_7=lbp(X(39:64,1:26), 1, 8, Map_u2_8,'h');   \r\nHist_u2_8_1_8=lbp(X(39:64,20:45), 1, 8, Map_u2_8,'h'); \r\nHist_u2_8_1_9=lbp(X(39:64,39:64), 1, 8, Map_u2_8,'h'); \r\nY = [Hist_u2_16_2, Hist_u2_8_2, Hist_u2_8_1_1, Hist_u2_8_1_2, Hist_u2_8_1_3, Hist_u2_8_1_4, Hist_u2_8_1_5, Hist_u2_8_1_6, Hist_u2_8_1_7, Hist_u2_8_1_8, Hist_u2_8_1_9];\r\nend"
  },
  {
    "path": "Matlab/NUAA/client_test_normalized.txt",
    "content": "0010\\0010_01_05_03_115.bmp\r\n0010\\0010_01_05_03_121.bmp\r\n0010\\0010_01_05_03_125.bmp\r\n0010\\0010_01_05_03_129.bmp\r\n0010\\0010_01_05_03_131.bmp\r\n0010\\0010_01_05_03_132.bmp\r\n0010\\0010_01_05_03_133.bmp\r\n0010\\0010_01_05_03_135.bmp\r\n0010\\0010_01_05_03_136.bmp\r\n0010\\0010_01_05_03_140.bmp\r\n0010\\0010_01_05_03_141.bmp\r\n0010\\0010_01_05_03_192.bmp\r\n0010\\0010_01_05_03_240.bmp\r\n0010\\0010_01_05_03_241.bmp\r\n0010\\0010_01_05_03_243.bmp\r\n0010\\0010_01_05_03_244.bmp\r\n0010\\0010_01_05_03_247.bmp\r\n0010\\0010_01_05_03_254.bmp\r\n0010\\0010_01_05_03_260.bmp\r\n0010\\0010_01_05_03_265.bmp\r\n0010\\0010_01_05_03_266.bmp\r\n0010\\0010_01_05_03_267.bmp\r\n0010\\0010_01_05_03_268.bmp\r\n0010\\0010_01_05_03_269.bmp\r\n0010\\0010_01_05_03_278.bmp\r\n0010\\0010_01_05_03_281.bmp\r\n0010\\0010_01_05_03_287.bmp\r\n0010\\0010_01_05_03_288.bmp\r\n0010\\0010_01_05_03_290.bmp\r\n0010\\0010_01_05_03_30.bmp\r\n0010\\0010_01_05_03_304.bmp\r\n0010\\0010_01_05_03_306.bmp\r\n0010\\0010_01_05_03_308.bmp\r\n0010\\0010_01_05_03_31.bmp\r\n0010\\0010_01_05_03_311.bmp\r\n0010\\0010_01_05_03_314.bmp\r\n0010\\0010_01_05_03_319.bmp\r\n0010\\0010_01_05_03_321.bmp\r\n0010\\0010_01_05_03_322.bmp\r\n0010\\0010_01_05_03_323.bmp\r\n0010\\0010_01_05_03_324.bmp\r\n0010\\0010_01_05_03_325.bmp\r\n0010\\0010_01_05_03_326.bmp\r\n0010\\0010_01_05_03_330.bmp\r\n0010\\0010_01_05_03_332.bmp\r\n0010\\0010_01_05_03_333.bmp\r\n0010\\0010_01_05_03_334.bmp\r\n0010\\0010_01_05_03_336.bmp\r\n0010\\0010_01_05_03_338.bmp\r\n0010\\0010_01_05_03_341.bmp\r\n0010\\0010_01_05_03_342.bmp\r\n0010\\0010_01_05_03_344.bmp\r\n0010\\0010_01_05_03_35.bmp\r\n0010\\0010_01_05_03_354.bmp\r\n0010\\0010_01_05_03_358.bmp\r\n0010\\0010_01_05_03_359.bmp\r\n0010\\0010_01_05_03_360.bmp\r\n0010\\0010_01_05_03_363.bmp\r\n0010\\0010_01_05_03_394.bmp\r\n0010\\0010_01_05_03_404.bmp\r\n0010\\0010_01_05_03_408.bmp\r\n0010\\0010_01_05_03_41.bmp\r\n0010\\0010_01_05_03_410.bmp\r\n0010\\0010_01_05_03_418.bmp\r\n0010\\0010_01_05_03_445.bmp\r\n0010\\0010_01_05_03_450.bmp\r\n0010\\0010_01_05_03_454.bmp\r\n0010\\0010_01_05_03_464.bmp\r\n0010\\0010_01_05_03_465.bmp\r\n0010\\0010_01_05_03_466.bmp\r\n0010\\0010_01_05_03_468.bmp\r\n0010\\0010_01_05_03_471.bmp\r\n0010\\0010_01_05_03_474.bmp\r\n0010\\0010_01_05_03_484.bmp\r\n0010\\0010_01_05_03_55.bmp\r\n0010\\0010_01_05_03_56.bmp\r\n0015\\0015_01_05_03_108.bmp\r\n0015\\0015_01_05_03_113.bmp\r\n0015\\0015_01_05_03_114.bmp\r\n0015\\0015_01_05_03_118.bmp\r\n0015\\0015_01_05_03_119.bmp\r\n0015\\0015_01_05_03_120.bmp\r\n0015\\0015_01_05_03_121.bmp\r\n0015\\0015_01_05_03_124.bmp\r\n0015\\0015_01_05_03_125.bmp\r\n0015\\0015_01_05_03_127.bmp\r\n0015\\0015_01_05_03_128.bmp\r\n0015\\0015_01_05_03_129.bmp\r\n0015\\0015_01_05_03_130.bmp\r\n0015\\0015_01_05_03_131.bmp\r\n0015\\0015_01_05_03_132.bmp\r\n0015\\0015_01_05_03_136.bmp\r\n0015\\0015_01_05_03_137.bmp\r\n0015\\0015_01_05_03_138.bmp\r\n0015\\0015_01_05_03_141.bmp\r\n0015\\0015_01_05_03_142.bmp\r\n0015\\0015_01_05_03_143.bmp\r\n0015\\0015_01_05_03_144.bmp\r\n0015\\0015_01_05_03_146.bmp\r\n0015\\0015_01_05_03_15.bmp\r\n0015\\0015_01_05_03_150.bmp\r\n0015\\0015_01_05_03_151.bmp\r\n0015\\0015_01_05_03_154.bmp\r\n0015\\0015_01_05_03_155.bmp\r\n0015\\0015_01_05_03_156.bmp\r\n0015\\0015_01_05_03_157.bmp\r\n0015\\0015_01_05_03_158.bmp\r\n0015\\0015_01_05_03_159.bmp\r\n0015\\0015_01_05_03_160.bmp\r\n0015\\0015_01_05_03_161.bmp\r\n0015\\0015_01_05_03_166.bmp\r\n0015\\0015_01_05_03_167.bmp\r\n0015\\0015_01_05_03_171.bmp\r\n0015\\0015_01_05_03_172.bmp\r\n0015\\0015_01_05_03_174.bmp\r\n0015\\0015_01_05_03_176.bmp\r\n0015\\0015_01_05_03_177.bmp\r\n0015\\0015_01_05_03_181.bmp\r\n0015\\0015_01_05_03_187.bmp\r\n0015\\0015_01_05_03_188.bmp\r\n0015\\0015_01_05_03_189.bmp\r\n0015\\0015_01_05_03_19.bmp\r\n0015\\0015_01_05_03_192.bmp\r\n0015\\0015_01_05_03_195.bmp\r\n0015\\0015_01_05_03_196.bmp\r\n0015\\0015_01_05_03_197.bmp\r\n0015\\0015_01_05_03_198.bmp\r\n0015\\0015_01_05_03_2.bmp\r\n0015\\0015_01_05_03_203.bmp\r\n0015\\0015_01_05_03_211.bmp\r\n0015\\0015_01_05_03_213.bmp\r\n0015\\0015_01_05_03_215.bmp\r\n0015\\0015_01_05_03_216.bmp\r\n0015\\0015_01_05_03_217.bmp\r\n0015\\0015_01_05_03_22.bmp\r\n0015\\0015_01_05_03_252.bmp\r\n0015\\0015_01_05_03_26.bmp\r\n0015\\0015_01_05_03_260.bmp\r\n0015\\0015_01_05_03_261.bmp\r\n0015\\0015_01_05_03_263.bmp\r\n0015\\0015_01_05_03_264.bmp\r\n0015\\0015_01_05_03_265.bmp\r\n0015\\0015_01_05_03_266.bmp\r\n0015\\0015_01_05_03_267.bmp\r\n0015\\0015_01_05_03_27.bmp\r\n0015\\0015_01_05_03_276.bmp\r\n0015\\0015_01_05_03_277.bmp\r\n0015\\0015_01_05_03_28.bmp\r\n0015\\0015_01_05_03_291.bmp\r\n0015\\0015_01_05_03_294.bmp\r\n0015\\0015_01_05_03_3.bmp\r\n0015\\0015_01_05_03_301.bmp\r\n0015\\0015_01_05_03_302.bmp\r\n0015\\0015_01_05_03_303.bmp\r\n0015\\0015_01_05_03_315.bmp\r\n0015\\0015_01_05_03_316.bmp\r\n0015\\0015_01_05_03_319.bmp\r\n0015\\0015_01_05_03_33.bmp\r\n0015\\0015_01_05_03_331.bmp\r\n0015\\0015_01_05_03_332.bmp\r\n0015\\0015_01_05_03_336.bmp\r\n0015\\0015_01_05_03_338.bmp\r\n0015\\0015_01_05_03_339.bmp\r\n0015\\0015_01_05_03_35.bmp\r\n0015\\0015_01_05_03_36.bmp\r\n0015\\0015_01_05_03_361.bmp\r\n0015\\0015_01_05_03_363.bmp\r\n0015\\0015_01_05_03_364.bmp\r\n0015\\0015_01_05_03_365.bmp\r\n0015\\0015_01_05_03_366.bmp\r\n0015\\0015_01_05_03_379.bmp\r\n0015\\0015_01_05_03_380.bmp\r\n0015\\0015_01_05_03_383.bmp\r\n0015\\0015_01_05_03_39.bmp\r\n0015\\0015_01_05_03_390.bmp\r\n0015\\0015_01_05_03_397.bmp\r\n0015\\0015_01_05_03_40.bmp\r\n0015\\0015_01_05_03_400.bmp\r\n0015\\0015_01_05_03_403.bmp\r\n0015\\0015_01_05_03_404.bmp\r\n0015\\0015_01_05_03_407.bmp\r\n0015\\0015_01_05_03_408.bmp\r\n0015\\0015_01_05_03_410.bmp\r\n0015\\0015_01_05_03_437.bmp\r\n0015\\0015_01_05_03_438.bmp\r\n0015\\0015_01_05_03_439.bmp\r\n0015\\0015_01_05_03_478.bmp\r\n0015\\0015_01_05_03_482.bmp\r\n0015\\0015_01_05_03_485.bmp\r\n0015\\0015_01_05_03_486.bmp\r\n0015\\0015_01_05_03_499.bmp\r\n0015\\0015_01_05_03_53.bmp\r\n0015\\0015_01_05_03_92.bmp\r\n0015\\0015_01_05_03_93.bmp\r\n0007\\0007_01_05_03_10.bmp\r\n0007\\0007_01_05_03_100.bmp\r\n0007\\0007_01_05_03_101.bmp\r\n0007\\0007_01_05_03_103.bmp\r\n0007\\0007_01_05_03_104.bmp\r\n0007\\0007_01_05_03_105.bmp\r\n0007\\0007_01_05_03_106.bmp\r\n0007\\0007_01_05_03_107.bmp\r\n0007\\0007_01_05_03_108.bmp\r\n0007\\0007_01_05_03_109.bmp\r\n0007\\0007_01_05_03_11.bmp\r\n0007\\0007_01_05_03_110.bmp\r\n0007\\0007_01_05_03_111.bmp\r\n0007\\0007_01_05_03_112.bmp\r\n0007\\0007_01_05_03_113.bmp\r\n0007\\0007_01_05_03_114.bmp\r\n0007\\0007_01_05_03_115.bmp\r\n0007\\0007_01_05_03_116.bmp\r\n0007\\0007_01_05_03_117.bmp\r\n0007\\0007_01_05_03_118.bmp\r\n0007\\0007_01_05_03_12.bmp\r\n0007\\0007_01_05_03_125.bmp\r\n0007\\0007_01_05_03_126.bmp\r\n0007\\0007_01_05_03_13.bmp\r\n0007\\0007_01_05_03_130.bmp\r\n0007\\0007_01_05_03_131.bmp\r\n0007\\0007_01_05_03_132.bmp\r\n0007\\0007_01_05_03_133.bmp\r\n0007\\0007_01_05_03_134.bmp\r\n0007\\0007_01_05_03_135.bmp\r\n0007\\0007_01_05_03_137.bmp\r\n0007\\0007_01_05_03_138.bmp\r\n0007\\0007_01_05_03_139.bmp\r\n0007\\0007_01_05_03_14.bmp\r\n0007\\0007_01_05_03_141.bmp\r\n0007\\0007_01_05_03_142.bmp\r\n0007\\0007_01_05_03_143.bmp\r\n0007\\0007_01_05_03_144.bmp\r\n0007\\0007_01_05_03_145.bmp\r\n0007\\0007_01_05_03_146.bmp\r\n0007\\0007_01_05_03_147.bmp\r\n0007\\0007_01_05_03_148.bmp\r\n0007\\0007_01_05_03_149.bmp\r\n0007\\0007_01_05_03_15.bmp\r\n0007\\0007_01_05_03_150.bmp\r\n0007\\0007_01_05_03_151.bmp\r\n0007\\0007_01_05_03_152.bmp\r\n0007\\0007_01_05_03_153.bmp\r\n0007\\0007_01_05_03_154.bmp\r\n0007\\0007_01_05_03_155.bmp\r\n0007\\0007_01_05_03_156.bmp\r\n0007\\0007_01_05_03_157.bmp\r\n0007\\0007_01_05_03_158.bmp\r\n0007\\0007_01_05_03_159.bmp\r\n0007\\0007_01_05_03_16.bmp\r\n0007\\0007_01_05_03_160.bmp\r\n0007\\0007_01_05_03_161.bmp\r\n0007\\0007_01_05_03_162.bmp\r\n0007\\0007_01_05_03_163.bmp\r\n0007\\0007_01_05_03_164.bmp\r\n0007\\0007_01_05_03_165.bmp\r\n0007\\0007_01_05_03_166.bmp\r\n0007\\0007_01_05_03_167.bmp\r\n0007\\0007_01_05_03_168.bmp\r\n0007\\0007_01_05_03_169.bmp\r\n0007\\0007_01_05_03_17.bmp\r\n0007\\0007_01_05_03_170.bmp\r\n0007\\0007_01_05_03_171.bmp\r\n0007\\0007_01_05_03_172.bmp\r\n0007\\0007_01_05_03_174.bmp\r\n0007\\0007_01_05_03_175.bmp\r\n0007\\0007_01_05_03_176.bmp\r\n0007\\0007_01_05_03_177.bmp\r\n0007\\0007_01_05_03_178.bmp\r\n0007\\0007_01_05_03_179.bmp\r\n0007\\0007_01_05_03_18.bmp\r\n0007\\0007_01_05_03_180.bmp\r\n0007\\0007_01_05_03_181.bmp\r\n0007\\0007_01_05_03_182.bmp\r\n0007\\0007_01_05_03_183.bmp\r\n0007\\0007_01_05_03_184.bmp\r\n0007\\0007_01_05_03_185.bmp\r\n0007\\0007_01_05_03_186.bmp\r\n0007\\0007_01_05_03_187.bmp\r\n0007\\0007_01_05_03_188.bmp\r\n0007\\0007_01_05_03_189.bmp\r\n0007\\0007_01_05_03_19.bmp\r\n0007\\0007_01_05_03_190.bmp\r\n0007\\0007_01_05_03_191.bmp\r\n0007\\0007_01_05_03_194.bmp\r\n0007\\0007_01_05_03_195.bmp\r\n0007\\0007_01_05_03_196.bmp\r\n0007\\0007_01_05_03_197.bmp\r\n0007\\0007_01_05_03_199.bmp\r\n0007\\0007_01_05_03_20.bmp\r\n0007\\0007_01_05_03_200.bmp\r\n0007\\0007_01_05_03_201.bmp\r\n0007\\0007_01_05_03_202.bmp\r\n0007\\0007_01_05_03_203.bmp\r\n0007\\0007_01_05_03_204.bmp\r\n0007\\0007_01_05_03_205.bmp\r\n0007\\0007_01_05_03_206.bmp\r\n0007\\0007_01_05_03_207.bmp\r\n0007\\0007_01_05_03_208.bmp\r\n0007\\0007_01_05_03_209.bmp\r\n0007\\0007_01_05_03_212.bmp\r\n0007\\0007_01_05_03_213.bmp\r\n0007\\0007_01_05_03_214.bmp\r\n0007\\0007_01_05_03_215.bmp\r\n0007\\0007_01_05_03_216.bmp\r\n0007\\0007_01_05_03_217.bmp\r\n0007\\0007_01_05_03_218.bmp\r\n0007\\0007_01_05_03_219.bmp\r\n0007\\0007_01_05_03_22.bmp\r\n0007\\0007_01_05_03_220.bmp\r\n0007\\0007_01_05_03_221.bmp\r\n0007\\0007_01_05_03_222.bmp\r\n0007\\0007_01_05_03_223.bmp\r\n0007\\0007_01_05_03_224.bmp\r\n0007\\0007_01_05_03_225.bmp\r\n0007\\0007_01_05_03_226.bmp\r\n0007\\0007_01_05_03_227.bmp\r\n0007\\0007_01_05_03_228.bmp\r\n0007\\0007_01_05_03_229.bmp\r\n0007\\0007_01_05_03_23.bmp\r\n0007\\0007_01_05_03_230.bmp\r\n0007\\0007_01_05_03_231.bmp\r\n0007\\0007_01_05_03_232.bmp\r\n0007\\0007_01_05_03_233.bmp\r\n0007\\0007_01_05_03_234.bmp\r\n0007\\0007_01_05_03_235.bmp\r\n0007\\0007_01_05_03_236.bmp\r\n0007\\0007_01_05_03_237.bmp\r\n0007\\0007_01_05_03_238.bmp\r\n0007\\0007_01_05_03_239.bmp\r\n0007\\0007_01_05_03_24.bmp\r\n0007\\0007_01_05_03_240.bmp\r\n0007\\0007_01_05_03_241.bmp\r\n0007\\0007_01_05_03_242.bmp\r\n0007\\0007_01_05_03_243.bmp\r\n0007\\0007_01_05_03_244.bmp\r\n0007\\0007_01_05_03_245.bmp\r\n0007\\0007_01_05_03_246.bmp\r\n0007\\0007_01_05_03_247.bmp\r\n0007\\0007_01_05_03_248.bmp\r\n0007\\0007_01_05_03_249.bmp\r\n0007\\0007_01_05_03_25.bmp\r\n0007\\0007_01_05_03_250.bmp\r\n0007\\0007_01_05_03_251.bmp\r\n0007\\0007_01_05_03_252.bmp\r\n0007\\0007_01_05_03_253.bmp\r\n0007\\0007_01_05_03_254.bmp\r\n0007\\0007_01_05_03_255.bmp\r\n0007\\0007_01_05_03_256.bmp\r\n0007\\0007_01_05_03_257.bmp\r\n0007\\0007_01_05_03_258.bmp\r\n0007\\0007_01_05_03_259.bmp\r\n0007\\0007_01_05_03_26.bmp\r\n0007\\0007_01_05_03_263.bmp\r\n0007\\0007_01_05_03_264.bmp\r\n0007\\0007_01_05_03_265.bmp\r\n0007\\0007_01_05_03_267.bmp\r\n0007\\0007_01_05_03_268.bmp\r\n0007\\0007_01_05_03_269.bmp\r\n0007\\0007_01_05_03_27.bmp\r\n0007\\0007_01_05_03_270.bmp\r\n0007\\0007_01_05_03_272.bmp\r\n0007\\0007_01_05_03_273.bmp\r\n0007\\0007_01_05_03_274.bmp\r\n0007\\0007_01_05_03_275.bmp\r\n0007\\0007_01_05_03_276.bmp\r\n0007\\0007_01_05_03_277.bmp\r\n0007\\0007_01_05_03_278.bmp\r\n0007\\0007_01_05_03_280.bmp\r\n0007\\0007_01_05_03_281.bmp\r\n0007\\0007_01_05_03_282.bmp\r\n0007\\0007_01_05_03_283.bmp\r\n0007\\0007_01_05_03_284.bmp\r\n0007\\0007_01_05_03_285.bmp\r\n0007\\0007_01_05_03_286.bmp\r\n0007\\0007_01_05_03_287.bmp\r\n0007\\0007_01_05_03_288.bmp\r\n0007\\0007_01_05_03_289.bmp\r\n0007\\0007_01_05_03_29.bmp\r\n0007\\0007_01_05_03_290.bmp\r\n0007\\0007_01_05_03_291.bmp\r\n0007\\0007_01_05_03_292.bmp\r\n0007\\0007_01_05_03_293.bmp\r\n0007\\0007_01_05_03_294.bmp\r\n0007\\0007_01_05_03_295.bmp\r\n0007\\0007_01_05_03_296.bmp\r\n0007\\0007_01_05_03_297.bmp\r\n0007\\0007_01_05_03_298.bmp\r\n0007\\0007_01_05_03_299.bmp\r\n0007\\0007_01_05_03_30.bmp\r\n0007\\0007_01_05_03_300.bmp\r\n0007\\0007_01_05_03_301.bmp\r\n0007\\0007_01_05_03_302.bmp\r\n0007\\0007_01_05_03_303.bmp\r\n0007\\0007_01_05_03_304.bmp\r\n0007\\0007_01_05_03_305.bmp\r\n0007\\0007_01_05_03_307.bmp\r\n0007\\0007_01_05_03_309.bmp\r\n0007\\0007_01_05_03_31.bmp\r\n0007\\0007_01_05_03_312.bmp\r\n0007\\0007_01_05_03_314.bmp\r\n0007\\0007_01_05_03_315.bmp\r\n0007\\0007_01_05_03_317.bmp\r\n0007\\0007_01_05_03_318.bmp\r\n0007\\0007_01_05_03_32.bmp\r\n0007\\0007_01_05_03_320.bmp\r\n0007\\0007_01_05_03_321.bmp\r\n0007\\0007_01_05_03_322.bmp\r\n0007\\0007_01_05_03_323.bmp\r\n0007\\0007_01_05_03_325.bmp\r\n0007\\0007_01_05_03_326.bmp\r\n0007\\0007_01_05_03_327.bmp\r\n0007\\0007_01_05_03_328.bmp\r\n0007\\0007_01_05_03_329.bmp\r\n0007\\0007_01_05_03_33.bmp\r\n0007\\0007_01_05_03_330.bmp\r\n0007\\0007_01_05_03_331.bmp\r\n0007\\0007_01_05_03_332.bmp\r\n0007\\0007_01_05_03_333.bmp\r\n0007\\0007_01_05_03_334.bmp\r\n0007\\0007_01_05_03_338.bmp\r\n0007\\0007_01_05_03_339.bmp\r\n0007\\0007_01_05_03_34.bmp\r\n0007\\0007_01_05_03_340.bmp\r\n0007\\0007_01_05_03_341.bmp\r\n0007\\0007_01_05_03_342.bmp\r\n0007\\0007_01_05_03_343.bmp\r\n0007\\0007_01_05_03_346.bmp\r\n0007\\0007_01_05_03_347.bmp\r\n0007\\0007_01_05_03_349.bmp\r\n0007\\0007_01_05_03_35.bmp\r\n0007\\0007_01_05_03_350.bmp\r\n0007\\0007_01_05_03_351.bmp\r\n0007\\0007_01_05_03_353.bmp\r\n0007\\0007_01_05_03_356.bmp\r\n0007\\0007_01_05_03_36.bmp\r\n0007\\0007_01_05_03_361.bmp\r\n0007\\0007_01_05_03_362.bmp\r\n0007\\0007_01_05_03_363.bmp\r\n0007\\0007_01_05_03_364.bmp\r\n0007\\0007_01_05_03_365.bmp\r\n0007\\0007_01_05_03_366.bmp\r\n0007\\0007_01_05_03_367.bmp\r\n0007\\0007_01_05_03_368.bmp\r\n0007\\0007_01_05_03_369.bmp\r\n0007\\0007_01_05_03_37.bmp\r\n0007\\0007_01_05_03_370.bmp\r\n0007\\0007_01_05_03_371.bmp\r\n0007\\0007_01_05_03_373.bmp\r\n0007\\0007_01_05_03_374.bmp\r\n0007\\0007_01_05_03_375.bmp\r\n0007\\0007_01_05_03_376.bmp\r\n0007\\0007_01_05_03_377.bmp\r\n0007\\0007_01_05_03_378.bmp\r\n0007\\0007_01_05_03_379.bmp\r\n0007\\0007_01_05_03_38.bmp\r\n0007\\0007_01_05_03_380.bmp\r\n0007\\0007_01_05_03_381.bmp\r\n0007\\0007_01_05_03_382.bmp\r\n0007\\0007_01_05_03_383.bmp\r\n0007\\0007_01_05_03_384.bmp\r\n0007\\0007_01_05_03_385.bmp\r\n0007\\0007_01_05_03_386.bmp\r\n0007\\0007_01_05_03_387.bmp\r\n0007\\0007_01_05_03_388.bmp\r\n0007\\0007_01_05_03_389.bmp\r\n0007\\0007_01_05_03_39.bmp\r\n0007\\0007_01_05_03_390.bmp\r\n0007\\0007_01_05_03_391.bmp\r\n0007\\0007_01_05_03_392.bmp\r\n0007\\0007_01_05_03_393.bmp\r\n0007\\0007_01_05_03_394.bmp\r\n0007\\0007_01_05_03_395.bmp\r\n0007\\0007_01_05_03_396.bmp\r\n0007\\0007_01_05_03_397.bmp\r\n0007\\0007_01_05_03_398.bmp\r\n0007\\0007_01_05_03_399.bmp\r\n0007\\0007_01_05_03_40.bmp\r\n0007\\0007_01_05_03_400.bmp\r\n0007\\0007_01_05_03_401.bmp\r\n0007\\0007_01_05_03_402.bmp\r\n0007\\0007_01_05_03_403.bmp\r\n0007\\0007_01_05_03_404.bmp\r\n0007\\0007_01_05_03_405.bmp\r\n0007\\0007_01_05_03_406.bmp\r\n0007\\0007_01_05_03_407.bmp\r\n0007\\0007_01_05_03_408.bmp\r\n0007\\0007_01_05_03_409.bmp\r\n0007\\0007_01_05_03_41.bmp\r\n0007\\0007_01_05_03_410.bmp\r\n0007\\0007_01_05_03_411.bmp\r\n0007\\0007_01_05_03_412.bmp\r\n0007\\0007_01_05_03_413.bmp\r\n0007\\0007_01_05_03_414.bmp\r\n0007\\0007_01_05_03_415.bmp\r\n0007\\0007_01_05_03_416.bmp\r\n0007\\0007_01_05_03_42.bmp\r\n0007\\0007_01_05_03_420.bmp\r\n0007\\0007_01_05_03_421.bmp\r\n0007\\0007_01_05_03_422.bmp\r\n0007\\0007_01_05_03_423.bmp\r\n0007\\0007_01_05_03_424.bmp\r\n0007\\0007_01_05_03_425.bmp\r\n0007\\0007_01_05_03_426.bmp\r\n0007\\0007_01_05_03_427.bmp\r\n0007\\0007_01_05_03_428.bmp\r\n0007\\0007_01_05_03_429.bmp\r\n0007\\0007_01_05_03_43.bmp\r\n0007\\0007_01_05_03_430.bmp\r\n0007\\0007_01_05_03_431.bmp\r\n0007\\0007_01_05_03_432.bmp\r\n0007\\0007_01_05_03_433.bmp\r\n0007\\0007_01_05_03_434.bmp\r\n0007\\0007_01_05_03_435.bmp\r\n0007\\0007_01_05_03_436.bmp\r\n0007\\0007_01_05_03_437.bmp\r\n0007\\0007_01_05_03_438.bmp\r\n0007\\0007_01_05_03_439.bmp\r\n0007\\0007_01_05_03_44.bmp\r\n0007\\0007_01_05_03_440.bmp\r\n0007\\0007_01_05_03_441.bmp\r\n0007\\0007_01_05_03_442.bmp\r\n0007\\0007_01_05_03_443.bmp\r\n0007\\0007_01_05_03_444.bmp\r\n0007\\0007_01_05_03_445.bmp\r\n0007\\0007_01_05_03_446.bmp\r\n0007\\0007_01_05_03_447.bmp\r\n0007\\0007_01_05_03_448.bmp\r\n0007\\0007_01_05_03_449.bmp\r\n0007\\0007_01_05_03_45.bmp\r\n0007\\0007_01_05_03_450.bmp\r\n0007\\0007_01_05_03_451.bmp\r\n0007\\0007_01_05_03_452.bmp\r\n0007\\0007_01_05_03_453.bmp\r\n0007\\0007_01_05_03_454.bmp\r\n0007\\0007_01_05_03_455.bmp\r\n0007\\0007_01_05_03_456.bmp\r\n0007\\0007_01_05_03_457.bmp\r\n0007\\0007_01_05_03_459.bmp\r\n0007\\0007_01_05_03_46.bmp\r\n0007\\0007_01_05_03_460.bmp\r\n0007\\0007_01_05_03_462.bmp\r\n0007\\0007_01_05_03_463.bmp\r\n0007\\0007_01_05_03_464.bmp\r\n0007\\0007_01_05_03_465.bmp\r\n0007\\0007_01_05_03_466.bmp\r\n0007\\0007_01_05_03_467.bmp\r\n0007\\0007_01_05_03_468.bmp\r\n0007\\0007_01_05_03_469.bmp\r\n0007\\0007_01_05_03_47.bmp\r\n0007\\0007_01_05_03_470.bmp\r\n0007\\0007_01_05_03_471.bmp\r\n0007\\0007_01_05_03_472.bmp\r\n0007\\0007_01_05_03_473.bmp\r\n0007\\0007_01_05_03_474.bmp\r\n0007\\0007_01_05_03_475.bmp\r\n0007\\0007_01_05_03_476.bmp\r\n0007\\0007_01_05_03_477.bmp\r\n0007\\0007_01_05_03_479.bmp\r\n0007\\0007_01_05_03_48.bmp\r\n0007\\0007_01_05_03_481.bmp\r\n0007\\0007_01_05_03_482.bmp\r\n0007\\0007_01_05_03_483.bmp\r\n0007\\0007_01_05_03_484.bmp\r\n0007\\0007_01_05_03_485.bmp\r\n0007\\0007_01_05_03_486.bmp\r\n0007\\0007_01_05_03_487.bmp\r\n0007\\0007_01_05_03_488.bmp\r\n0007\\0007_01_05_03_489.bmp\r\n0007\\0007_01_05_03_49.bmp\r\n0007\\0007_01_05_03_490.bmp\r\n0007\\0007_01_05_03_492.bmp\r\n0007\\0007_01_05_03_493.bmp\r\n0007\\0007_01_05_03_494.bmp\r\n0007\\0007_01_05_03_495.bmp\r\n0007\\0007_01_05_03_496.bmp\r\n0007\\0007_01_05_03_497.bmp\r\n0007\\0007_01_05_03_498.bmp\r\n0007\\0007_01_05_03_5.bmp\r\n0007\\0007_01_05_03_50.bmp\r\n0007\\0007_01_05_03_51.bmp\r\n0007\\0007_01_05_03_52.bmp\r\n0007\\0007_01_05_03_53.bmp\r\n0007\\0007_01_05_03_54.bmp\r\n0007\\0007_01_05_03_55.bmp\r\n0007\\0007_01_05_03_57.bmp\r\n0007\\0007_01_05_03_58.bmp\r\n0007\\0007_01_05_03_6.bmp\r\n0007\\0007_01_05_03_60.bmp\r\n0007\\0007_01_05_03_61.bmp\r\n0007\\0007_01_05_03_62.bmp\r\n0007\\0007_01_05_03_63.bmp\r\n0007\\0007_01_05_03_64.bmp\r\n0007\\0007_01_05_03_65.bmp\r\n0007\\0007_01_05_03_66.bmp\r\n0007\\0007_01_05_03_67.bmp\r\n0007\\0007_01_05_03_68.bmp\r\n0007\\0007_01_05_03_69.bmp\r\n0007\\0007_01_05_03_7.bmp\r\n0007\\0007_01_05_03_72.bmp\r\n0007\\0007_01_05_03_73.bmp\r\n0007\\0007_01_05_03_74.bmp\r\n0007\\0007_01_05_03_75.bmp\r\n0007\\0007_01_05_03_76.bmp\r\n0007\\0007_01_05_03_77.bmp\r\n0007\\0007_01_05_03_78.bmp\r\n0007\\0007_01_05_03_8.bmp\r\n0007\\0007_01_05_03_80.bmp\r\n0007\\0007_01_05_03_81.bmp\r\n0007\\0007_01_05_03_82.bmp\r\n0007\\0007_01_05_03_83.bmp\r\n0007\\0007_01_05_03_84.bmp\r\n0007\\0007_01_05_03_85.bmp\r\n0007\\0007_01_05_03_87.bmp\r\n0007\\0007_01_05_03_88.bmp\r\n0007\\0007_01_05_03_89.bmp\r\n0007\\0007_01_05_03_9.bmp\r\n0007\\0007_01_05_03_90.bmp\r\n0007\\0007_01_05_03_91.bmp\r\n0007\\0007_01_05_03_93.bmp\r\n0007\\0007_01_05_03_94.bmp\r\n0007\\0007_01_05_03_95.bmp\r\n0007\\0007_01_05_03_97.bmp\r\n0007\\0007_01_05_03_98.bmp\r\n0007\\0007_01_05_03_99.bmp\r\n0014\\0014_01_06_03_0.bmp\r\n0014\\0014_01_06_03_1.bmp\r\n0014\\0014_01_06_03_10.bmp\r\n0014\\0014_01_06_03_100.bmp\r\n0014\\0014_01_06_03_101.bmp\r\n0014\\0014_01_06_03_102.bmp\r\n0014\\0014_01_06_03_103.bmp\r\n0014\\0014_01_06_03_104.bmp\r\n0014\\0014_01_06_03_105.bmp\r\n0014\\0014_01_06_03_106.bmp\r\n0014\\0014_01_06_03_107.bmp\r\n0014\\0014_01_06_03_108.bmp\r\n0014\\0014_01_06_03_109.bmp\r\n0014\\0014_01_06_03_11.bmp\r\n0014\\0014_01_06_03_110.bmp\r\n0014\\0014_01_06_03_111.bmp\r\n0014\\0014_01_06_03_112.bmp\r\n0014\\0014_01_06_03_113.bmp\r\n0014\\0014_01_06_03_114.bmp\r\n0014\\0014_01_06_03_115.bmp\r\n0014\\0014_01_06_03_116.bmp\r\n0014\\0014_01_06_03_117.bmp\r\n0014\\0014_01_06_03_118.bmp\r\n0014\\0014_01_06_03_119.bmp\r\n0014\\0014_01_06_03_12.bmp\r\n0014\\0014_01_06_03_120.bmp\r\n0014\\0014_01_06_03_121.bmp\r\n0014\\0014_01_06_03_122.bmp\r\n0014\\0014_01_06_03_123.bmp\r\n0014\\0014_01_06_03_124.bmp\r\n0014\\0014_01_06_03_125.bmp\r\n0014\\0014_01_06_03_126.bmp\r\n0014\\0014_01_06_03_127.bmp\r\n0014\\0014_01_06_03_128.bmp\r\n0014\\0014_01_06_03_129.bmp\r\n0014\\0014_01_06_03_13.bmp\r\n0014\\0014_01_06_03_130.bmp\r\n0014\\0014_01_06_03_131.bmp\r\n0014\\0014_01_06_03_132.bmp\r\n0014\\0014_01_06_03_133.bmp\r\n0014\\0014_01_06_03_134.bmp\r\n0014\\0014_01_06_03_135.bmp\r\n0014\\0014_01_06_03_136.bmp\r\n0014\\0014_01_06_03_137.bmp\r\n0014\\0014_01_06_03_14.bmp\r\n0014\\0014_01_06_03_143.bmp\r\n0014\\0014_01_06_03_144.bmp\r\n0014\\0014_01_06_03_145.bmp\r\n0014\\0014_01_06_03_146.bmp\r\n0014\\0014_01_06_03_147.bmp\r\n0014\\0014_01_06_03_148.bmp\r\n0014\\0014_01_06_03_149.bmp\r\n0014\\0014_01_06_03_15.bmp\r\n0014\\0014_01_06_03_150.bmp\r\n0014\\0014_01_06_03_151.bmp\r\n0014\\0014_01_06_03_152.bmp\r\n0014\\0014_01_06_03_153.bmp\r\n0014\\0014_01_06_03_154.bmp\r\n0014\\0014_01_06_03_155.bmp\r\n0014\\0014_01_06_03_156.bmp\r\n0014\\0014_01_06_03_157.bmp\r\n0014\\0014_01_06_03_158.bmp\r\n0014\\0014_01_06_03_159.bmp\r\n0014\\0014_01_06_03_16.bmp\r\n0014\\0014_01_06_03_160.bmp\r\n0014\\0014_01_06_03_161.bmp\r\n0014\\0014_01_06_03_162.bmp\r\n0014\\0014_01_06_03_163.bmp\r\n0014\\0014_01_06_03_164.bmp\r\n0014\\0014_01_06_03_165.bmp\r\n0014\\0014_01_06_03_166.bmp\r\n0014\\0014_01_06_03_167.bmp\r\n0014\\0014_01_06_03_168.bmp\r\n0014\\0014_01_06_03_169.bmp\r\n0014\\0014_01_06_03_17.bmp\r\n0014\\0014_01_06_03_170.bmp\r\n0014\\0014_01_06_03_171.bmp\r\n0014\\0014_01_06_03_172.bmp\r\n0014\\0014_01_06_03_173.bmp\r\n0014\\0014_01_06_03_174.bmp\r\n0014\\0014_01_06_03_175.bmp\r\n0014\\0014_01_06_03_176.bmp\r\n0014\\0014_01_06_03_177.bmp\r\n0014\\0014_01_06_03_178.bmp\r\n0014\\0014_01_06_03_179.bmp\r\n0014\\0014_01_06_03_18.bmp\r\n0014\\0014_01_06_03_180.bmp\r\n0014\\0014_01_06_03_181.bmp\r\n0014\\0014_01_06_03_182.bmp\r\n0014\\0014_01_06_03_183.bmp\r\n0014\\0014_01_06_03_184.bmp\r\n0014\\0014_01_06_03_185.bmp\r\n0014\\0014_01_06_03_186.bmp\r\n0014\\0014_01_06_03_187.bmp\r\n0014\\0014_01_06_03_188.bmp\r\n0014\\0014_01_06_03_189.bmp\r\n0014\\0014_01_06_03_19.bmp\r\n0014\\0014_01_06_03_190.bmp\r\n0014\\0014_01_06_03_191.bmp\r\n0014\\0014_01_06_03_192.bmp\r\n0014\\0014_01_06_03_193.bmp\r\n0014\\0014_01_06_03_194.bmp\r\n0014\\0014_01_06_03_195.bmp\r\n0014\\0014_01_06_03_196.bmp\r\n0014\\0014_01_06_03_197.bmp\r\n0014\\0014_01_06_03_198.bmp\r\n0014\\0014_01_06_03_199.bmp\r\n0014\\0014_01_06_03_2.bmp\r\n0014\\0014_01_06_03_20.bmp\r\n0014\\0014_01_06_03_200.bmp\r\n0014\\0014_01_06_03_201.bmp\r\n0014\\0014_01_06_03_202.bmp\r\n0014\\0014_01_06_03_203.bmp\r\n0014\\0014_01_06_03_204.bmp\r\n0014\\0014_01_06_03_205.bmp\r\n0014\\0014_01_06_03_206.bmp\r\n0014\\0014_01_06_03_207.bmp\r\n0014\\0014_01_06_03_208.bmp\r\n0014\\0014_01_06_03_209.bmp\r\n0014\\0014_01_06_03_21.bmp\r\n0014\\0014_01_06_03_210.bmp\r\n0014\\0014_01_06_03_211.bmp\r\n0014\\0014_01_06_03_212.bmp\r\n0014\\0014_01_06_03_213.bmp\r\n0014\\0014_01_06_03_214.bmp\r\n0014\\0014_01_06_03_215.bmp\r\n0014\\0014_01_06_03_216.bmp\r\n0014\\0014_01_06_03_217.bmp\r\n0014\\0014_01_06_03_218.bmp\r\n0014\\0014_01_06_03_219.bmp\r\n0014\\0014_01_06_03_22.bmp\r\n0014\\0014_01_06_03_220.bmp\r\n0014\\0014_01_06_03_221.bmp\r\n0014\\0014_01_06_03_222.bmp\r\n0014\\0014_01_06_03_223.bmp\r\n0014\\0014_01_06_03_224.bmp\r\n0014\\0014_01_06_03_225.bmp\r\n0014\\0014_01_06_03_226.bmp\r\n0014\\0014_01_06_03_227.bmp\r\n0014\\0014_01_06_03_228.bmp\r\n0014\\0014_01_06_03_229.bmp\r\n0014\\0014_01_06_03_23.bmp\r\n0014\\0014_01_06_03_230.bmp\r\n0014\\0014_01_06_03_231.bmp\r\n0014\\0014_01_06_03_232.bmp\r\n0014\\0014_01_06_03_233.bmp\r\n0014\\0014_01_06_03_234.bmp\r\n0014\\0014_01_06_03_235.bmp\r\n0014\\0014_01_06_03_236.bmp\r\n0014\\0014_01_06_03_237.bmp\r\n0014\\0014_01_06_03_238.bmp\r\n0014\\0014_01_06_03_239.bmp\r\n0014\\0014_01_06_03_24.bmp\r\n0014\\0014_01_06_03_240.bmp\r\n0014\\0014_01_06_03_241.bmp\r\n0014\\0014_01_06_03_242.bmp\r\n0014\\0014_01_06_03_243.bmp\r\n0014\\0014_01_06_03_244.bmp\r\n0014\\0014_01_06_03_245.bmp\r\n0014\\0014_01_06_03_246.bmp\r\n0014\\0014_01_06_03_247.bmp\r\n0014\\0014_01_06_03_248.bmp\r\n0014\\0014_01_06_03_249.bmp\r\n0014\\0014_01_06_03_25.bmp\r\n0014\\0014_01_06_03_250.bmp\r\n0014\\0014_01_06_03_251.bmp\r\n0014\\0014_01_06_03_252.bmp\r\n0014\\0014_01_06_03_253.bmp\r\n0014\\0014_01_06_03_254.bmp\r\n0014\\0014_01_06_03_255.bmp\r\n0014\\0014_01_06_03_256.bmp\r\n0014\\0014_01_06_03_257.bmp\r\n0014\\0014_01_06_03_258.bmp\r\n0014\\0014_01_06_03_259.bmp\r\n0014\\0014_01_06_03_26.bmp\r\n0014\\0014_01_06_03_260.bmp\r\n0014\\0014_01_06_03_261.bmp\r\n0014\\0014_01_06_03_262.bmp\r\n0014\\0014_01_06_03_263.bmp\r\n0014\\0014_01_06_03_264.bmp\r\n0014\\0014_01_06_03_265.bmp\r\n0014\\0014_01_06_03_266.bmp\r\n0014\\0014_01_06_03_267.bmp\r\n0014\\0014_01_06_03_268.bmp\r\n0014\\0014_01_06_03_269.bmp\r\n0014\\0014_01_06_03_27.bmp\r\n0014\\0014_01_06_03_270.bmp\r\n0014\\0014_01_06_03_271.bmp\r\n0014\\0014_01_06_03_272.bmp\r\n0014\\0014_01_06_03_273.bmp\r\n0014\\0014_01_06_03_274.bmp\r\n0014\\0014_01_06_03_275.bmp\r\n0014\\0014_01_06_03_276.bmp\r\n0014\\0014_01_06_03_277.bmp\r\n0014\\0014_01_06_03_278.bmp\r\n0014\\0014_01_06_03_279.bmp\r\n0014\\0014_01_06_03_28.bmp\r\n0014\\0014_01_06_03_280.bmp\r\n0014\\0014_01_06_03_281.bmp\r\n0014\\0014_01_06_03_282.bmp\r\n0014\\0014_01_06_03_283.bmp\r\n0014\\0014_01_06_03_284.bmp\r\n0014\\0014_01_06_03_285.bmp\r\n0014\\0014_01_06_03_286.bmp\r\n0014\\0014_01_06_03_287.bmp\r\n0014\\0014_01_06_03_288.bmp\r\n0014\\0014_01_06_03_289.bmp\r\n0014\\0014_01_06_03_29.bmp\r\n0014\\0014_01_06_03_290.bmp\r\n0014\\0014_01_06_03_291.bmp\r\n0014\\0014_01_06_03_292.bmp\r\n0014\\0014_01_06_03_293.bmp\r\n0014\\0014_01_06_03_3.bmp\r\n0014\\0014_01_06_03_30.bmp\r\n0014\\0014_01_06_03_304.bmp\r\n0014\\0014_01_06_03_305.bmp\r\n0014\\0014_01_06_03_306.bmp\r\n0014\\0014_01_06_03_307.bmp\r\n0014\\0014_01_06_03_308.bmp\r\n0014\\0014_01_06_03_309.bmp\r\n0014\\0014_01_06_03_31.bmp\r\n0014\\0014_01_06_03_310.bmp\r\n0014\\0014_01_06_03_311.bmp\r\n0014\\0014_01_06_03_312.bmp\r\n0014\\0014_01_06_03_313.bmp\r\n0014\\0014_01_06_03_314.bmp\r\n0014\\0014_01_06_03_315.bmp\r\n0014\\0014_01_06_03_316.bmp\r\n0014\\0014_01_06_03_317.bmp\r\n0014\\0014_01_06_03_318.bmp\r\n0014\\0014_01_06_03_319.bmp\r\n0014\\0014_01_06_03_32.bmp\r\n0014\\0014_01_06_03_320.bmp\r\n0014\\0014_01_06_03_321.bmp\r\n0014\\0014_01_06_03_322.bmp\r\n0014\\0014_01_06_03_323.bmp\r\n0014\\0014_01_06_03_324.bmp\r\n0014\\0014_01_06_03_325.bmp\r\n0014\\0014_01_06_03_326.bmp\r\n0014\\0014_01_06_03_327.bmp\r\n0014\\0014_01_06_03_328.bmp\r\n0014\\0014_01_06_03_329.bmp\r\n0014\\0014_01_06_03_33.bmp\r\n0014\\0014_01_06_03_330.bmp\r\n0014\\0014_01_06_03_331.bmp\r\n0014\\0014_01_06_03_332.bmp\r\n0014\\0014_01_06_03_333.bmp\r\n0014\\0014_01_06_03_334.bmp\r\n0014\\0014_01_06_03_335.bmp\r\n0014\\0014_01_06_03_336.bmp\r\n0014\\0014_01_06_03_337.bmp\r\n0014\\0014_01_06_03_338.bmp\r\n0014\\0014_01_06_03_339.bmp\r\n0014\\0014_01_06_03_34.bmp\r\n0014\\0014_01_06_03_340.bmp\r\n0014\\0014_01_06_03_341.bmp\r\n0014\\0014_01_06_03_342.bmp\r\n0014\\0014_01_06_03_343.bmp\r\n0014\\0014_01_06_03_344.bmp\r\n0014\\0014_01_06_03_345.bmp\r\n0014\\0014_01_06_03_346.bmp\r\n0014\\0014_01_06_03_347.bmp\r\n0014\\0014_01_06_03_348.bmp\r\n0014\\0014_01_06_03_349.bmp\r\n0014\\0014_01_06_03_35.bmp\r\n0014\\0014_01_06_03_350.bmp\r\n0014\\0014_01_06_03_351.bmp\r\n0014\\0014_01_06_03_352.bmp\r\n0014\\0014_01_06_03_353.bmp\r\n0014\\0014_01_06_03_354.bmp\r\n0014\\0014_01_06_03_355.bmp\r\n0014\\0014_01_06_03_356.bmp\r\n0014\\0014_01_06_03_357.bmp\r\n0014\\0014_01_06_03_358.bmp\r\n0014\\0014_01_06_03_359.bmp\r\n0014\\0014_01_06_03_36.bmp\r\n0014\\0014_01_06_03_360.bmp\r\n0014\\0014_01_06_03_361.bmp\r\n0014\\0014_01_06_03_362.bmp\r\n0014\\0014_01_06_03_363.bmp\r\n0014\\0014_01_06_03_364.bmp\r\n0014\\0014_01_06_03_365.bmp\r\n0014\\0014_01_06_03_366.bmp\r\n0014\\0014_01_06_03_367.bmp\r\n0014\\0014_01_06_03_368.bmp\r\n0014\\0014_01_06_03_369.bmp\r\n0014\\0014_01_06_03_37.bmp\r\n0014\\0014_01_06_03_370.bmp\r\n0014\\0014_01_06_03_371.bmp\r\n0014\\0014_01_06_03_372.bmp\r\n0014\\0014_01_06_03_373.bmp\r\n0014\\0014_01_06_03_374.bmp\r\n0014\\0014_01_06_03_375.bmp\r\n0014\\0014_01_06_03_376.bmp\r\n0014\\0014_01_06_03_377.bmp\r\n0014\\0014_01_06_03_378.bmp\r\n0014\\0014_01_06_03_379.bmp\r\n0014\\0014_01_06_03_38.bmp\r\n0014\\0014_01_06_03_380.bmp\r\n0014\\0014_01_06_03_381.bmp\r\n0014\\0014_01_06_03_382.bmp\r\n0014\\0014_01_06_03_383.bmp\r\n0014\\0014_01_06_03_384.bmp\r\n0014\\0014_01_06_03_385.bmp\r\n0014\\0014_01_06_03_386.bmp\r\n0014\\0014_01_06_03_387.bmp\r\n0014\\0014_01_06_03_388.bmp\r\n0014\\0014_01_06_03_389.bmp\r\n0014\\0014_01_06_03_39.bmp\r\n0014\\0014_01_06_03_390.bmp\r\n0014\\0014_01_06_03_391.bmp\r\n0014\\0014_01_06_03_392.bmp\r\n0014\\0014_01_06_03_393.bmp\r\n0014\\0014_01_06_03_394.bmp\r\n0014\\0014_01_06_03_395.bmp\r\n0014\\0014_01_06_03_396.bmp\r\n0014\\0014_01_06_03_397.bmp\r\n0014\\0014_01_06_03_398.bmp\r\n0014\\0014_01_06_03_399.bmp\r\n0014\\0014_01_06_03_4.bmp\r\n0014\\0014_01_06_03_40.bmp\r\n0014\\0014_01_06_03_400.bmp\r\n0014\\0014_01_06_03_401.bmp\r\n0014\\0014_01_06_03_402.bmp\r\n0014\\0014_01_06_03_403.bmp\r\n0014\\0014_01_06_03_404.bmp\r\n0014\\0014_01_06_03_405.bmp\r\n0014\\0014_01_06_03_406.bmp\r\n0014\\0014_01_06_03_407.bmp\r\n0014\\0014_01_06_03_408.bmp\r\n0014\\0014_01_06_03_409.bmp\r\n0014\\0014_01_06_03_41.bmp\r\n0014\\0014_01_06_03_410.bmp\r\n0014\\0014_01_06_03_411.bmp\r\n0014\\0014_01_06_03_412.bmp\r\n0014\\0014_01_06_03_413.bmp\r\n0014\\0014_01_06_03_414.bmp\r\n0014\\0014_01_06_03_415.bmp\r\n0014\\0014_01_06_03_416.bmp\r\n0014\\0014_01_06_03_417.bmp\r\n0014\\0014_01_06_03_418.bmp\r\n0014\\0014_01_06_03_419.bmp\r\n0014\\0014_01_06_03_42.bmp\r\n0014\\0014_01_06_03_420.bmp\r\n0014\\0014_01_06_03_421.bmp\r\n0014\\0014_01_06_03_422.bmp\r\n0014\\0014_01_06_03_423.bmp\r\n0014\\0014_01_06_03_424.bmp\r\n0014\\0014_01_06_03_425.bmp\r\n0014\\0014_01_06_03_426.bmp\r\n0014\\0014_01_06_03_427.bmp\r\n0014\\0014_01_06_03_428.bmp\r\n0014\\0014_01_06_03_429.bmp\r\n0014\\0014_01_06_03_43.bmp\r\n0014\\0014_01_06_03_430.bmp\r\n0014\\0014_01_06_03_431.bmp\r\n0014\\0014_01_06_03_432.bmp\r\n0014\\0014_01_06_03_433.bmp\r\n0014\\0014_01_06_03_434.bmp\r\n0014\\0014_01_06_03_435.bmp\r\n0014\\0014_01_06_03_436.bmp\r\n0014\\0014_01_06_03_437.bmp\r\n0014\\0014_01_06_03_438.bmp\r\n0014\\0014_01_06_03_439.bmp\r\n0014\\0014_01_06_03_44.bmp\r\n0014\\0014_01_06_03_440.bmp\r\n0014\\0014_01_06_03_441.bmp\r\n0014\\0014_01_06_03_442.bmp\r\n0014\\0014_01_06_03_443.bmp\r\n0014\\0014_01_06_03_444.bmp\r\n0014\\0014_01_06_03_445.bmp\r\n0014\\0014_01_06_03_446.bmp\r\n0014\\0014_01_06_03_447.bmp\r\n0014\\0014_01_06_03_448.bmp\r\n0014\\0014_01_06_03_449.bmp\r\n0014\\0014_01_06_03_45.bmp\r\n0014\\0014_01_06_03_450.bmp\r\n0014\\0014_01_06_03_451.bmp\r\n0014\\0014_01_06_03_452.bmp\r\n0014\\0014_01_06_03_453.bmp\r\n0014\\0014_01_06_03_454.bmp\r\n0014\\0014_01_06_03_455.bmp\r\n0014\\0014_01_06_03_456.bmp\r\n0014\\0014_01_06_03_457.bmp\r\n0014\\0014_01_06_03_458.bmp\r\n0014\\0014_01_06_03_459.bmp\r\n0014\\0014_01_06_03_46.bmp\r\n0014\\0014_01_06_03_460.bmp\r\n0014\\0014_01_06_03_461.bmp\r\n0014\\0014_01_06_03_462.bmp\r\n0014\\0014_01_06_03_463.bmp\r\n0014\\0014_01_06_03_464.bmp\r\n0014\\0014_01_06_03_465.bmp\r\n0014\\0014_01_06_03_466.bmp\r\n0014\\0014_01_06_03_467.bmp\r\n0014\\0014_01_06_03_468.bmp\r\n0014\\0014_01_06_03_469.bmp\r\n0014\\0014_01_06_03_47.bmp\r\n0014\\0014_01_06_03_470.bmp\r\n0014\\0014_01_06_03_471.bmp\r\n0014\\0014_01_06_03_472.bmp\r\n0014\\0014_01_06_03_473.bmp\r\n0014\\0014_01_06_03_474.bmp\r\n0014\\0014_01_06_03_475.bmp\r\n0014\\0014_01_06_03_476.bmp\r\n0014\\0014_01_06_03_477.bmp\r\n0014\\0014_01_06_03_478.bmp\r\n0014\\0014_01_06_03_479.bmp\r\n0014\\0014_01_06_03_48.bmp\r\n0014\\0014_01_06_03_480.bmp\r\n0014\\0014_01_06_03_481.bmp\r\n0014\\0014_01_06_03_482.bmp\r\n0014\\0014_01_06_03_483.bmp\r\n0014\\0014_01_06_03_484.bmp\r\n0014\\0014_01_06_03_485.bmp\r\n0014\\0014_01_06_03_486.bmp\r\n0014\\0014_01_06_03_487.bmp\r\n0014\\0014_01_06_03_488.bmp\r\n0014\\0014_01_06_03_489.bmp\r\n0014\\0014_01_06_03_49.bmp\r\n0014\\0014_01_06_03_490.bmp\r\n0014\\0014_01_06_03_491.bmp\r\n0014\\0014_01_06_03_492.bmp\r\n0014\\0014_01_06_03_493.bmp\r\n0014\\0014_01_06_03_494.bmp\r\n0014\\0014_01_06_03_495.bmp\r\n0014\\0014_01_06_03_496.bmp\r\n0014\\0014_01_06_03_497.bmp\r\n0014\\0014_01_06_03_498.bmp\r\n0014\\0014_01_06_03_499.bmp\r\n0014\\0014_01_06_03_5.bmp\r\n0014\\0014_01_06_03_50.bmp\r\n0014\\0014_01_06_03_51.bmp\r\n0014\\0014_01_06_03_52.bmp\r\n0014\\0014_01_06_03_53.bmp\r\n0014\\0014_01_06_03_54.bmp\r\n0014\\0014_01_06_03_55.bmp\r\n0014\\0014_01_06_03_56.bmp\r\n0014\\0014_01_06_03_57.bmp\r\n0014\\0014_01_06_03_58.bmp\r\n0014\\0014_01_06_03_59.bmp\r\n0014\\0014_01_06_03_6.bmp\r\n0014\\0014_01_06_03_60.bmp\r\n0014\\0014_01_06_03_61.bmp\r\n0014\\0014_01_06_03_62.bmp\r\n0014\\0014_01_06_03_63.bmp\r\n0014\\0014_01_06_03_64.bmp\r\n0014\\0014_01_06_03_65.bmp\r\n0014\\0014_01_06_03_66.bmp\r\n0014\\0014_01_06_03_67.bmp\r\n0014\\0014_01_06_03_68.bmp\r\n0014\\0014_01_06_03_69.bmp\r\n0014\\0014_01_06_03_7.bmp\r\n0014\\0014_01_06_03_70.bmp\r\n0014\\0014_01_06_03_71.bmp\r\n0014\\0014_01_06_03_72.bmp\r\n0014\\0014_01_06_03_73.bmp\r\n0014\\0014_01_06_03_74.bmp\r\n0014\\0014_01_06_03_75.bmp\r\n0014\\0014_01_06_03_76.bmp\r\n0014\\0014_01_06_03_84.bmp\r\n0014\\0014_01_06_03_85.bmp\r\n0014\\0014_01_06_03_86.bmp\r\n0014\\0014_01_06_03_87.bmp\r\n0014\\0014_01_06_03_88.bmp\r\n0014\\0014_01_06_03_89.bmp\r\n0014\\0014_01_06_03_9.bmp\r\n0014\\0014_01_06_03_90.bmp\r\n0014\\0014_01_06_03_91.bmp\r\n0014\\0014_01_06_03_92.bmp\r\n0014\\0014_01_06_03_93.bmp\r\n0014\\0014_01_06_03_94.bmp\r\n0014\\0014_01_06_03_95.bmp\r\n0014\\0014_01_06_03_96.bmp\r\n0014\\0014_01_06_03_97.bmp\r\n0014\\0014_01_06_03_98.bmp\r\n0014\\0014_01_06_03_99.bmp\r\n0004\\0004_01_06_03_0.bmp\r\n0004\\0004_01_06_03_1.bmp\r\n0004\\0004_01_06_03_10.bmp\r\n0004\\0004_01_06_03_100.bmp\r\n0004\\0004_01_06_03_101.bmp\r\n0004\\0004_01_06_03_102.bmp\r\n0004\\0004_01_06_03_103.bmp\r\n0004\\0004_01_06_03_104.bmp\r\n0004\\0004_01_06_03_105.bmp\r\n0004\\0004_01_06_03_106.bmp\r\n0004\\0004_01_06_03_107.bmp\r\n0004\\0004_01_06_03_108.bmp\r\n0004\\0004_01_06_03_109.bmp\r\n0004\\0004_01_06_03_11.bmp\r\n0004\\0004_01_06_03_110.bmp\r\n0004\\0004_01_06_03_111.bmp\r\n0004\\0004_01_06_03_112.bmp\r\n0004\\0004_01_06_03_113.bmp\r\n0004\\0004_01_06_03_114.bmp\r\n0004\\0004_01_06_03_115.bmp\r\n0004\\0004_01_06_03_116.bmp\r\n0004\\0004_01_06_03_117.bmp\r\n0004\\0004_01_06_03_118.bmp\r\n0004\\0004_01_06_03_119.bmp\r\n0004\\0004_01_06_03_12.bmp\r\n0004\\0004_01_06_03_120.bmp\r\n0004\\0004_01_06_03_121.bmp\r\n0004\\0004_01_06_03_122.bmp\r\n0004\\0004_01_06_03_123.bmp\r\n0004\\0004_01_06_03_124.bmp\r\n0004\\0004_01_06_03_125.bmp\r\n0004\\0004_01_06_03_126.bmp\r\n0004\\0004_01_06_03_127.bmp\r\n0004\\0004_01_06_03_128.bmp\r\n0004\\0004_01_06_03_129.bmp\r\n0004\\0004_01_06_03_13.bmp\r\n0004\\0004_01_06_03_130.bmp\r\n0004\\0004_01_06_03_131.bmp\r\n0004\\0004_01_06_03_132.bmp\r\n0004\\0004_01_06_03_133.bmp\r\n0004\\0004_01_06_03_134.bmp\r\n0004\\0004_01_06_03_135.bmp\r\n0004\\0004_01_06_03_136.bmp\r\n0004\\0004_01_06_03_137.bmp\r\n0004\\0004_01_06_03_138.bmp\r\n0004\\0004_01_06_03_139.bmp\r\n0004\\0004_01_06_03_14.bmp\r\n0004\\0004_01_06_03_140.bmp\r\n0004\\0004_01_06_03_141.bmp\r\n0004\\0004_01_06_03_143.bmp\r\n0004\\0004_01_06_03_144.bmp\r\n0004\\0004_01_06_03_145.bmp\r\n0004\\0004_01_06_03_146.bmp\r\n0004\\0004_01_06_03_147.bmp\r\n0004\\0004_01_06_03_148.bmp\r\n0004\\0004_01_06_03_149.bmp\r\n0004\\0004_01_06_03_15.bmp\r\n0004\\0004_01_06_03_150.bmp\r\n0004\\0004_01_06_03_151.bmp\r\n0004\\0004_01_06_03_152.bmp\r\n0004\\0004_01_06_03_153.bmp\r\n0004\\0004_01_06_03_154.bmp\r\n0004\\0004_01_06_03_155.bmp\r\n0004\\0004_01_06_03_156.bmp\r\n0004\\0004_01_06_03_157.bmp\r\n0004\\0004_01_06_03_158.bmp\r\n0004\\0004_01_06_03_159.bmp\r\n0004\\0004_01_06_03_16.bmp\r\n0004\\0004_01_06_03_161.bmp\r\n0004\\0004_01_06_03_17.bmp\r\n0004\\0004_01_06_03_173.bmp\r\n0004\\0004_01_06_03_174.bmp\r\n0004\\0004_01_06_03_175.bmp\r\n0004\\0004_01_06_03_176.bmp\r\n0004\\0004_01_06_03_177.bmp\r\n0004\\0004_01_06_03_178.bmp\r\n0004\\0004_01_06_03_179.bmp\r\n0004\\0004_01_06_03_18.bmp\r\n0004\\0004_01_06_03_183.bmp\r\n0004\\0004_01_06_03_184.bmp\r\n0004\\0004_01_06_03_185.bmp\r\n0004\\0004_01_06_03_186.bmp\r\n0004\\0004_01_06_03_187.bmp\r\n0004\\0004_01_06_03_188.bmp\r\n0004\\0004_01_06_03_189.bmp\r\n0004\\0004_01_06_03_19.bmp\r\n0004\\0004_01_06_03_190.bmp\r\n0004\\0004_01_06_03_191.bmp\r\n0004\\0004_01_06_03_192.bmp\r\n0004\\0004_01_06_03_193.bmp\r\n0004\\0004_01_06_03_194.bmp\r\n0004\\0004_01_06_03_195.bmp\r\n0004\\0004_01_06_03_196.bmp\r\n0004\\0004_01_06_03_197.bmp\r\n0004\\0004_01_06_03_198.bmp\r\n0004\\0004_01_06_03_199.bmp\r\n0004\\0004_01_06_03_2.bmp\r\n0004\\0004_01_06_03_20.bmp\r\n0004\\0004_01_06_03_200.bmp\r\n0004\\0004_01_06_03_201.bmp\r\n0004\\0004_01_06_03_202.bmp\r\n0004\\0004_01_06_03_203.bmp\r\n0004\\0004_01_06_03_204.bmp\r\n0004\\0004_01_06_03_205.bmp\r\n0004\\0004_01_06_03_206.bmp\r\n0004\\0004_01_06_03_207.bmp\r\n0004\\0004_01_06_03_208.bmp\r\n0004\\0004_01_06_03_209.bmp\r\n0004\\0004_01_06_03_21.bmp\r\n0004\\0004_01_06_03_210.bmp\r\n0004\\0004_01_06_03_211.bmp\r\n0004\\0004_01_06_03_212.bmp\r\n0004\\0004_01_06_03_213.bmp\r\n0004\\0004_01_06_03_214.bmp\r\n0004\\0004_01_06_03_215.bmp\r\n0004\\0004_01_06_03_216.bmp\r\n0004\\0004_01_06_03_217.bmp\r\n0004\\0004_01_06_03_218.bmp\r\n0004\\0004_01_06_03_219.bmp\r\n0004\\0004_01_06_03_22.bmp\r\n0004\\0004_01_06_03_220.bmp\r\n0004\\0004_01_06_03_221.bmp\r\n0004\\0004_01_06_03_222.bmp\r\n0004\\0004_01_06_03_223.bmp\r\n0004\\0004_01_06_03_224.bmp\r\n0004\\0004_01_06_03_225.bmp\r\n0004\\0004_01_06_03_226.bmp\r\n0004\\0004_01_06_03_227.bmp\r\n0004\\0004_01_06_03_228.bmp\r\n0004\\0004_01_06_03_229.bmp\r\n0004\\0004_01_06_03_23.bmp\r\n0004\\0004_01_06_03_230.bmp\r\n0004\\0004_01_06_03_231.bmp\r\n0004\\0004_01_06_03_232.bmp\r\n0004\\0004_01_06_03_233.bmp\r\n0004\\0004_01_06_03_234.bmp\r\n0004\\0004_01_06_03_235.bmp\r\n0004\\0004_01_06_03_236.bmp\r\n0004\\0004_01_06_03_237.bmp\r\n0004\\0004_01_06_03_238.bmp\r\n0004\\0004_01_06_03_239.bmp\r\n0004\\0004_01_06_03_24.bmp\r\n0004\\0004_01_06_03_240.bmp\r\n0004\\0004_01_06_03_241.bmp\r\n0004\\0004_01_06_03_242.bmp\r\n0004\\0004_01_06_03_243.bmp\r\n0004\\0004_01_06_03_244.bmp\r\n0004\\0004_01_06_03_245.bmp\r\n0004\\0004_01_06_03_246.bmp\r\n0004\\0004_01_06_03_247.bmp\r\n0004\\0004_01_06_03_248.bmp\r\n0004\\0004_01_06_03_249.bmp\r\n0004\\0004_01_06_03_25.bmp\r\n0004\\0004_01_06_03_250.bmp\r\n0004\\0004_01_06_03_251.bmp\r\n0004\\0004_01_06_03_252.bmp\r\n0004\\0004_01_06_03_253.bmp\r\n0004\\0004_01_06_03_254.bmp\r\n0004\\0004_01_06_03_255.bmp\r\n0004\\0004_01_06_03_256.bmp\r\n0004\\0004_01_06_03_257.bmp\r\n0004\\0004_01_06_03_258.bmp\r\n0004\\0004_01_06_03_259.bmp\r\n0004\\0004_01_06_03_26.bmp\r\n0004\\0004_01_06_03_260.bmp\r\n0004\\0004_01_06_03_261.bmp\r\n0004\\0004_01_06_03_262.bmp\r\n0004\\0004_01_06_03_263.bmp\r\n0004\\0004_01_06_03_264.bmp\r\n0004\\0004_01_06_03_265.bmp\r\n0004\\0004_01_06_03_266.bmp\r\n0004\\0004_01_06_03_267.bmp\r\n0004\\0004_01_06_03_268.bmp\r\n0004\\0004_01_06_03_269.bmp\r\n0004\\0004_01_06_03_27.bmp\r\n0004\\0004_01_06_03_270.bmp\r\n0004\\0004_01_06_03_272.bmp\r\n0004\\0004_01_06_03_273.bmp\r\n0004\\0004_01_06_03_275.bmp\r\n0004\\0004_01_06_03_276.bmp\r\n0004\\0004_01_06_03_28.bmp\r\n0004\\0004_01_06_03_281.bmp\r\n0004\\0004_01_06_03_282.bmp\r\n0004\\0004_01_06_03_283.bmp\r\n0004\\0004_01_06_03_284.bmp\r\n0004\\0004_01_06_03_285.bmp\r\n0004\\0004_01_06_03_286.bmp\r\n0004\\0004_01_06_03_287.bmp\r\n0004\\0004_01_06_03_288.bmp\r\n0004\\0004_01_06_03_289.bmp\r\n0004\\0004_01_06_03_29.bmp\r\n0004\\0004_01_06_03_290.bmp\r\n0004\\0004_01_06_03_291.bmp\r\n0004\\0004_01_06_03_292.bmp\r\n0004\\0004_01_06_03_293.bmp\r\n0004\\0004_01_06_03_294.bmp\r\n0004\\0004_01_06_03_295.bmp\r\n0004\\0004_01_06_03_296.bmp\r\n0004\\0004_01_06_03_297.bmp\r\n0004\\0004_01_06_03_298.bmp\r\n0004\\0004_01_06_03_299.bmp\r\n0004\\0004_01_06_03_3.bmp\r\n0004\\0004_01_06_03_30.bmp\r\n0004\\0004_01_06_03_304.bmp\r\n0004\\0004_01_06_03_305.bmp\r\n0004\\0004_01_06_03_306.bmp\r\n0004\\0004_01_06_03_307.bmp\r\n0004\\0004_01_06_03_308.bmp\r\n0004\\0004_01_06_03_309.bmp\r\n0004\\0004_01_06_03_31.bmp\r\n0004\\0004_01_06_03_311.bmp\r\n0004\\0004_01_06_03_312.bmp\r\n0004\\0004_01_06_03_314.bmp\r\n0004\\0004_01_06_03_32.bmp\r\n0004\\0004_01_06_03_321.bmp\r\n0004\\0004_01_06_03_322.bmp\r\n0004\\0004_01_06_03_323.bmp\r\n0004\\0004_01_06_03_324.bmp\r\n0004\\0004_01_06_03_325.bmp\r\n0004\\0004_01_06_03_326.bmp\r\n0004\\0004_01_06_03_327.bmp\r\n0004\\0004_01_06_03_328.bmp\r\n0004\\0004_01_06_03_329.bmp\r\n0004\\0004_01_06_03_33.bmp\r\n0004\\0004_01_06_03_330.bmp\r\n0004\\0004_01_06_03_331.bmp\r\n0004\\0004_01_06_03_332.bmp\r\n0004\\0004_01_06_03_333.bmp\r\n0004\\0004_01_06_03_334.bmp\r\n0004\\0004_01_06_03_335.bmp\r\n0004\\0004_01_06_03_336.bmp\r\n0004\\0004_01_06_03_337.bmp\r\n0004\\0004_01_06_03_338.bmp\r\n0004\\0004_01_06_03_339.bmp\r\n0004\\0004_01_06_03_34.bmp\r\n0004\\0004_01_06_03_340.bmp\r\n0004\\0004_01_06_03_341.bmp\r\n0004\\0004_01_06_03_342.bmp\r\n0004\\0004_01_06_03_343.bmp\r\n0004\\0004_01_06_03_344.bmp\r\n0004\\0004_01_06_03_345.bmp\r\n0004\\0004_01_06_03_346.bmp\r\n0004\\0004_01_06_03_347.bmp\r\n0004\\0004_01_06_03_348.bmp\r\n0004\\0004_01_06_03_349.bmp\r\n0004\\0004_01_06_03_35.bmp\r\n0004\\0004_01_06_03_350.bmp\r\n0004\\0004_01_06_03_351.bmp\r\n0004\\0004_01_06_03_352.bmp\r\n0004\\0004_01_06_03_353.bmp\r\n0004\\0004_01_06_03_354.bmp\r\n0004\\0004_01_06_03_355.bmp\r\n0004\\0004_01_06_03_356.bmp\r\n0004\\0004_01_06_03_357.bmp\r\n0004\\0004_01_06_03_358.bmp\r\n0004\\0004_01_06_03_359.bmp\r\n0004\\0004_01_06_03_36.bmp\r\n0004\\0004_01_06_03_360.bmp\r\n0004\\0004_01_06_03_361.bmp\r\n0004\\0004_01_06_03_362.bmp\r\n0004\\0004_01_06_03_363.bmp\r\n0004\\0004_01_06_03_364.bmp\r\n0004\\0004_01_06_03_365.bmp\r\n0004\\0004_01_06_03_366.bmp\r\n0004\\0004_01_06_03_367.bmp\r\n0004\\0004_01_06_03_368.bmp\r\n0004\\0004_01_06_03_369.bmp\r\n0004\\0004_01_06_03_37.bmp\r\n0004\\0004_01_06_03_370.bmp\r\n0004\\0004_01_06_03_371.bmp\r\n0004\\0004_01_06_03_372.bmp\r\n0004\\0004_01_06_03_373.bmp\r\n0004\\0004_01_06_03_374.bmp\r\n0004\\0004_01_06_03_375.bmp\r\n0004\\0004_01_06_03_376.bmp\r\n0004\\0004_01_06_03_377.bmp\r\n0004\\0004_01_06_03_378.bmp\r\n0004\\0004_01_06_03_379.bmp\r\n0004\\0004_01_06_03_38.bmp\r\n0004\\0004_01_06_03_380.bmp\r\n0004\\0004_01_06_03_381.bmp\r\n0004\\0004_01_06_03_382.bmp\r\n0004\\0004_01_06_03_383.bmp\r\n0004\\0004_01_06_03_384.bmp\r\n0004\\0004_01_06_03_385.bmp\r\n0004\\0004_01_06_03_386.bmp\r\n0004\\0004_01_06_03_387.bmp\r\n0004\\0004_01_06_03_388.bmp\r\n0004\\0004_01_06_03_389.bmp\r\n0004\\0004_01_06_03_39.bmp\r\n0004\\0004_01_06_03_390.bmp\r\n0004\\0004_01_06_03_391.bmp\r\n0004\\0004_01_06_03_392.bmp\r\n0004\\0004_01_06_03_393.bmp\r\n0004\\0004_01_06_03_394.bmp\r\n0004\\0004_01_06_03_395.bmp\r\n0004\\0004_01_06_03_396.bmp\r\n0004\\0004_01_06_03_397.bmp\r\n0004\\0004_01_06_03_398.bmp\r\n0004\\0004_01_06_03_399.bmp\r\n0004\\0004_01_06_03_4.bmp\r\n0004\\0004_01_06_03_40.bmp\r\n0004\\0004_01_06_03_401.bmp\r\n0004\\0004_01_06_03_403.bmp\r\n0004\\0004_01_06_03_405.bmp\r\n0004\\0004_01_06_03_406.bmp\r\n0004\\0004_01_06_03_407.bmp\r\n0004\\0004_01_06_03_408.bmp\r\n0004\\0004_01_06_03_409.bmp\r\n0004\\0004_01_06_03_41.bmp\r\n0004\\0004_01_06_03_410.bmp\r\n0004\\0004_01_06_03_412.bmp\r\n0004\\0004_01_06_03_413.bmp\r\n0004\\0004_01_06_03_414.bmp\r\n0004\\0004_01_06_03_415.bmp\r\n0004\\0004_01_06_03_416.bmp\r\n0004\\0004_01_06_03_417.bmp\r\n0004\\0004_01_06_03_418.bmp\r\n0004\\0004_01_06_03_419.bmp\r\n0004\\0004_01_06_03_42.bmp\r\n0004\\0004_01_06_03_420.bmp\r\n0004\\0004_01_06_03_421.bmp\r\n0004\\0004_01_06_03_422.bmp\r\n0004\\0004_01_06_03_423.bmp\r\n0004\\0004_01_06_03_424.bmp\r\n0004\\0004_01_06_03_425.bmp\r\n0004\\0004_01_06_03_426.bmp\r\n0004\\0004_01_06_03_427.bmp\r\n0004\\0004_01_06_03_428.bmp\r\n0004\\0004_01_06_03_429.bmp\r\n0004\\0004_01_06_03_43.bmp\r\n0004\\0004_01_06_03_430.bmp\r\n0004\\0004_01_06_03_431.bmp\r\n0004\\0004_01_06_03_432.bmp\r\n0004\\0004_01_06_03_433.bmp\r\n0004\\0004_01_06_03_434.bmp\r\n0004\\0004_01_06_03_435.bmp\r\n0004\\0004_01_06_03_436.bmp\r\n0004\\0004_01_06_03_437.bmp\r\n0004\\0004_01_06_03_438.bmp\r\n0004\\0004_01_06_03_439.bmp\r\n0004\\0004_01_06_03_44.bmp\r\n0004\\0004_01_06_03_440.bmp\r\n0004\\0004_01_06_03_441.bmp\r\n0004\\0004_01_06_03_442.bmp\r\n0004\\0004_01_06_03_443.bmp\r\n0004\\0004_01_06_03_444.bmp\r\n0004\\0004_01_06_03_445.bmp\r\n0004\\0004_01_06_03_446.bmp\r\n0004\\0004_01_06_03_447.bmp\r\n0004\\0004_01_06_03_448.bmp\r\n0004\\0004_01_06_03_449.bmp\r\n0004\\0004_01_06_03_45.bmp\r\n0004\\0004_01_06_03_450.bmp\r\n0004\\0004_01_06_03_451.bmp\r\n0004\\0004_01_06_03_452.bmp\r\n0004\\0004_01_06_03_453.bmp\r\n0004\\0004_01_06_03_454.bmp\r\n0004\\0004_01_06_03_455.bmp\r\n0004\\0004_01_06_03_456.bmp\r\n0004\\0004_01_06_03_457.bmp\r\n0004\\0004_01_06_03_458.bmp\r\n0004\\0004_01_06_03_459.bmp\r\n0004\\0004_01_06_03_46.bmp\r\n0004\\0004_01_06_03_460.bmp\r\n0004\\0004_01_06_03_461.bmp\r\n0004\\0004_01_06_03_462.bmp\r\n0004\\0004_01_06_03_463.bmp\r\n0004\\0004_01_06_03_464.bmp\r\n0004\\0004_01_06_03_465.bmp\r\n0004\\0004_01_06_03_466.bmp\r\n0004\\0004_01_06_03_467.bmp\r\n0004\\0004_01_06_03_468.bmp\r\n0004\\0004_01_06_03_469.bmp\r\n0004\\0004_01_06_03_47.bmp\r\n0004\\0004_01_06_03_470.bmp\r\n0004\\0004_01_06_03_471.bmp\r\n0004\\0004_01_06_03_472.bmp\r\n0004\\0004_01_06_03_473.bmp\r\n0004\\0004_01_06_03_474.bmp\r\n0004\\0004_01_06_03_475.bmp\r\n0004\\0004_01_06_03_477.bmp\r\n0004\\0004_01_06_03_478.bmp\r\n0004\\0004_01_06_03_48.bmp\r\n0004\\0004_01_06_03_483.bmp\r\n0004\\0004_01_06_03_484.bmp\r\n0004\\0004_01_06_03_485.bmp\r\n0004\\0004_01_06_03_486.bmp\r\n0004\\0004_01_06_03_487.bmp\r\n0004\\0004_01_06_03_488.bmp\r\n0004\\0004_01_06_03_489.bmp\r\n0004\\0004_01_06_03_49.bmp\r\n0004\\0004_01_06_03_490.bmp\r\n0004\\0004_01_06_03_491.bmp\r\n0004\\0004_01_06_03_492.bmp\r\n0004\\0004_01_06_03_493.bmp\r\n0004\\0004_01_06_03_494.bmp\r\n0004\\0004_01_06_03_495.bmp\r\n0004\\0004_01_06_03_496.bmp\r\n0004\\0004_01_06_03_497.bmp\r\n0004\\0004_01_06_03_499.bmp\r\n0004\\0004_01_06_03_5.bmp\r\n0004\\0004_01_06_03_50.bmp\r\n0004\\0004_01_06_03_51.bmp\r\n0004\\0004_01_06_03_52.bmp\r\n0004\\0004_01_06_03_53.bmp\r\n0004\\0004_01_06_03_54.bmp\r\n0004\\0004_01_06_03_55.bmp\r\n0004\\0004_01_06_03_56.bmp\r\n0004\\0004_01_06_03_57.bmp\r\n0004\\0004_01_06_03_58.bmp\r\n0004\\0004_01_06_03_59.bmp\r\n0004\\0004_01_06_03_6.bmp\r\n0004\\0004_01_06_03_60.bmp\r\n0004\\0004_01_06_03_61.bmp\r\n0004\\0004_01_06_03_62.bmp\r\n0004\\0004_01_06_03_63.bmp\r\n0004\\0004_01_06_03_64.bmp\r\n0004\\0004_01_06_03_65.bmp\r\n0004\\0004_01_06_03_66.bmp\r\n0004\\0004_01_06_03_67.bmp\r\n0004\\0004_01_06_03_68.bmp\r\n0004\\0004_01_06_03_69.bmp\r\n0004\\0004_01_06_03_7.bmp\r\n0004\\0004_01_06_03_70.bmp\r\n0004\\0004_01_06_03_71.bmp\r\n0004\\0004_01_06_03_72.bmp\r\n0004\\0004_01_06_03_73.bmp\r\n0004\\0004_01_06_03_74.bmp\r\n0004\\0004_01_06_03_75.bmp\r\n0004\\0004_01_06_03_79.bmp\r\n0004\\0004_01_06_03_8.bmp\r\n0004\\0004_01_06_03_80.bmp\r\n0004\\0004_01_06_03_81.bmp\r\n0004\\0004_01_06_03_82.bmp\r\n0004\\0004_01_06_03_83.bmp\r\n0004\\0004_01_06_03_84.bmp\r\n0004\\0004_01_06_03_85.bmp\r\n0004\\0004_01_06_03_86.bmp\r\n0004\\0004_01_06_03_87.bmp\r\n0004\\0004_01_06_03_88.bmp\r\n0004\\0004_01_06_03_89.bmp\r\n0004\\0004_01_06_03_9.bmp\r\n0004\\0004_01_06_03_90.bmp\r\n0004\\0004_01_06_03_91.bmp\r\n0004\\0004_01_06_03_92.bmp\r\n0004\\0004_01_06_03_93.bmp\r\n0004\\0004_01_06_03_94.bmp\r\n0004\\0004_01_06_03_95.bmp\r\n0004\\0004_01_06_03_96.bmp\r\n0004\\0004_01_06_03_97.bmp\r\n0004\\0004_01_06_03_98.bmp\r\n0004\\0004_01_06_03_99.bmp\r\n0006\\0006_00_06_03_10.bmp\r\n0006\\0006_00_06_03_100.bmp\r\n0006\\0006_00_06_03_101.bmp\r\n0006\\0006_00_06_03_102.bmp\r\n0006\\0006_00_06_03_103.bmp\r\n0006\\0006_00_06_03_104.bmp\r\n0006\\0006_00_06_03_105.bmp\r\n0006\\0006_00_06_03_106.bmp\r\n0006\\0006_00_06_03_107.bmp\r\n0006\\0006_00_06_03_108.bmp\r\n0006\\0006_00_06_03_109.bmp\r\n0006\\0006_00_06_03_11.bmp\r\n0006\\0006_00_06_03_110.bmp\r\n0006\\0006_00_06_03_111.bmp\r\n0006\\0006_00_06_03_112.bmp\r\n0006\\0006_00_06_03_113.bmp\r\n0006\\0006_00_06_03_114.bmp\r\n0006\\0006_00_06_03_115.bmp\r\n0006\\0006_00_06_03_116.bmp\r\n0006\\0006_00_06_03_117.bmp\r\n0006\\0006_00_06_03_118.bmp\r\n0006\\0006_00_06_03_119.bmp\r\n0006\\0006_00_06_03_12.bmp\r\n0006\\0006_00_06_03_120.bmp\r\n0006\\0006_00_06_03_121.bmp\r\n0006\\0006_00_06_03_122.bmp\r\n0006\\0006_00_06_03_123.bmp\r\n0006\\0006_00_06_03_124.bmp\r\n0006\\0006_00_06_03_125.bmp\r\n0006\\0006_00_06_03_126.bmp\r\n0006\\0006_00_06_03_127.bmp\r\n0006\\0006_00_06_03_128.bmp\r\n0006\\0006_00_06_03_129.bmp\r\n0006\\0006_00_06_03_13.bmp\r\n0006\\0006_00_06_03_130.bmp\r\n0006\\0006_00_06_03_131.bmp\r\n0006\\0006_00_06_03_132.bmp\r\n0006\\0006_00_06_03_133.bmp\r\n0006\\0006_00_06_03_134.bmp\r\n0006\\0006_00_06_03_135.bmp\r\n0006\\0006_00_06_03_136.bmp\r\n0006\\0006_00_06_03_137.bmp\r\n0006\\0006_00_06_03_138.bmp\r\n0006\\0006_00_06_03_139.bmp\r\n0006\\0006_00_06_03_14.bmp\r\n0006\\0006_00_06_03_140.bmp\r\n0006\\0006_00_06_03_141.bmp\r\n0006\\0006_00_06_03_142.bmp\r\n0006\\0006_00_06_03_143.bmp\r\n0006\\0006_00_06_03_144.bmp\r\n0006\\0006_00_06_03_145.bmp\r\n0006\\0006_00_06_03_146.bmp\r\n0006\\0006_00_06_03_147.bmp\r\n0006\\0006_00_06_03_148.bmp\r\n0006\\0006_00_06_03_149.bmp\r\n0006\\0006_00_06_03_15.bmp\r\n0006\\0006_00_06_03_150.bmp\r\n0006\\0006_00_06_03_151.bmp\r\n0006\\0006_00_06_03_152.bmp\r\n0006\\0006_00_06_03_153.bmp\r\n0006\\0006_00_06_03_154.bmp\r\n0006\\0006_00_06_03_155.bmp\r\n0006\\0006_00_06_03_156.bmp\r\n0006\\0006_00_06_03_157.bmp\r\n0006\\0006_00_06_03_158.bmp\r\n0006\\0006_00_06_03_159.bmp\r\n0006\\0006_00_06_03_16.bmp\r\n0006\\0006_00_06_03_160.bmp\r\n0006\\0006_00_06_03_161.bmp\r\n0006\\0006_00_06_03_162.bmp\r\n0006\\0006_00_06_03_163.bmp\r\n0006\\0006_00_06_03_164.bmp\r\n0006\\0006_00_06_03_165.bmp\r\n0006\\0006_00_06_03_166.bmp\r\n0006\\0006_00_06_03_167.bmp\r\n0006\\0006_00_06_03_168.bmp\r\n0006\\0006_00_06_03_169.bmp\r\n0006\\0006_00_06_03_17.bmp\r\n0006\\0006_00_06_03_170.bmp\r\n0006\\0006_00_06_03_171.bmp\r\n0006\\0006_00_06_03_172.bmp\r\n0006\\0006_00_06_03_173.bmp\r\n0006\\0006_00_06_03_174.bmp\r\n0006\\0006_00_06_03_175.bmp\r\n0006\\0006_00_06_03_176.bmp\r\n0006\\0006_00_06_03_177.bmp\r\n0006\\0006_00_06_03_178.bmp\r\n0006\\0006_00_06_03_179.bmp\r\n0006\\0006_00_06_03_180.bmp\r\n0006\\0006_00_06_03_181.bmp\r\n0006\\0006_00_06_03_182.bmp\r\n0006\\0006_00_06_03_183.bmp\r\n0006\\0006_00_06_03_184.bmp\r\n0006\\0006_00_06_03_185.bmp\r\n0006\\0006_00_06_03_186.bmp\r\n0006\\0006_00_06_03_187.bmp\r\n0006\\0006_00_06_03_188.bmp\r\n0006\\0006_00_06_03_189.bmp\r\n0006\\0006_00_06_03_190.bmp\r\n0006\\0006_00_06_03_191.bmp\r\n0006\\0006_00_06_03_192.bmp\r\n0006\\0006_00_06_03_193.bmp\r\n0006\\0006_00_06_03_194.bmp\r\n0006\\0006_00_06_03_195.bmp\r\n0006\\0006_00_06_03_196.bmp\r\n0006\\0006_00_06_03_197.bmp\r\n0006\\0006_00_06_03_198.bmp\r\n0006\\0006_00_06_03_199.bmp\r\n0006\\0006_00_06_03_2.bmp\r\n0006\\0006_00_06_03_200.bmp\r\n0006\\0006_00_06_03_201.bmp\r\n0006\\0006_00_06_03_202.bmp\r\n0006\\0006_00_06_03_203.bmp\r\n0006\\0006_00_06_03_204.bmp\r\n0006\\0006_00_06_03_205.bmp\r\n0006\\0006_00_06_03_206.bmp\r\n0006\\0006_00_06_03_207.bmp\r\n0006\\0006_00_06_03_208.bmp\r\n0006\\0006_00_06_03_209.bmp\r\n0006\\0006_00_06_03_210.bmp\r\n0006\\0006_00_06_03_211.bmp\r\n0006\\0006_00_06_03_212.bmp\r\n0006\\0006_00_06_03_213.bmp\r\n0006\\0006_00_06_03_214.bmp\r\n0006\\0006_00_06_03_215.bmp\r\n0006\\0006_00_06_03_216.bmp\r\n0006\\0006_00_06_03_217.bmp\r\n0006\\0006_00_06_03_218.bmp\r\n0006\\0006_00_06_03_219.bmp\r\n0006\\0006_00_06_03_220.bmp\r\n0006\\0006_00_06_03_221.bmp\r\n0006\\0006_00_06_03_222.bmp\r\n0006\\0006_00_06_03_223.bmp\r\n0006\\0006_00_06_03_224.bmp\r\n0006\\0006_00_06_03_225.bmp\r\n0006\\0006_00_06_03_226.bmp\r\n0006\\0006_00_06_03_227.bmp\r\n0006\\0006_00_06_03_228.bmp\r\n0006\\0006_00_06_03_229.bmp\r\n0006\\0006_00_06_03_230.bmp\r\n0006\\0006_00_06_03_231.bmp\r\n0006\\0006_00_06_03_232.bmp\r\n0006\\0006_00_06_03_233.bmp\r\n0006\\0006_00_06_03_234.bmp\r\n0006\\0006_00_06_03_235.bmp\r\n0006\\0006_00_06_03_236.bmp\r\n0006\\0006_00_06_03_237.bmp\r\n0006\\0006_00_06_03_238.bmp\r\n0006\\0006_00_06_03_239.bmp\r\n0006\\0006_00_06_03_24.bmp\r\n0006\\0006_00_06_03_240.bmp\r\n0006\\0006_00_06_03_241.bmp\r\n0006\\0006_00_06_03_242.bmp\r\n0006\\0006_00_06_03_243.bmp\r\n0006\\0006_00_06_03_244.bmp\r\n0006\\0006_00_06_03_245.bmp\r\n0006\\0006_00_06_03_246.bmp\r\n0006\\0006_00_06_03_247.bmp\r\n0006\\0006_00_06_03_248.bmp\r\n0006\\0006_00_06_03_249.bmp\r\n0006\\0006_00_06_03_25.bmp\r\n0006\\0006_00_06_03_250.bmp\r\n0006\\0006_00_06_03_251.bmp\r\n0006\\0006_00_06_03_252.bmp\r\n0006\\0006_00_06_03_253.bmp\r\n0006\\0006_00_06_03_254.bmp\r\n0006\\0006_00_06_03_255.bmp\r\n0006\\0006_00_06_03_256.bmp\r\n0006\\0006_00_06_03_257.bmp\r\n0006\\0006_00_06_03_258.bmp\r\n0006\\0006_00_06_03_259.bmp\r\n0006\\0006_00_06_03_26.bmp\r\n0006\\0006_00_06_03_260.bmp\r\n0006\\0006_00_06_03_261.bmp\r\n0006\\0006_00_06_03_262.bmp\r\n0006\\0006_00_06_03_263.bmp\r\n0006\\0006_00_06_03_264.bmp\r\n0006\\0006_00_06_03_265.bmp\r\n0006\\0006_00_06_03_266.bmp\r\n0006\\0006_00_06_03_267.bmp\r\n0006\\0006_00_06_03_268.bmp\r\n0006\\0006_00_06_03_269.bmp\r\n0006\\0006_00_06_03_27.bmp\r\n0006\\0006_00_06_03_270.bmp\r\n0006\\0006_00_06_03_271.bmp\r\n0006\\0006_00_06_03_272.bmp\r\n0006\\0006_00_06_03_273.bmp\r\n0006\\0006_00_06_03_274.bmp\r\n0006\\0006_00_06_03_275.bmp\r\n0006\\0006_00_06_03_276.bmp\r\n0006\\0006_00_06_03_277.bmp\r\n0006\\0006_00_06_03_278.bmp\r\n0006\\0006_00_06_03_279.bmp\r\n0006\\0006_00_06_03_28.bmp\r\n0006\\0006_00_06_03_280.bmp\r\n0006\\0006_00_06_03_281.bmp\r\n0006\\0006_00_06_03_282.bmp\r\n0006\\0006_00_06_03_283.bmp\r\n0006\\0006_00_06_03_284.bmp\r\n0006\\0006_00_06_03_285.bmp\r\n0006\\0006_00_06_03_286.bmp\r\n0006\\0006_00_06_03_287.bmp\r\n0006\\0006_00_06_03_288.bmp\r\n0006\\0006_00_06_03_289.bmp\r\n0006\\0006_00_06_03_29.bmp\r\n0006\\0006_00_06_03_290.bmp\r\n0006\\0006_00_06_03_291.bmp\r\n0006\\0006_00_06_03_292.bmp\r\n0006\\0006_00_06_03_293.bmp\r\n0006\\0006_00_06_03_294.bmp\r\n0006\\0006_00_06_03_295.bmp\r\n0006\\0006_00_06_03_296.bmp\r\n0006\\0006_00_06_03_297.bmp\r\n0006\\0006_00_06_03_298.bmp\r\n0006\\0006_00_06_03_299.bmp\r\n0006\\0006_00_06_03_3.bmp\r\n0006\\0006_00_06_03_30.bmp\r\n0006\\0006_00_06_03_300.bmp\r\n0006\\0006_00_06_03_301.bmp\r\n0006\\0006_00_06_03_302.bmp\r\n0006\\0006_00_06_03_303.bmp\r\n0006\\0006_00_06_03_304.bmp\r\n0006\\0006_00_06_03_305.bmp\r\n0006\\0006_00_06_03_306.bmp\r\n0006\\0006_00_06_03_307.bmp\r\n0006\\0006_00_06_03_308.bmp\r\n0006\\0006_00_06_03_309.bmp\r\n0006\\0006_00_06_03_31.bmp\r\n0006\\0006_00_06_03_310.bmp\r\n0006\\0006_00_06_03_311.bmp\r\n0006\\0006_00_06_03_312.bmp\r\n0006\\0006_00_06_03_313.bmp\r\n0006\\0006_00_06_03_314.bmp\r\n0006\\0006_00_06_03_315.bmp\r\n0006\\0006_00_06_03_316.bmp\r\n0006\\0006_00_06_03_317.bmp\r\n0006\\0006_00_06_03_318.bmp\r\n0006\\0006_00_06_03_319.bmp\r\n0006\\0006_00_06_03_32.bmp\r\n0006\\0006_00_06_03_320.bmp\r\n0006\\0006_00_06_03_321.bmp\r\n0006\\0006_00_06_03_322.bmp\r\n0006\\0006_00_06_03_323.bmp\r\n0006\\0006_00_06_03_324.bmp\r\n0006\\0006_00_06_03_325.bmp\r\n0006\\0006_00_06_03_326.bmp\r\n0006\\0006_00_06_03_327.bmp\r\n0006\\0006_00_06_03_328.bmp\r\n0006\\0006_00_06_03_329.bmp\r\n0006\\0006_00_06_03_33.bmp\r\n0006\\0006_00_06_03_330.bmp\r\n0006\\0006_00_06_03_331.bmp\r\n0006\\0006_00_06_03_332.bmp\r\n0006\\0006_00_06_03_333.bmp\r\n0006\\0006_00_06_03_334.bmp\r\n0006\\0006_00_06_03_335.bmp\r\n0006\\0006_00_06_03_336.bmp\r\n0006\\0006_00_06_03_337.bmp\r\n0006\\0006_00_06_03_338.bmp\r\n0006\\0006_00_06_03_339.bmp\r\n0006\\0006_00_06_03_34.bmp\r\n0006\\0006_00_06_03_340.bmp\r\n0006\\0006_00_06_03_341.bmp\r\n0006\\0006_00_06_03_342.bmp\r\n0006\\0006_00_06_03_343.bmp\r\n0006\\0006_00_06_03_344.bmp\r\n0006\\0006_00_06_03_345.bmp\r\n0006\\0006_00_06_03_346.bmp\r\n0006\\0006_00_06_03_347.bmp\r\n0006\\0006_00_06_03_348.bmp\r\n0006\\0006_00_06_03_349.bmp\r\n0006\\0006_00_06_03_35.bmp\r\n0006\\0006_00_06_03_350.bmp\r\n0006\\0006_00_06_03_351.bmp\r\n0006\\0006_00_06_03_352.bmp\r\n0006\\0006_00_06_03_353.bmp\r\n0006\\0006_00_06_03_354.bmp\r\n0006\\0006_00_06_03_355.bmp\r\n0006\\0006_00_06_03_356.bmp\r\n0006\\0006_00_06_03_357.bmp\r\n0006\\0006_00_06_03_358.bmp\r\n0006\\0006_00_06_03_359.bmp\r\n0006\\0006_00_06_03_36.bmp\r\n0006\\0006_00_06_03_360.bmp\r\n0006\\0006_00_06_03_361.bmp\r\n0006\\0006_00_06_03_362.bmp\r\n0006\\0006_00_06_03_363.bmp\r\n0006\\0006_00_06_03_364.bmp\r\n0006\\0006_00_06_03_365.bmp\r\n0006\\0006_00_06_03_366.bmp\r\n0006\\0006_00_06_03_367.bmp\r\n0006\\0006_00_06_03_368.bmp\r\n0006\\0006_00_06_03_369.bmp\r\n0006\\0006_00_06_03_37.bmp\r\n0006\\0006_00_06_03_370.bmp\r\n0006\\0006_00_06_03_371.bmp\r\n0006\\0006_00_06_03_372.bmp\r\n0006\\0006_00_06_03_373.bmp\r\n0006\\0006_00_06_03_374.bmp\r\n0006\\0006_00_06_03_375.bmp\r\n0006\\0006_00_06_03_376.bmp\r\n0006\\0006_00_06_03_377.bmp\r\n0006\\0006_00_06_03_378.bmp\r\n0006\\0006_00_06_03_379.bmp\r\n0006\\0006_00_06_03_38.bmp\r\n0006\\0006_00_06_03_380.bmp\r\n0006\\0006_00_06_03_381.bmp\r\n0006\\0006_00_06_03_382.bmp\r\n0006\\0006_00_06_03_383.bmp\r\n0006\\0006_00_06_03_384.bmp\r\n0006\\0006_00_06_03_385.bmp\r\n0006\\0006_00_06_03_386.bmp\r\n0006\\0006_00_06_03_387.bmp\r\n0006\\0006_00_06_03_388.bmp\r\n0006\\0006_00_06_03_389.bmp\r\n0006\\0006_00_06_03_39.bmp\r\n0006\\0006_00_06_03_390.bmp\r\n0006\\0006_00_06_03_391.bmp\r\n0006\\0006_00_06_03_392.bmp\r\n0006\\0006_00_06_03_393.bmp\r\n0006\\0006_00_06_03_394.bmp\r\n0006\\0006_00_06_03_395.bmp\r\n0006\\0006_00_06_03_396.bmp\r\n0006\\0006_00_06_03_397.bmp\r\n0006\\0006_00_06_03_398.bmp\r\n0006\\0006_00_06_03_399.bmp\r\n0006\\0006_00_06_03_4.bmp\r\n0006\\0006_00_06_03_40.bmp\r\n0006\\0006_00_06_03_400.bmp\r\n0006\\0006_00_06_03_401.bmp\r\n0006\\0006_00_06_03_402.bmp\r\n0006\\0006_00_06_03_403.bmp\r\n0006\\0006_00_06_03_404.bmp\r\n0006\\0006_00_06_03_405.bmp\r\n0006\\0006_00_06_03_406.bmp\r\n0006\\0006_00_06_03_407.bmp\r\n0006\\0006_00_06_03_408.bmp\r\n0006\\0006_00_06_03_409.bmp\r\n0006\\0006_00_06_03_41.bmp\r\n0006\\0006_00_06_03_410.bmp\r\n0006\\0006_00_06_03_411.bmp\r\n0006\\0006_00_06_03_412.bmp\r\n0006\\0006_00_06_03_413.bmp\r\n0006\\0006_00_06_03_414.bmp\r\n0006\\0006_00_06_03_415.bmp\r\n0006\\0006_00_06_03_416.bmp\r\n0006\\0006_00_06_03_417.bmp\r\n0006\\0006_00_06_03_418.bmp\r\n0006\\0006_00_06_03_419.bmp\r\n0006\\0006_00_06_03_42.bmp\r\n0006\\0006_00_06_03_420.bmp\r\n0006\\0006_00_06_03_421.bmp\r\n0006\\0006_00_06_03_422.bmp\r\n0006\\0006_00_06_03_423.bmp\r\n0006\\0006_00_06_03_424.bmp\r\n0006\\0006_00_06_03_425.bmp\r\n0006\\0006_00_06_03_426.bmp\r\n0006\\0006_00_06_03_427.bmp\r\n0006\\0006_00_06_03_428.bmp\r\n0006\\0006_00_06_03_429.bmp\r\n0006\\0006_00_06_03_43.bmp\r\n0006\\0006_00_06_03_430.bmp\r\n0006\\0006_00_06_03_431.bmp\r\n0006\\0006_00_06_03_432.bmp\r\n0006\\0006_00_06_03_433.bmp\r\n0006\\0006_00_06_03_434.bmp\r\n0006\\0006_00_06_03_435.bmp\r\n0006\\0006_00_06_03_436.bmp\r\n0006\\0006_00_06_03_437.bmp\r\n0006\\0006_00_06_03_438.bmp\r\n0006\\0006_00_06_03_439.bmp\r\n0006\\0006_00_06_03_44.bmp\r\n0006\\0006_00_06_03_440.bmp\r\n0006\\0006_00_06_03_441.bmp\r\n0006\\0006_00_06_03_442.bmp\r\n0006\\0006_00_06_03_443.bmp\r\n0006\\0006_00_06_03_444.bmp\r\n0006\\0006_00_06_03_445.bmp\r\n0006\\0006_00_06_03_446.bmp\r\n0006\\0006_00_06_03_447.bmp\r\n0006\\0006_00_06_03_448.bmp\r\n0006\\0006_00_06_03_449.bmp\r\n0006\\0006_00_06_03_45.bmp\r\n0006\\0006_00_06_03_450.bmp\r\n0006\\0006_00_06_03_451.bmp\r\n0006\\0006_00_06_03_452.bmp\r\n0006\\0006_00_06_03_453.bmp\r\n0006\\0006_00_06_03_454.bmp\r\n0006\\0006_00_06_03_455.bmp\r\n0006\\0006_00_06_03_456.bmp\r\n0006\\0006_00_06_03_457.bmp\r\n0006\\0006_00_06_03_458.bmp\r\n0006\\0006_00_06_03_459.bmp\r\n0006\\0006_00_06_03_46.bmp\r\n0006\\0006_00_06_03_460.bmp\r\n0006\\0006_00_06_03_461.bmp\r\n0006\\0006_00_06_03_462.bmp\r\n0006\\0006_00_06_03_463.bmp\r\n0006\\0006_00_06_03_464.bmp\r\n0006\\0006_00_06_03_465.bmp\r\n0006\\0006_00_06_03_466.bmp\r\n0006\\0006_00_06_03_467.bmp\r\n0006\\0006_00_06_03_468.bmp\r\n0006\\0006_00_06_03_469.bmp\r\n0006\\0006_00_06_03_47.bmp\r\n0006\\0006_00_06_03_470.bmp\r\n0006\\0006_00_06_03_471.bmp\r\n0006\\0006_00_06_03_472.bmp\r\n0006\\0006_00_06_03_473.bmp\r\n0006\\0006_00_06_03_474.bmp\r\n0006\\0006_00_06_03_475.bmp\r\n0006\\0006_00_06_03_476.bmp\r\n0006\\0006_00_06_03_477.bmp\r\n0006\\0006_00_06_03_478.bmp\r\n0006\\0006_00_06_03_479.bmp\r\n0006\\0006_00_06_03_48.bmp\r\n0006\\0006_00_06_03_480.bmp\r\n0006\\0006_00_06_03_481.bmp\r\n0006\\0006_00_06_03_482.bmp\r\n0006\\0006_00_06_03_483.bmp\r\n0006\\0006_00_06_03_484.bmp\r\n0006\\0006_00_06_03_485.bmp\r\n0006\\0006_00_06_03_486.bmp\r\n0006\\0006_00_06_03_487.bmp\r\n0006\\0006_00_06_03_488.bmp\r\n0006\\0006_00_06_03_489.bmp\r\n0006\\0006_00_06_03_49.bmp\r\n0006\\0006_00_06_03_490.bmp\r\n0006\\0006_00_06_03_491.bmp\r\n0006\\0006_00_06_03_492.bmp\r\n0006\\0006_00_06_03_493.bmp\r\n0006\\0006_00_06_03_494.bmp\r\n0006\\0006_00_06_03_495.bmp\r\n0006\\0006_00_06_03_496.bmp\r\n0006\\0006_00_06_03_497.bmp\r\n0006\\0006_00_06_03_498.bmp\r\n0006\\0006_00_06_03_499.bmp\r\n0006\\0006_00_06_03_5.bmp\r\n0006\\0006_00_06_03_50.bmp\r\n0006\\0006_00_06_03_51.bmp\r\n0006\\0006_00_06_03_52.bmp\r\n0006\\0006_00_06_03_53.bmp\r\n0006\\0006_00_06_03_54.bmp\r\n0006\\0006_00_06_03_55.bmp\r\n0006\\0006_00_06_03_56.bmp\r\n0006\\0006_00_06_03_57.bmp\r\n0006\\0006_00_06_03_58.bmp\r\n0006\\0006_00_06_03_59.bmp\r\n0006\\0006_00_06_03_6.bmp\r\n0006\\0006_00_06_03_60.bmp\r\n0006\\0006_00_06_03_61.bmp\r\n0006\\0006_00_06_03_62.bmp\r\n0006\\0006_00_06_03_63.bmp\r\n0006\\0006_00_06_03_64.bmp\r\n0006\\0006_00_06_03_65.bmp\r\n0006\\0006_00_06_03_66.bmp\r\n0006\\0006_00_06_03_67.bmp\r\n0006\\0006_00_06_03_68.bmp\r\n0006\\0006_00_06_03_69.bmp\r\n0006\\0006_00_06_03_7.bmp\r\n0006\\0006_00_06_03_70.bmp\r\n0006\\0006_00_06_03_71.bmp\r\n0006\\0006_00_06_03_72.bmp\r\n0006\\0006_00_06_03_73.bmp\r\n0006\\0006_00_06_03_74.bmp\r\n0006\\0006_00_06_03_75.bmp\r\n0006\\0006_00_06_03_76.bmp\r\n0006\\0006_00_06_03_77.bmp\r\n0006\\0006_00_06_03_78.bmp\r\n0006\\0006_00_06_03_79.bmp\r\n0006\\0006_00_06_03_8.bmp\r\n0006\\0006_00_06_03_80.bmp\r\n0006\\0006_00_06_03_81.bmp\r\n0006\\0006_00_06_03_82.bmp\r\n0006\\0006_00_06_03_83.bmp\r\n0006\\0006_00_06_03_84.bmp\r\n0006\\0006_00_06_03_85.bmp\r\n0006\\0006_00_06_03_86.bmp\r\n0006\\0006_00_06_03_87.bmp\r\n0006\\0006_00_06_03_88.bmp\r\n0006\\0006_00_06_03_89.bmp\r\n0006\\0006_00_06_03_9.bmp\r\n0006\\0006_00_06_03_90.bmp\r\n0006\\0006_00_06_03_91.bmp\r\n0006\\0006_00_06_03_92.bmp\r\n0006\\0006_00_06_03_93.bmp\r\n0006\\0006_00_06_03_94.bmp\r\n0006\\0006_00_06_03_95.bmp\r\n0006\\0006_00_06_03_96.bmp\r\n0006\\0006_00_06_03_97.bmp\r\n0006\\0006_00_06_03_98.bmp\r\n0006\\0006_00_06_03_99.bmp\r\n0013\\0013_01_07_03_0.bmp\r\n0013\\0013_01_07_03_1.bmp\r\n0013\\0013_01_07_03_10.bmp\r\n0013\\0013_01_07_03_103.bmp\r\n0013\\0013_01_07_03_104.bmp\r\n0013\\0013_01_07_03_105.bmp\r\n0013\\0013_01_07_03_106.bmp\r\n0013\\0013_01_07_03_107.bmp\r\n0013\\0013_01_07_03_108.bmp\r\n0013\\0013_01_07_03_109.bmp\r\n0013\\0013_01_07_03_11.bmp\r\n0013\\0013_01_07_03_110.bmp\r\n0013\\0013_01_07_03_111.bmp\r\n0013\\0013_01_07_03_112.bmp\r\n0013\\0013_01_07_03_113.bmp\r\n0013\\0013_01_07_03_114.bmp\r\n0013\\0013_01_07_03_115.bmp\r\n0013\\0013_01_07_03_116.bmp\r\n0013\\0013_01_07_03_117.bmp\r\n0013\\0013_01_07_03_118.bmp\r\n0013\\0013_01_07_03_119.bmp\r\n0013\\0013_01_07_03_12.bmp\r\n0013\\0013_01_07_03_120.bmp\r\n0013\\0013_01_07_03_121.bmp\r\n0013\\0013_01_07_03_122.bmp\r\n0013\\0013_01_07_03_123.bmp\r\n0013\\0013_01_07_03_124.bmp\r\n0013\\0013_01_07_03_125.bmp\r\n0013\\0013_01_07_03_126.bmp\r\n0013\\0013_01_07_03_127.bmp\r\n0013\\0013_01_07_03_128.bmp\r\n0013\\0013_01_07_03_129.bmp\r\n0013\\0013_01_07_03_13.bmp\r\n0013\\0013_01_07_03_130.bmp\r\n0013\\0013_01_07_03_131.bmp\r\n0013\\0013_01_07_03_132.bmp\r\n0013\\0013_01_07_03_133.bmp\r\n0013\\0013_01_07_03_134.bmp\r\n0013\\0013_01_07_03_135.bmp\r\n0013\\0013_01_07_03_136.bmp\r\n0013\\0013_01_07_03_137.bmp\r\n0013\\0013_01_07_03_138.bmp\r\n0013\\0013_01_07_03_139.bmp\r\n0013\\0013_01_07_03_14.bmp\r\n0013\\0013_01_07_03_140.bmp\r\n0013\\0013_01_07_03_141.bmp\r\n0013\\0013_01_07_03_142.bmp\r\n0013\\0013_01_07_03_143.bmp\r\n0013\\0013_01_07_03_144.bmp\r\n0013\\0013_01_07_03_145.bmp\r\n0013\\0013_01_07_03_146.bmp\r\n0013\\0013_01_07_03_147.bmp\r\n0013\\0013_01_07_03_148.bmp\r\n0013\\0013_01_07_03_149.bmp\r\n0013\\0013_01_07_03_15.bmp\r\n0013\\0013_01_07_03_150.bmp\r\n0013\\0013_01_07_03_151.bmp\r\n0013\\0013_01_07_03_152.bmp\r\n0013\\0013_01_07_03_153.bmp\r\n0013\\0013_01_07_03_154.bmp\r\n0013\\0013_01_07_03_155.bmp\r\n0013\\0013_01_07_03_156.bmp\r\n0013\\0013_01_07_03_157.bmp\r\n0013\\0013_01_07_03_158.bmp\r\n0013\\0013_01_07_03_159.bmp\r\n0013\\0013_01_07_03_16.bmp\r\n0013\\0013_01_07_03_160.bmp\r\n0013\\0013_01_07_03_161.bmp\r\n0013\\0013_01_07_03_162.bmp\r\n0013\\0013_01_07_03_163.bmp\r\n0013\\0013_01_07_03_164.bmp\r\n0013\\0013_01_07_03_165.bmp\r\n0013\\0013_01_07_03_166.bmp\r\n0013\\0013_01_07_03_167.bmp\r\n0013\\0013_01_07_03_168.bmp\r\n0013\\0013_01_07_03_169.bmp\r\n0013\\0013_01_07_03_17.bmp\r\n0013\\0013_01_07_03_170.bmp\r\n0013\\0013_01_07_03_171.bmp\r\n0013\\0013_01_07_03_172.bmp\r\n0013\\0013_01_07_03_173.bmp\r\n0013\\0013_01_07_03_174.bmp\r\n0013\\0013_01_07_03_175.bmp\r\n0013\\0013_01_07_03_18.bmp\r\n0013\\0013_01_07_03_181.bmp\r\n0013\\0013_01_07_03_182.bmp\r\n0013\\0013_01_07_03_183.bmp\r\n0013\\0013_01_07_03_184.bmp\r\n0013\\0013_01_07_03_185.bmp\r\n0013\\0013_01_07_03_186.bmp\r\n0013\\0013_01_07_03_187.bmp\r\n0013\\0013_01_07_03_188.bmp\r\n0013\\0013_01_07_03_189.bmp\r\n0013\\0013_01_07_03_19.bmp\r\n0013\\0013_01_07_03_190.bmp\r\n0013\\0013_01_07_03_191.bmp\r\n0013\\0013_01_07_03_192.bmp\r\n0013\\0013_01_07_03_193.bmp\r\n0013\\0013_01_07_03_194.bmp\r\n0013\\0013_01_07_03_195.bmp\r\n0013\\0013_01_07_03_196.bmp\r\n0013\\0013_01_07_03_197.bmp\r\n0013\\0013_01_07_03_198.bmp\r\n0013\\0013_01_07_03_199.bmp\r\n0013\\0013_01_07_03_2.bmp\r\n0013\\0013_01_07_03_20.bmp\r\n0013\\0013_01_07_03_200.bmp\r\n0013\\0013_01_07_03_201.bmp\r\n0013\\0013_01_07_03_202.bmp\r\n0013\\0013_01_07_03_203.bmp\r\n0013\\0013_01_07_03_204.bmp\r\n0013\\0013_01_07_03_205.bmp\r\n0013\\0013_01_07_03_206.bmp\r\n0013\\0013_01_07_03_207.bmp\r\n0013\\0013_01_07_03_208.bmp\r\n0013\\0013_01_07_03_209.bmp\r\n0013\\0013_01_07_03_21.bmp\r\n0013\\0013_01_07_03_210.bmp\r\n0013\\0013_01_07_03_211.bmp\r\n0013\\0013_01_07_03_212.bmp\r\n0013\\0013_01_07_03_213.bmp\r\n0013\\0013_01_07_03_214.bmp\r\n0013\\0013_01_07_03_215.bmp\r\n0013\\0013_01_07_03_216.bmp\r\n0013\\0013_01_07_03_217.bmp\r\n0013\\0013_01_07_03_218.bmp\r\n0013\\0013_01_07_03_219.bmp\r\n0013\\0013_01_07_03_22.bmp\r\n0013\\0013_01_07_03_220.bmp\r\n0013\\0013_01_07_03_221.bmp\r\n0013\\0013_01_07_03_222.bmp\r\n0013\\0013_01_07_03_223.bmp\r\n0013\\0013_01_07_03_224.bmp\r\n0013\\0013_01_07_03_225.bmp\r\n0013\\0013_01_07_03_226.bmp\r\n0013\\0013_01_07_03_227.bmp\r\n0013\\0013_01_07_03_228.bmp\r\n0013\\0013_01_07_03_229.bmp\r\n0013\\0013_01_07_03_23.bmp\r\n0013\\0013_01_07_03_230.bmp\r\n0013\\0013_01_07_03_231.bmp\r\n0013\\0013_01_07_03_232.bmp\r\n0013\\0013_01_07_03_233.bmp\r\n0013\\0013_01_07_03_234.bmp\r\n0013\\0013_01_07_03_235.bmp\r\n0013\\0013_01_07_03_236.bmp\r\n0013\\0013_01_07_03_237.bmp\r\n0013\\0013_01_07_03_238.bmp\r\n0013\\0013_01_07_03_239.bmp\r\n0013\\0013_01_07_03_24.bmp\r\n0013\\0013_01_07_03_240.bmp\r\n0013\\0013_01_07_03_241.bmp\r\n0013\\0013_01_07_03_242.bmp\r\n0013\\0013_01_07_03_243.bmp\r\n0013\\0013_01_07_03_244.bmp\r\n0013\\0013_01_07_03_245.bmp\r\n0013\\0013_01_07_03_246.bmp\r\n0013\\0013_01_07_03_247.bmp\r\n0013\\0013_01_07_03_248.bmp\r\n0013\\0013_01_07_03_249.bmp\r\n0013\\0013_01_07_03_25.bmp\r\n0013\\0013_01_07_03_250.bmp\r\n0013\\0013_01_07_03_251.bmp\r\n0013\\0013_01_07_03_252.bmp\r\n0013\\0013_01_07_03_253.bmp\r\n0013\\0013_01_07_03_254.bmp\r\n0013\\0013_01_07_03_255.bmp\r\n0013\\0013_01_07_03_256.bmp\r\n0013\\0013_01_07_03_257.bmp\r\n0013\\0013_01_07_03_258.bmp\r\n0013\\0013_01_07_03_259.bmp\r\n0013\\0013_01_07_03_26.bmp\r\n0013\\0013_01_07_03_260.bmp\r\n0013\\0013_01_07_03_261.bmp\r\n0013\\0013_01_07_03_262.bmp\r\n0013\\0013_01_07_03_263.bmp\r\n0013\\0013_01_07_03_264.bmp\r\n0013\\0013_01_07_03_265.bmp\r\n0013\\0013_01_07_03_266.bmp\r\n0013\\0013_01_07_03_267.bmp\r\n0013\\0013_01_07_03_268.bmp\r\n0013\\0013_01_07_03_269.bmp\r\n0013\\0013_01_07_03_27.bmp\r\n0013\\0013_01_07_03_270.bmp\r\n0013\\0013_01_07_03_271.bmp\r\n0013\\0013_01_07_03_272.bmp\r\n0013\\0013_01_07_03_273.bmp\r\n0013\\0013_01_07_03_274.bmp\r\n0013\\0013_01_07_03_275.bmp\r\n0013\\0013_01_07_03_276.bmp\r\n0013\\0013_01_07_03_277.bmp\r\n0013\\0013_01_07_03_278.bmp\r\n0013\\0013_01_07_03_279.bmp\r\n0013\\0013_01_07_03_28.bmp\r\n0013\\0013_01_07_03_280.bmp\r\n0013\\0013_01_07_03_281.bmp\r\n0013\\0013_01_07_03_282.bmp\r\n0013\\0013_01_07_03_283.bmp\r\n0013\\0013_01_07_03_284.bmp\r\n0013\\0013_01_07_03_285.bmp\r\n0013\\0013_01_07_03_286.bmp\r\n0013\\0013_01_07_03_287.bmp\r\n0013\\0013_01_07_03_288.bmp\r\n0013\\0013_01_07_03_289.bmp\r\n0013\\0013_01_07_03_29.bmp\r\n0013\\0013_01_07_03_290.bmp\r\n0013\\0013_01_07_03_291.bmp\r\n0013\\0013_01_07_03_292.bmp\r\n0013\\0013_01_07_03_293.bmp\r\n0013\\0013_01_07_03_294.bmp\r\n0013\\0013_01_07_03_295.bmp\r\n0013\\0013_01_07_03_296.bmp\r\n0013\\0013_01_07_03_297.bmp\r\n0013\\0013_01_07_03_298.bmp\r\n0013\\0013_01_07_03_299.bmp\r\n0013\\0013_01_07_03_3.bmp\r\n0013\\0013_01_07_03_30.bmp\r\n0013\\0013_01_07_03_300.bmp\r\n0013\\0013_01_07_03_301.bmp\r\n0013\\0013_01_07_03_302.bmp\r\n0013\\0013_01_07_03_303.bmp\r\n0013\\0013_01_07_03_304.bmp\r\n0013\\0013_01_07_03_305.bmp\r\n0013\\0013_01_07_03_306.bmp\r\n0013\\0013_01_07_03_307.bmp\r\n0013\\0013_01_07_03_308.bmp\r\n0013\\0013_01_07_03_309.bmp\r\n0013\\0013_01_07_03_31.bmp\r\n0013\\0013_01_07_03_310.bmp\r\n0013\\0013_01_07_03_311.bmp\r\n0013\\0013_01_07_03_312.bmp\r\n0013\\0013_01_07_03_313.bmp\r\n0013\\0013_01_07_03_314.bmp\r\n0013\\0013_01_07_03_315.bmp\r\n0013\\0013_01_07_03_316.bmp\r\n0013\\0013_01_07_03_317.bmp\r\n0013\\0013_01_07_03_318.bmp\r\n0013\\0013_01_07_03_319.bmp\r\n0013\\0013_01_07_03_32.bmp\r\n0013\\0013_01_07_03_320.bmp\r\n0013\\0013_01_07_03_321.bmp\r\n0013\\0013_01_07_03_322.bmp\r\n0013\\0013_01_07_03_323.bmp\r\n0013\\0013_01_07_03_324.bmp\r\n0013\\0013_01_07_03_325.bmp\r\n0013\\0013_01_07_03_326.bmp\r\n0013\\0013_01_07_03_327.bmp\r\n0013\\0013_01_07_03_328.bmp\r\n0013\\0013_01_07_03_329.bmp\r\n0013\\0013_01_07_03_33.bmp\r\n0013\\0013_01_07_03_330.bmp\r\n0013\\0013_01_07_03_331.bmp\r\n0013\\0013_01_07_03_332.bmp\r\n0013\\0013_01_07_03_333.bmp\r\n0013\\0013_01_07_03_334.bmp\r\n0013\\0013_01_07_03_335.bmp\r\n0013\\0013_01_07_03_336.bmp\r\n0013\\0013_01_07_03_337.bmp\r\n0013\\0013_01_07_03_338.bmp\r\n0013\\0013_01_07_03_339.bmp\r\n0013\\0013_01_07_03_34.bmp\r\n0013\\0013_01_07_03_340.bmp\r\n0013\\0013_01_07_03_341.bmp\r\n0013\\0013_01_07_03_342.bmp\r\n0013\\0013_01_07_03_343.bmp\r\n0013\\0013_01_07_03_344.bmp\r\n0013\\0013_01_07_03_345.bmp\r\n0013\\0013_01_07_03_346.bmp\r\n0013\\0013_01_07_03_347.bmp\r\n0013\\0013_01_07_03_348.bmp\r\n0013\\0013_01_07_03_349.bmp\r\n0013\\0013_01_07_03_35.bmp\r\n0013\\0013_01_07_03_350.bmp\r\n0013\\0013_01_07_03_351.bmp\r\n0013\\0013_01_07_03_352.bmp\r\n0013\\0013_01_07_03_353.bmp\r\n0013\\0013_01_07_03_354.bmp\r\n0013\\0013_01_07_03_355.bmp\r\n0013\\0013_01_07_03_356.bmp\r\n0013\\0013_01_07_03_357.bmp\r\n0013\\0013_01_07_03_358.bmp\r\n0013\\0013_01_07_03_359.bmp\r\n0013\\0013_01_07_03_36.bmp\r\n0013\\0013_01_07_03_360.bmp\r\n0013\\0013_01_07_03_361.bmp\r\n0013\\0013_01_07_03_362.bmp\r\n0013\\0013_01_07_03_363.bmp\r\n0013\\0013_01_07_03_364.bmp\r\n0013\\0013_01_07_03_365.bmp\r\n0013\\0013_01_07_03_366.bmp\r\n0013\\0013_01_07_03_367.bmp\r\n0013\\0013_01_07_03_368.bmp\r\n0013\\0013_01_07_03_369.bmp\r\n0013\\0013_01_07_03_37.bmp\r\n0013\\0013_01_07_03_370.bmp\r\n0013\\0013_01_07_03_371.bmp\r\n0013\\0013_01_07_03_372.bmp\r\n0013\\0013_01_07_03_373.bmp\r\n0013\\0013_01_07_03_374.bmp\r\n0013\\0013_01_07_03_375.bmp\r\n0013\\0013_01_07_03_376.bmp\r\n0013\\0013_01_07_03_377.bmp\r\n0013\\0013_01_07_03_378.bmp\r\n0013\\0013_01_07_03_379.bmp\r\n0013\\0013_01_07_03_38.bmp\r\n0013\\0013_01_07_03_380.bmp\r\n0013\\0013_01_07_03_381.bmp\r\n0013\\0013_01_07_03_382.bmp\r\n0013\\0013_01_07_03_383.bmp\r\n0013\\0013_01_07_03_384.bmp\r\n0013\\0013_01_07_03_385.bmp\r\n0013\\0013_01_07_03_386.bmp\r\n0013\\0013_01_07_03_387.bmp\r\n0013\\0013_01_07_03_388.bmp\r\n0013\\0013_01_07_03_389.bmp\r\n0013\\0013_01_07_03_39.bmp\r\n0013\\0013_01_07_03_390.bmp\r\n0013\\0013_01_07_03_391.bmp\r\n0013\\0013_01_07_03_392.bmp\r\n0013\\0013_01_07_03_393.bmp\r\n0013\\0013_01_07_03_394.bmp\r\n0013\\0013_01_07_03_395.bmp\r\n0013\\0013_01_07_03_396.bmp\r\n0013\\0013_01_07_03_397.bmp\r\n0013\\0013_01_07_03_398.bmp\r\n0013\\0013_01_07_03_399.bmp\r\n0013\\0013_01_07_03_4.bmp\r\n0013\\0013_01_07_03_40.bmp\r\n0013\\0013_01_07_03_400.bmp\r\n0013\\0013_01_07_03_401.bmp\r\n0013\\0013_01_07_03_402.bmp\r\n0013\\0013_01_07_03_403.bmp\r\n0013\\0013_01_07_03_404.bmp\r\n0013\\0013_01_07_03_405.bmp\r\n0013\\0013_01_07_03_406.bmp\r\n0013\\0013_01_07_03_407.bmp\r\n0013\\0013_01_07_03_408.bmp\r\n0013\\0013_01_07_03_409.bmp\r\n0013\\0013_01_07_03_41.bmp\r\n0013\\0013_01_07_03_410.bmp\r\n0013\\0013_01_07_03_411.bmp\r\n0013\\0013_01_07_03_412.bmp\r\n0013\\0013_01_07_03_413.bmp\r\n0013\\0013_01_07_03_414.bmp\r\n0013\\0013_01_07_03_415.bmp\r\n0013\\0013_01_07_03_416.bmp\r\n0013\\0013_01_07_03_417.bmp\r\n0013\\0013_01_07_03_418.bmp\r\n0013\\0013_01_07_03_419.bmp\r\n0013\\0013_01_07_03_42.bmp\r\n0013\\0013_01_07_03_420.bmp\r\n0013\\0013_01_07_03_421.bmp\r\n0013\\0013_01_07_03_422.bmp\r\n0013\\0013_01_07_03_423.bmp\r\n0013\\0013_01_07_03_424.bmp\r\n0013\\0013_01_07_03_425.bmp\r\n0013\\0013_01_07_03_426.bmp\r\n0013\\0013_01_07_03_427.bmp\r\n0013\\0013_01_07_03_428.bmp\r\n0013\\0013_01_07_03_429.bmp\r\n0013\\0013_01_07_03_43.bmp\r\n0013\\0013_01_07_03_430.bmp\r\n0013\\0013_01_07_03_431.bmp\r\n0013\\0013_01_07_03_432.bmp\r\n0013\\0013_01_07_03_433.bmp\r\n0013\\0013_01_07_03_434.bmp\r\n0013\\0013_01_07_03_435.bmp\r\n0013\\0013_01_07_03_436.bmp\r\n0013\\0013_01_07_03_437.bmp\r\n0013\\0013_01_07_03_438.bmp\r\n0013\\0013_01_07_03_439.bmp\r\n0013\\0013_01_07_03_44.bmp\r\n0013\\0013_01_07_03_440.bmp\r\n0013\\0013_01_07_03_441.bmp\r\n0013\\0013_01_07_03_442.bmp\r\n0013\\0013_01_07_03_443.bmp\r\n0013\\0013_01_07_03_444.bmp\r\n0013\\0013_01_07_03_445.bmp\r\n0013\\0013_01_07_03_446.bmp\r\n0013\\0013_01_07_03_447.bmp\r\n0013\\0013_01_07_03_448.bmp\r\n0013\\0013_01_07_03_449.bmp\r\n0013\\0013_01_07_03_45.bmp\r\n0013\\0013_01_07_03_450.bmp\r\n0013\\0013_01_07_03_451.bmp\r\n0013\\0013_01_07_03_452.bmp\r\n0013\\0013_01_07_03_453.bmp\r\n0013\\0013_01_07_03_454.bmp\r\n0013\\0013_01_07_03_455.bmp\r\n0013\\0013_01_07_03_456.bmp\r\n0013\\0013_01_07_03_457.bmp\r\n0013\\0013_01_07_03_458.bmp\r\n0013\\0013_01_07_03_459.bmp\r\n0013\\0013_01_07_03_46.bmp\r\n0013\\0013_01_07_03_460.bmp\r\n0013\\0013_01_07_03_461.bmp\r\n0013\\0013_01_07_03_462.bmp\r\n0013\\0013_01_07_03_463.bmp\r\n0013\\0013_01_07_03_464.bmp\r\n0013\\0013_01_07_03_465.bmp\r\n0013\\0013_01_07_03_466.bmp\r\n0013\\0013_01_07_03_467.bmp\r\n0013\\0013_01_07_03_468.bmp\r\n0013\\0013_01_07_03_469.bmp\r\n0013\\0013_01_07_03_47.bmp\r\n0013\\0013_01_07_03_470.bmp\r\n0013\\0013_01_07_03_471.bmp\r\n0013\\0013_01_07_03_472.bmp\r\n0013\\0013_01_07_03_473.bmp\r\n0013\\0013_01_07_03_474.bmp\r\n0013\\0013_01_07_03_475.bmp\r\n0013\\0013_01_07_03_476.bmp\r\n0013\\0013_01_07_03_477.bmp\r\n0013\\0013_01_07_03_478.bmp\r\n0013\\0013_01_07_03_479.bmp\r\n0013\\0013_01_07_03_48.bmp\r\n0013\\0013_01_07_03_480.bmp\r\n0013\\0013_01_07_03_481.bmp\r\n0013\\0013_01_07_03_482.bmp\r\n0013\\0013_01_07_03_483.bmp\r\n0013\\0013_01_07_03_484.bmp\r\n0013\\0013_01_07_03_485.bmp\r\n0013\\0013_01_07_03_486.bmp\r\n0013\\0013_01_07_03_487.bmp\r\n0013\\0013_01_07_03_488.bmp\r\n0013\\0013_01_07_03_489.bmp\r\n0013\\0013_01_07_03_49.bmp\r\n0013\\0013_01_07_03_490.bmp\r\n0013\\0013_01_07_03_491.bmp\r\n0013\\0013_01_07_03_492.bmp\r\n0013\\0013_01_07_03_493.bmp\r\n0013\\0013_01_07_03_494.bmp\r\n0013\\0013_01_07_03_495.bmp\r\n0013\\0013_01_07_03_496.bmp\r\n0013\\0013_01_07_03_497.bmp\r\n0013\\0013_01_07_03_498.bmp\r\n0013\\0013_01_07_03_499.bmp\r\n0013\\0013_01_07_03_5.bmp\r\n0013\\0013_01_07_03_50.bmp\r\n0013\\0013_01_07_03_51.bmp\r\n0013\\0013_01_07_03_52.bmp\r\n0013\\0013_01_07_03_53.bmp\r\n0013\\0013_01_07_03_54.bmp\r\n0013\\0013_01_07_03_55.bmp\r\n0013\\0013_01_07_03_56.bmp\r\n0013\\0013_01_07_03_57.bmp\r\n0013\\0013_01_07_03_58.bmp\r\n0013\\0013_01_07_03_59.bmp\r\n0013\\0013_01_07_03_6.bmp\r\n0013\\0013_01_07_03_60.bmp\r\n0013\\0013_01_07_03_61.bmp\r\n0013\\0013_01_07_03_62.bmp\r\n0013\\0013_01_07_03_63.bmp\r\n0013\\0013_01_07_03_64.bmp\r\n0013\\0013_01_07_03_65.bmp\r\n0013\\0013_01_07_03_66.bmp\r\n0013\\0013_01_07_03_67.bmp\r\n0013\\0013_01_07_03_68.bmp\r\n0013\\0013_01_07_03_69.bmp\r\n0013\\0013_01_07_03_7.bmp\r\n0013\\0013_01_07_03_70.bmp\r\n0013\\0013_01_07_03_71.bmp\r\n0013\\0013_01_07_03_72.bmp\r\n0013\\0013_01_07_03_73.bmp\r\n0013\\0013_01_07_03_74.bmp\r\n0013\\0013_01_07_03_75.bmp\r\n0013\\0013_01_07_03_76.bmp\r\n0013\\0013_01_07_03_8.bmp\r\n0013\\0013_01_07_03_84.bmp\r\n0013\\0013_01_07_03_85.bmp\r\n0013\\0013_01_07_03_86.bmp\r\n0013\\0013_01_07_03_9.bmp\r\n0012\\0012_01_07_03_0.bmp\r\n0012\\0012_01_07_03_1.bmp\r\n0012\\0012_01_07_03_10.bmp\r\n0012\\0012_01_07_03_100.bmp\r\n0012\\0012_01_07_03_101.bmp\r\n0012\\0012_01_07_03_102.bmp\r\n0012\\0012_01_07_03_103.bmp\r\n0012\\0012_01_07_03_104.bmp\r\n0012\\0012_01_07_03_105.bmp\r\n0012\\0012_01_07_03_106.bmp\r\n0012\\0012_01_07_03_107.bmp\r\n0012\\0012_01_07_03_108.bmp\r\n0012\\0012_01_07_03_109.bmp\r\n0012\\0012_01_07_03_11.bmp\r\n0012\\0012_01_07_03_111.bmp\r\n0012\\0012_01_07_03_112.bmp\r\n0012\\0012_01_07_03_113.bmp\r\n0012\\0012_01_07_03_115.bmp\r\n0012\\0012_01_07_03_117.bmp\r\n0012\\0012_01_07_03_118.bmp\r\n0012\\0012_01_07_03_119.bmp\r\n0012\\0012_01_07_03_12.bmp\r\n0012\\0012_01_07_03_120.bmp\r\n0012\\0012_01_07_03_121.bmp\r\n0012\\0012_01_07_03_122.bmp\r\n0012\\0012_01_07_03_124.bmp\r\n0012\\0012_01_07_03_125.bmp\r\n0012\\0012_01_07_03_127.bmp\r\n0012\\0012_01_07_03_128.bmp\r\n0012\\0012_01_07_03_129.bmp\r\n0012\\0012_01_07_03_13.bmp\r\n0012\\0012_01_07_03_130.bmp\r\n0012\\0012_01_07_03_131.bmp\r\n0012\\0012_01_07_03_132.bmp\r\n0012\\0012_01_07_03_133.bmp\r\n0012\\0012_01_07_03_134.bmp\r\n0012\\0012_01_07_03_135.bmp\r\n0012\\0012_01_07_03_136.bmp\r\n0012\\0012_01_07_03_137.bmp\r\n0012\\0012_01_07_03_138.bmp\r\n0012\\0012_01_07_03_139.bmp\r\n0012\\0012_01_07_03_14.bmp\r\n0012\\0012_01_07_03_140.bmp\r\n0012\\0012_01_07_03_141.bmp\r\n0012\\0012_01_07_03_142.bmp\r\n0012\\0012_01_07_03_143.bmp\r\n0012\\0012_01_07_03_144.bmp\r\n0012\\0012_01_07_03_145.bmp\r\n0012\\0012_01_07_03_146.bmp\r\n0012\\0012_01_07_03_147.bmp\r\n0012\\0012_01_07_03_148.bmp\r\n0012\\0012_01_07_03_149.bmp\r\n0012\\0012_01_07_03_15.bmp\r\n0012\\0012_01_07_03_150.bmp\r\n0012\\0012_01_07_03_151.bmp\r\n0012\\0012_01_07_03_152.bmp\r\n0012\\0012_01_07_03_153.bmp\r\n0012\\0012_01_07_03_154.bmp\r\n0012\\0012_01_07_03_155.bmp\r\n0012\\0012_01_07_03_156.bmp\r\n0012\\0012_01_07_03_157.bmp\r\n0012\\0012_01_07_03_158.bmp\r\n0012\\0012_01_07_03_159.bmp\r\n0012\\0012_01_07_03_16.bmp\r\n0012\\0012_01_07_03_160.bmp\r\n0012\\0012_01_07_03_161.bmp\r\n0012\\0012_01_07_03_162.bmp\r\n0012\\0012_01_07_03_163.bmp\r\n0012\\0012_01_07_03_164.bmp\r\n0012\\0012_01_07_03_165.bmp\r\n0012\\0012_01_07_03_166.bmp\r\n0012\\0012_01_07_03_167.bmp\r\n0012\\0012_01_07_03_168.bmp\r\n0012\\0012_01_07_03_169.bmp\r\n0012\\0012_01_07_03_17.bmp\r\n0012\\0012_01_07_03_170.bmp\r\n0012\\0012_01_07_03_171.bmp\r\n0012\\0012_01_07_03_172.bmp\r\n0012\\0012_01_07_03_173.bmp\r\n0012\\0012_01_07_03_174.bmp\r\n0012\\0012_01_07_03_175.bmp\r\n0012\\0012_01_07_03_176.bmp\r\n0012\\0012_01_07_03_177.bmp\r\n0012\\0012_01_07_03_178.bmp\r\n0012\\0012_01_07_03_179.bmp\r\n0012\\0012_01_07_03_18.bmp\r\n0012\\0012_01_07_03_180.bmp\r\n0012\\0012_01_07_03_181.bmp\r\n0012\\0012_01_07_03_182.bmp\r\n0012\\0012_01_07_03_183.bmp\r\n0012\\0012_01_07_03_184.bmp\r\n0012\\0012_01_07_03_185.bmp\r\n0012\\0012_01_07_03_186.bmp\r\n0012\\0012_01_07_03_187.bmp\r\n0012\\0012_01_07_03_188.bmp\r\n0012\\0012_01_07_03_189.bmp\r\n0012\\0012_01_07_03_19.bmp\r\n0012\\0012_01_07_03_190.bmp\r\n0012\\0012_01_07_03_191.bmp\r\n0012\\0012_01_07_03_192.bmp\r\n0012\\0012_01_07_03_193.bmp\r\n0012\\0012_01_07_03_194.bmp\r\n0012\\0012_01_07_03_195.bmp\r\n0012\\0012_01_07_03_196.bmp\r\n0012\\0012_01_07_03_197.bmp\r\n0012\\0012_01_07_03_198.bmp\r\n0012\\0012_01_07_03_199.bmp\r\n0012\\0012_01_07_03_2.bmp\r\n0012\\0012_01_07_03_20.bmp\r\n0012\\0012_01_07_03_200.bmp\r\n0012\\0012_01_07_03_201.bmp\r\n0012\\0012_01_07_03_202.bmp\r\n0012\\0012_01_07_03_203.bmp\r\n0012\\0012_01_07_03_204.bmp\r\n0012\\0012_01_07_03_205.bmp\r\n0012\\0012_01_07_03_206.bmp\r\n0012\\0012_01_07_03_207.bmp\r\n0012\\0012_01_07_03_208.bmp\r\n0012\\0012_01_07_03_209.bmp\r\n0012\\0012_01_07_03_21.bmp\r\n0012\\0012_01_07_03_210.bmp\r\n0012\\0012_01_07_03_211.bmp\r\n0012\\0012_01_07_03_212.bmp\r\n0012\\0012_01_07_03_213.bmp\r\n0012\\0012_01_07_03_214.bmp\r\n0012\\0012_01_07_03_215.bmp\r\n0012\\0012_01_07_03_216.bmp\r\n0012\\0012_01_07_03_217.bmp\r\n0012\\0012_01_07_03_218.bmp\r\n0012\\0012_01_07_03_219.bmp\r\n0012\\0012_01_07_03_22.bmp\r\n0012\\0012_01_07_03_220.bmp\r\n0012\\0012_01_07_03_221.bmp\r\n0012\\0012_01_07_03_222.bmp\r\n0012\\0012_01_07_03_223.bmp\r\n0012\\0012_01_07_03_224.bmp\r\n0012\\0012_01_07_03_225.bmp\r\n0012\\0012_01_07_03_226.bmp\r\n0012\\0012_01_07_03_227.bmp\r\n0012\\0012_01_07_03_228.bmp\r\n0012\\0012_01_07_03_229.bmp\r\n0012\\0012_01_07_03_23.bmp\r\n0012\\0012_01_07_03_230.bmp\r\n0012\\0012_01_07_03_231.bmp\r\n0012\\0012_01_07_03_232.bmp\r\n0012\\0012_01_07_03_233.bmp\r\n0012\\0012_01_07_03_234.bmp\r\n0012\\0012_01_07_03_235.bmp\r\n0012\\0012_01_07_03_236.bmp\r\n0012\\0012_01_07_03_237.bmp\r\n0012\\0012_01_07_03_238.bmp\r\n0012\\0012_01_07_03_239.bmp\r\n0012\\0012_01_07_03_24.bmp\r\n0012\\0012_01_07_03_240.bmp\r\n0012\\0012_01_07_03_241.bmp\r\n0012\\0012_01_07_03_242.bmp\r\n0012\\0012_01_07_03_243.bmp\r\n0012\\0012_01_07_03_244.bmp\r\n0012\\0012_01_07_03_245.bmp\r\n0012\\0012_01_07_03_246.bmp\r\n0012\\0012_01_07_03_247.bmp\r\n0012\\0012_01_07_03_248.bmp\r\n0012\\0012_01_07_03_249.bmp\r\n0012\\0012_01_07_03_250.bmp\r\n0012\\0012_01_07_03_251.bmp\r\n0012\\0012_01_07_03_252.bmp\r\n0012\\0012_01_07_03_253.bmp\r\n0012\\0012_01_07_03_254.bmp\r\n0012\\0012_01_07_03_255.bmp\r\n0012\\0012_01_07_03_256.bmp\r\n0012\\0012_01_07_03_257.bmp\r\n0012\\0012_01_07_03_258.bmp\r\n0012\\0012_01_07_03_259.bmp\r\n0012\\0012_01_07_03_26.bmp\r\n0012\\0012_01_07_03_260.bmp\r\n0012\\0012_01_07_03_261.bmp\r\n0012\\0012_01_07_03_262.bmp\r\n0012\\0012_01_07_03_264.bmp\r\n0012\\0012_01_07_03_266.bmp\r\n0012\\0012_01_07_03_267.bmp\r\n0012\\0012_01_07_03_268.bmp\r\n0012\\0012_01_07_03_269.bmp\r\n0012\\0012_01_07_03_27.bmp\r\n0012\\0012_01_07_03_270.bmp\r\n0012\\0012_01_07_03_271.bmp\r\n0012\\0012_01_07_03_272.bmp\r\n0012\\0012_01_07_03_273.bmp\r\n0012\\0012_01_07_03_274.bmp\r\n0012\\0012_01_07_03_275.bmp\r\n0012\\0012_01_07_03_276.bmp\r\n0012\\0012_01_07_03_277.bmp\r\n0012\\0012_01_07_03_278.bmp\r\n0012\\0012_01_07_03_28.bmp\r\n0012\\0012_01_07_03_280.bmp\r\n0012\\0012_01_07_03_281.bmp\r\n0012\\0012_01_07_03_282.bmp\r\n0012\\0012_01_07_03_283.bmp\r\n0012\\0012_01_07_03_284.bmp\r\n0012\\0012_01_07_03_285.bmp\r\n0012\\0012_01_07_03_286.bmp\r\n0012\\0012_01_07_03_287.bmp\r\n0012\\0012_01_07_03_289.bmp\r\n0012\\0012_01_07_03_290.bmp\r\n0012\\0012_01_07_03_291.bmp\r\n0012\\0012_01_07_03_292.bmp\r\n0012\\0012_01_07_03_293.bmp\r\n0012\\0012_01_07_03_294.bmp\r\n0012\\0012_01_07_03_295.bmp\r\n0012\\0012_01_07_03_296.bmp\r\n0012\\0012_01_07_03_297.bmp\r\n0012\\0012_01_07_03_298.bmp\r\n0012\\0012_01_07_03_299.bmp\r\n0012\\0012_01_07_03_3.bmp\r\n0012\\0012_01_07_03_30.bmp\r\n0012\\0012_01_07_03_300.bmp\r\n0012\\0012_01_07_03_301.bmp\r\n0012\\0012_01_07_03_302.bmp\r\n0012\\0012_01_07_03_303.bmp\r\n0012\\0012_01_07_03_304.bmp\r\n0012\\0012_01_07_03_305.bmp\r\n0012\\0012_01_07_03_306.bmp\r\n0012\\0012_01_07_03_307.bmp\r\n0012\\0012_01_07_03_308.bmp\r\n0012\\0012_01_07_03_309.bmp\r\n0012\\0012_01_07_03_310.bmp\r\n0012\\0012_01_07_03_311.bmp\r\n0012\\0012_01_07_03_312.bmp\r\n0012\\0012_01_07_03_313.bmp\r\n0012\\0012_01_07_03_314.bmp\r\n0012\\0012_01_07_03_315.bmp\r\n0012\\0012_01_07_03_316.bmp\r\n0012\\0012_01_07_03_317.bmp\r\n0012\\0012_01_07_03_318.bmp\r\n0012\\0012_01_07_03_319.bmp\r\n0012\\0012_01_07_03_32.bmp\r\n0012\\0012_01_07_03_320.bmp\r\n0012\\0012_01_07_03_342.bmp\r\n0012\\0012_01_07_03_343.bmp\r\n0012\\0012_01_07_03_344.bmp\r\n0012\\0012_01_07_03_345.bmp\r\n0012\\0012_01_07_03_346.bmp\r\n0012\\0012_01_07_03_347.bmp\r\n0012\\0012_01_07_03_348.bmp\r\n0012\\0012_01_07_03_349.bmp\r\n0012\\0012_01_07_03_35.bmp\r\n0012\\0012_01_07_03_350.bmp\r\n0012\\0012_01_07_03_351.bmp\r\n0012\\0012_01_07_03_352.bmp\r\n0012\\0012_01_07_03_353.bmp\r\n0012\\0012_01_07_03_354.bmp\r\n0012\\0012_01_07_03_355.bmp\r\n0012\\0012_01_07_03_356.bmp\r\n0012\\0012_01_07_03_357.bmp\r\n0012\\0012_01_07_03_358.bmp\r\n0012\\0012_01_07_03_359.bmp\r\n0012\\0012_01_07_03_36.bmp\r\n0012\\0012_01_07_03_360.bmp\r\n0012\\0012_01_07_03_361.bmp\r\n0012\\0012_01_07_03_362.bmp\r\n0012\\0012_01_07_03_363.bmp\r\n0012\\0012_01_07_03_364.bmp\r\n0012\\0012_01_07_03_365.bmp\r\n0012\\0012_01_07_03_366.bmp\r\n0012\\0012_01_07_03_367.bmp\r\n0012\\0012_01_07_03_368.bmp\r\n0012\\0012_01_07_03_369.bmp\r\n0012\\0012_01_07_03_37.bmp\r\n0012\\0012_01_07_03_370.bmp\r\n0012\\0012_01_07_03_371.bmp\r\n0012\\0012_01_07_03_372.bmp\r\n0012\\0012_01_07_03_373.bmp\r\n0012\\0012_01_07_03_374.bmp\r\n0012\\0012_01_07_03_375.bmp\r\n0012\\0012_01_07_03_376.bmp\r\n0012\\0012_01_07_03_377.bmp\r\n0012\\0012_01_07_03_378.bmp\r\n0012\\0012_01_07_03_379.bmp\r\n0012\\0012_01_07_03_38.bmp\r\n0012\\0012_01_07_03_380.bmp\r\n0012\\0012_01_07_03_381.bmp\r\n0012\\0012_01_07_03_382.bmp\r\n0012\\0012_01_07_03_383.bmp\r\n0012\\0012_01_07_03_384.bmp\r\n0012\\0012_01_07_03_385.bmp\r\n0012\\0012_01_07_03_386.bmp\r\n0012\\0012_01_07_03_387.bmp\r\n0012\\0012_01_07_03_388.bmp\r\n0012\\0012_01_07_03_389.bmp\r\n0012\\0012_01_07_03_39.bmp\r\n0012\\0012_01_07_03_390.bmp\r\n0012\\0012_01_07_03_391.bmp\r\n0012\\0012_01_07_03_392.bmp\r\n0012\\0012_01_07_03_393.bmp\r\n0012\\0012_01_07_03_394.bmp\r\n0012\\0012_01_07_03_395.bmp\r\n0012\\0012_01_07_03_396.bmp\r\n0012\\0012_01_07_03_4.bmp\r\n0012\\0012_01_07_03_40.bmp\r\n0012\\0012_01_07_03_400.bmp\r\n0012\\0012_01_07_03_401.bmp\r\n0012\\0012_01_07_03_402.bmp\r\n0012\\0012_01_07_03_403.bmp\r\n0012\\0012_01_07_03_404.bmp\r\n0012\\0012_01_07_03_405.bmp\r\n0012\\0012_01_07_03_406.bmp\r\n0012\\0012_01_07_03_407.bmp\r\n0012\\0012_01_07_03_408.bmp\r\n0012\\0012_01_07_03_409.bmp\r\n0012\\0012_01_07_03_41.bmp\r\n0012\\0012_01_07_03_410.bmp\r\n0012\\0012_01_07_03_411.bmp\r\n0012\\0012_01_07_03_422.bmp\r\n0012\\0012_01_07_03_423.bmp\r\n0012\\0012_01_07_03_424.bmp\r\n0012\\0012_01_07_03_425.bmp\r\n0012\\0012_01_07_03_426.bmp\r\n0012\\0012_01_07_03_427.bmp\r\n0012\\0012_01_07_03_428.bmp\r\n0012\\0012_01_07_03_429.bmp\r\n0012\\0012_01_07_03_43.bmp\r\n0012\\0012_01_07_03_432.bmp\r\n0012\\0012_01_07_03_434.bmp\r\n0012\\0012_01_07_03_435.bmp\r\n0012\\0012_01_07_03_436.bmp\r\n0012\\0012_01_07_03_437.bmp\r\n0012\\0012_01_07_03_439.bmp\r\n0012\\0012_01_07_03_44.bmp\r\n0012\\0012_01_07_03_440.bmp\r\n0012\\0012_01_07_03_441.bmp\r\n0012\\0012_01_07_03_442.bmp\r\n0012\\0012_01_07_03_443.bmp\r\n0012\\0012_01_07_03_444.bmp\r\n0012\\0012_01_07_03_445.bmp\r\n0012\\0012_01_07_03_446.bmp\r\n0012\\0012_01_07_03_447.bmp\r\n0012\\0012_01_07_03_448.bmp\r\n0012\\0012_01_07_03_449.bmp\r\n0012\\0012_01_07_03_45.bmp\r\n0012\\0012_01_07_03_450.bmp\r\n0012\\0012_01_07_03_451.bmp\r\n0012\\0012_01_07_03_452.bmp\r\n0012\\0012_01_07_03_453.bmp\r\n0012\\0012_01_07_03_454.bmp\r\n0012\\0012_01_07_03_455.bmp\r\n0012\\0012_01_07_03_456.bmp\r\n0012\\0012_01_07_03_457.bmp\r\n0012\\0012_01_07_03_458.bmp\r\n0012\\0012_01_07_03_459.bmp\r\n0012\\0012_01_07_03_46.bmp\r\n0012\\0012_01_07_03_460.bmp\r\n0012\\0012_01_07_03_461.bmp\r\n0012\\0012_01_07_03_462.bmp\r\n0012\\0012_01_07_03_463.bmp\r\n0012\\0012_01_07_03_464.bmp\r\n0012\\0012_01_07_03_465.bmp\r\n0012\\0012_01_07_03_466.bmp\r\n0012\\0012_01_07_03_467.bmp\r\n0012\\0012_01_07_03_468.bmp\r\n0012\\0012_01_07_03_469.bmp\r\n0012\\0012_01_07_03_47.bmp\r\n0012\\0012_01_07_03_470.bmp\r\n0012\\0012_01_07_03_471.bmp\r\n0012\\0012_01_07_03_472.bmp\r\n0012\\0012_01_07_03_473.bmp\r\n0012\\0012_01_07_03_474.bmp\r\n0012\\0012_01_07_03_475.bmp\r\n0012\\0012_01_07_03_476.bmp\r\n0012\\0012_01_07_03_477.bmp\r\n0012\\0012_01_07_03_478.bmp\r\n0012\\0012_01_07_03_479.bmp\r\n0012\\0012_01_07_03_48.bmp\r\n0012\\0012_01_07_03_480.bmp\r\n0012\\0012_01_07_03_481.bmp\r\n0012\\0012_01_07_03_482.bmp\r\n0012\\0012_01_07_03_483.bmp\r\n0012\\0012_01_07_03_484.bmp\r\n0012\\0012_01_07_03_485.bmp\r\n0012\\0012_01_07_03_486.bmp\r\n0012\\0012_01_07_03_487.bmp\r\n0012\\0012_01_07_03_488.bmp\r\n0012\\0012_01_07_03_489.bmp\r\n0012\\0012_01_07_03_49.bmp\r\n0012\\0012_01_07_03_490.bmp\r\n0012\\0012_01_07_03_491.bmp\r\n0012\\0012_01_07_03_492.bmp\r\n0012\\0012_01_07_03_493.bmp\r\n0012\\0012_01_07_03_494.bmp\r\n0012\\0012_01_07_03_495.bmp\r\n0012\\0012_01_07_03_496.bmp\r\n0012\\0012_01_07_03_497.bmp\r\n0012\\0012_01_07_03_498.bmp\r\n0012\\0012_01_07_03_499.bmp\r\n0012\\0012_01_07_03_50.bmp\r\n0012\\0012_01_07_03_51.bmp\r\n0012\\0012_01_07_03_52.bmp\r\n0012\\0012_01_07_03_53.bmp\r\n0012\\0012_01_07_03_54.bmp\r\n0012\\0012_01_07_03_55.bmp\r\n0012\\0012_01_07_03_56.bmp\r\n0012\\0012_01_07_03_57.bmp\r\n0012\\0012_01_07_03_58.bmp\r\n0012\\0012_01_07_03_6.bmp\r\n0012\\0012_01_07_03_60.bmp\r\n0012\\0012_01_07_03_66.bmp\r\n0012\\0012_01_07_03_67.bmp\r\n0012\\0012_01_07_03_68.bmp\r\n0012\\0012_01_07_03_69.bmp\r\n0012\\0012_01_07_03_7.bmp\r\n0012\\0012_01_07_03_70.bmp\r\n0012\\0012_01_07_03_71.bmp\r\n0012\\0012_01_07_03_72.bmp\r\n0012\\0012_01_07_03_73.bmp\r\n0012\\0012_01_07_03_74.bmp\r\n0012\\0012_01_07_03_75.bmp\r\n0012\\0012_01_07_03_76.bmp\r\n0012\\0012_01_07_03_77.bmp\r\n0012\\0012_01_07_03_78.bmp\r\n0012\\0012_01_07_03_79.bmp\r\n0012\\0012_01_07_03_8.bmp\r\n0012\\0012_01_07_03_81.bmp\r\n0012\\0012_01_07_03_82.bmp\r\n0012\\0012_01_07_03_83.bmp\r\n0012\\0012_01_07_03_84.bmp\r\n0012\\0012_01_07_03_87.bmp\r\n0012\\0012_01_07_03_89.bmp\r\n0012\\0012_01_07_03_9.bmp\r\n0012\\0012_01_07_03_90.bmp\r\n0012\\0012_01_07_03_91.bmp\r\n0012\\0012_01_07_03_92.bmp\r\n0012\\0012_01_07_03_93.bmp\r\n0012\\0012_01_07_03_95.bmp\r\n0012\\0012_01_07_03_96.bmp\r\n0012\\0012_01_07_03_97.bmp\r\n0012\\0012_01_07_03_98.bmp\r\n0012\\0012_01_07_03_99.bmp\r\n0011\\0011_01_07_03_0.bmp\r\n0011\\0011_01_07_03_1.bmp\r\n0011\\0011_01_07_03_10.bmp\r\n0011\\0011_01_07_03_100.bmp\r\n0011\\0011_01_07_03_101.bmp\r\n0011\\0011_01_07_03_102.bmp\r\n0011\\0011_01_07_03_103.bmp\r\n0011\\0011_01_07_03_104.bmp\r\n0011\\0011_01_07_03_105.bmp\r\n0011\\0011_01_07_03_106.bmp\r\n0011\\0011_01_07_03_107.bmp\r\n0011\\0011_01_07_03_108.bmp\r\n0011\\0011_01_07_03_109.bmp\r\n0011\\0011_01_07_03_11.bmp\r\n0011\\0011_01_07_03_110.bmp\r\n0011\\0011_01_07_03_111.bmp\r\n0011\\0011_01_07_03_112.bmp\r\n0011\\0011_01_07_03_113.bmp\r\n0011\\0011_01_07_03_114.bmp\r\n0011\\0011_01_07_03_115.bmp\r\n0011\\0011_01_07_03_116.bmp\r\n0011\\0011_01_07_03_117.bmp\r\n0011\\0011_01_07_03_118.bmp\r\n0011\\0011_01_07_03_119.bmp\r\n0011\\0011_01_07_03_12.bmp\r\n0011\\0011_01_07_03_120.bmp\r\n0011\\0011_01_07_03_121.bmp\r\n0011\\0011_01_07_03_122.bmp\r\n0011\\0011_01_07_03_124.bmp\r\n0011\\0011_01_07_03_125.bmp\r\n0011\\0011_01_07_03_126.bmp\r\n0011\\0011_01_07_03_129.bmp\r\n0011\\0011_01_07_03_13.bmp\r\n0011\\0011_01_07_03_130.bmp\r\n0011\\0011_01_07_03_131.bmp\r\n0011\\0011_01_07_03_132.bmp\r\n0011\\0011_01_07_03_133.bmp\r\n0011\\0011_01_07_03_134.bmp\r\n0011\\0011_01_07_03_136.bmp\r\n0011\\0011_01_07_03_137.bmp\r\n0011\\0011_01_07_03_138.bmp\r\n0011\\0011_01_07_03_139.bmp\r\n0011\\0011_01_07_03_14.bmp\r\n0011\\0011_01_07_03_140.bmp\r\n0011\\0011_01_07_03_141.bmp\r\n0011\\0011_01_07_03_142.bmp\r\n0011\\0011_01_07_03_143.bmp\r\n0011\\0011_01_07_03_144.bmp\r\n0011\\0011_01_07_03_145.bmp\r\n0011\\0011_01_07_03_146.bmp\r\n0011\\0011_01_07_03_147.bmp\r\n0011\\0011_01_07_03_148.bmp\r\n0011\\0011_01_07_03_149.bmp\r\n0011\\0011_01_07_03_15.bmp\r\n0011\\0011_01_07_03_150.bmp\r\n0011\\0011_01_07_03_151.bmp\r\n0011\\0011_01_07_03_152.bmp\r\n0011\\0011_01_07_03_153.bmp\r\n0011\\0011_01_07_03_154.bmp\r\n0011\\0011_01_07_03_156.bmp\r\n0011\\0011_01_07_03_157.bmp\r\n0011\\0011_01_07_03_158.bmp\r\n0011\\0011_01_07_03_159.bmp\r\n0011\\0011_01_07_03_16.bmp\r\n0011\\0011_01_07_03_160.bmp\r\n0011\\0011_01_07_03_162.bmp\r\n0011\\0011_01_07_03_163.bmp\r\n0011\\0011_01_07_03_164.bmp\r\n0011\\0011_01_07_03_165.bmp\r\n0011\\0011_01_07_03_166.bmp\r\n0011\\0011_01_07_03_167.bmp\r\n0011\\0011_01_07_03_168.bmp\r\n0011\\0011_01_07_03_169.bmp\r\n0011\\0011_01_07_03_17.bmp\r\n0011\\0011_01_07_03_170.bmp\r\n0011\\0011_01_07_03_171.bmp\r\n0011\\0011_01_07_03_172.bmp\r\n0011\\0011_01_07_03_173.bmp\r\n0011\\0011_01_07_03_174.bmp\r\n0011\\0011_01_07_03_175.bmp\r\n0011\\0011_01_07_03_176.bmp\r\n0011\\0011_01_07_03_177.bmp\r\n0011\\0011_01_07_03_178.bmp\r\n0011\\0011_01_07_03_179.bmp\r\n0011\\0011_01_07_03_18.bmp\r\n0011\\0011_01_07_03_180.bmp\r\n0011\\0011_01_07_03_181.bmp\r\n0011\\0011_01_07_03_182.bmp\r\n0011\\0011_01_07_03_184.bmp\r\n0011\\0011_01_07_03_186.bmp\r\n0011\\0011_01_07_03_187.bmp\r\n0011\\0011_01_07_03_19.bmp\r\n0011\\0011_01_07_03_191.bmp\r\n0011\\0011_01_07_03_192.bmp\r\n0011\\0011_01_07_03_193.bmp\r\n0011\\0011_01_07_03_194.bmp\r\n0011\\0011_01_07_03_196.bmp\r\n0011\\0011_01_07_03_198.bmp\r\n0011\\0011_01_07_03_199.bmp\r\n0011\\0011_01_07_03_2.bmp\r\n0011\\0011_01_07_03_20.bmp\r\n0011\\0011_01_07_03_200.bmp\r\n0011\\0011_01_07_03_201.bmp\r\n0011\\0011_01_07_03_202.bmp\r\n0011\\0011_01_07_03_203.bmp\r\n0011\\0011_01_07_03_204.bmp\r\n0011\\0011_01_07_03_205.bmp\r\n0011\\0011_01_07_03_206.bmp\r\n0011\\0011_01_07_03_207.bmp\r\n0011\\0011_01_07_03_208.bmp\r\n0011\\0011_01_07_03_209.bmp\r\n0011\\0011_01_07_03_21.bmp\r\n0011\\0011_01_07_03_215.bmp\r\n0011\\0011_01_07_03_216.bmp\r\n0011\\0011_01_07_03_218.bmp\r\n0011\\0011_01_07_03_219.bmp\r\n0011\\0011_01_07_03_22.bmp\r\n0011\\0011_01_07_03_220.bmp\r\n0011\\0011_01_07_03_221.bmp\r\n0011\\0011_01_07_03_222.bmp\r\n0011\\0011_01_07_03_223.bmp\r\n0011\\0011_01_07_03_224.bmp\r\n0011\\0011_01_07_03_225.bmp\r\n0011\\0011_01_07_03_226.bmp\r\n0011\\0011_01_07_03_228.bmp\r\n0011\\0011_01_07_03_229.bmp\r\n0011\\0011_01_07_03_23.bmp\r\n0011\\0011_01_07_03_230.bmp\r\n0011\\0011_01_07_03_231.bmp\r\n0011\\0011_01_07_03_232.bmp\r\n0011\\0011_01_07_03_233.bmp\r\n0011\\0011_01_07_03_234.bmp\r\n0011\\0011_01_07_03_235.bmp\r\n0011\\0011_01_07_03_236.bmp\r\n0011\\0011_01_07_03_237.bmp\r\n0011\\0011_01_07_03_238.bmp\r\n0011\\0011_01_07_03_239.bmp\r\n0011\\0011_01_07_03_24.bmp\r\n0011\\0011_01_07_03_240.bmp\r\n0011\\0011_01_07_03_241.bmp\r\n0011\\0011_01_07_03_242.bmp\r\n0011\\0011_01_07_03_243.bmp\r\n0011\\0011_01_07_03_244.bmp\r\n0011\\0011_01_07_03_249.bmp\r\n0011\\0011_01_07_03_25.bmp\r\n0011\\0011_01_07_03_250.bmp\r\n0011\\0011_01_07_03_252.bmp\r\n0011\\0011_01_07_03_254.bmp\r\n0011\\0011_01_07_03_255.bmp\r\n0011\\0011_01_07_03_256.bmp\r\n0011\\0011_01_07_03_257.bmp\r\n0011\\0011_01_07_03_258.bmp\r\n0011\\0011_01_07_03_259.bmp\r\n0011\\0011_01_07_03_26.bmp\r\n0011\\0011_01_07_03_260.bmp\r\n0011\\0011_01_07_03_261.bmp\r\n0011\\0011_01_07_03_263.bmp\r\n0011\\0011_01_07_03_264.bmp\r\n0011\\0011_01_07_03_265.bmp\r\n0011\\0011_01_07_03_266.bmp\r\n0011\\0011_01_07_03_267.bmp\r\n0011\\0011_01_07_03_269.bmp\r\n0011\\0011_01_07_03_27.bmp\r\n0011\\0011_01_07_03_270.bmp\r\n0011\\0011_01_07_03_271.bmp\r\n0011\\0011_01_07_03_272.bmp\r\n0011\\0011_01_07_03_273.bmp\r\n0011\\0011_01_07_03_274.bmp\r\n0011\\0011_01_07_03_276.bmp\r\n0011\\0011_01_07_03_277.bmp\r\n0011\\0011_01_07_03_278.bmp\r\n0011\\0011_01_07_03_279.bmp\r\n0011\\0011_01_07_03_28.bmp\r\n0011\\0011_01_07_03_280.bmp\r\n0011\\0011_01_07_03_281.bmp\r\n0011\\0011_01_07_03_282.bmp\r\n0011\\0011_01_07_03_283.bmp\r\n0011\\0011_01_07_03_284.bmp\r\n0011\\0011_01_07_03_285.bmp\r\n0011\\0011_01_07_03_286.bmp\r\n0011\\0011_01_07_03_287.bmp\r\n0011\\0011_01_07_03_288.bmp\r\n0011\\0011_01_07_03_29.bmp\r\n0011\\0011_01_07_03_290.bmp\r\n0011\\0011_01_07_03_291.bmp\r\n0011\\0011_01_07_03_293.bmp\r\n0011\\0011_01_07_03_294.bmp\r\n0011\\0011_01_07_03_295.bmp\r\n0011\\0011_01_07_03_296.bmp\r\n0011\\0011_01_07_03_297.bmp\r\n0011\\0011_01_07_03_298.bmp\r\n0011\\0011_01_07_03_299.bmp\r\n0011\\0011_01_07_03_3.bmp\r\n0011\\0011_01_07_03_30.bmp\r\n0011\\0011_01_07_03_300.bmp\r\n0011\\0011_01_07_03_301.bmp\r\n0011\\0011_01_07_03_303.bmp\r\n0011\\0011_01_07_03_304.bmp\r\n0011\\0011_01_07_03_305.bmp\r\n0011\\0011_01_07_03_306.bmp\r\n0011\\0011_01_07_03_307.bmp\r\n0011\\0011_01_07_03_308.bmp\r\n0011\\0011_01_07_03_309.bmp\r\n0011\\0011_01_07_03_31.bmp\r\n0011\\0011_01_07_03_310.bmp\r\n0011\\0011_01_07_03_311.bmp\r\n0011\\0011_01_07_03_312.bmp\r\n0011\\0011_01_07_03_313.bmp\r\n0011\\0011_01_07_03_314.bmp\r\n0011\\0011_01_07_03_315.bmp\r\n0011\\0011_01_07_03_318.bmp\r\n0011\\0011_01_07_03_319.bmp\r\n0011\\0011_01_07_03_32.bmp\r\n0011\\0011_01_07_03_320.bmp\r\n0011\\0011_01_07_03_321.bmp\r\n0011\\0011_01_07_03_322.bmp\r\n0011\\0011_01_07_03_326.bmp\r\n0011\\0011_01_07_03_327.bmp\r\n0011\\0011_01_07_03_328.bmp\r\n0011\\0011_01_07_03_329.bmp\r\n0011\\0011_01_07_03_33.bmp\r\n0011\\0011_01_07_03_330.bmp\r\n0011\\0011_01_07_03_331.bmp\r\n0011\\0011_01_07_03_332.bmp\r\n0011\\0011_01_07_03_333.bmp\r\n0011\\0011_01_07_03_334.bmp\r\n0011\\0011_01_07_03_335.bmp\r\n0011\\0011_01_07_03_336.bmp\r\n0011\\0011_01_07_03_34.bmp\r\n0011\\0011_01_07_03_341.bmp\r\n0011\\0011_01_07_03_342.bmp\r\n0011\\0011_01_07_03_343.bmp\r\n0011\\0011_01_07_03_345.bmp\r\n0011\\0011_01_07_03_346.bmp\r\n0011\\0011_01_07_03_348.bmp\r\n0011\\0011_01_07_03_349.bmp\r\n0011\\0011_01_07_03_35.bmp\r\n0011\\0011_01_07_03_350.bmp\r\n0011\\0011_01_07_03_351.bmp\r\n0011\\0011_01_07_03_352.bmp\r\n0011\\0011_01_07_03_353.bmp\r\n0011\\0011_01_07_03_354.bmp\r\n0011\\0011_01_07_03_355.bmp\r\n0011\\0011_01_07_03_356.bmp\r\n0011\\0011_01_07_03_358.bmp\r\n0011\\0011_01_07_03_36.bmp\r\n0011\\0011_01_07_03_360.bmp\r\n0011\\0011_01_07_03_361.bmp\r\n0011\\0011_01_07_03_362.bmp\r\n0011\\0011_01_07_03_363.bmp\r\n0011\\0011_01_07_03_365.bmp\r\n0011\\0011_01_07_03_366.bmp\r\n0011\\0011_01_07_03_367.bmp\r\n0011\\0011_01_07_03_369.bmp\r\n0011\\0011_01_07_03_37.bmp\r\n0011\\0011_01_07_03_370.bmp\r\n0011\\0011_01_07_03_371.bmp\r\n0011\\0011_01_07_03_373.bmp\r\n0011\\0011_01_07_03_374.bmp\r\n0011\\0011_01_07_03_376.bmp\r\n0011\\0011_01_07_03_377.bmp\r\n0011\\0011_01_07_03_378.bmp\r\n0011\\0011_01_07_03_38.bmp\r\n0011\\0011_01_07_03_380.bmp\r\n0011\\0011_01_07_03_381.bmp\r\n0011\\0011_01_07_03_382.bmp\r\n0011\\0011_01_07_03_385.bmp\r\n0011\\0011_01_07_03_386.bmp\r\n0011\\0011_01_07_03_387.bmp\r\n0011\\0011_01_07_03_388.bmp\r\n0011\\0011_01_07_03_389.bmp\r\n0011\\0011_01_07_03_39.bmp\r\n0011\\0011_01_07_03_390.bmp\r\n0011\\0011_01_07_03_391.bmp\r\n0011\\0011_01_07_03_392.bmp\r\n0011\\0011_01_07_03_393.bmp\r\n0011\\0011_01_07_03_394.bmp\r\n0011\\0011_01_07_03_395.bmp\r\n0011\\0011_01_07_03_396.bmp\r\n0011\\0011_01_07_03_399.bmp\r\n0011\\0011_01_07_03_4.bmp\r\n0011\\0011_01_07_03_40.bmp\r\n0011\\0011_01_07_03_400.bmp\r\n0011\\0011_01_07_03_401.bmp\r\n0011\\0011_01_07_03_402.bmp\r\n0011\\0011_01_07_03_404.bmp\r\n0011\\0011_01_07_03_405.bmp\r\n0011\\0011_01_07_03_406.bmp\r\n0011\\0011_01_07_03_407.bmp\r\n0011\\0011_01_07_03_408.bmp\r\n0011\\0011_01_07_03_409.bmp\r\n0011\\0011_01_07_03_41.bmp\r\n0011\\0011_01_07_03_410.bmp\r\n0011\\0011_01_07_03_412.bmp\r\n0011\\0011_01_07_03_413.bmp\r\n0011\\0011_01_07_03_414.bmp\r\n0011\\0011_01_07_03_415.bmp\r\n0011\\0011_01_07_03_416.bmp\r\n0011\\0011_01_07_03_417.bmp\r\n0011\\0011_01_07_03_418.bmp\r\n0011\\0011_01_07_03_419.bmp\r\n0011\\0011_01_07_03_42.bmp\r\n0011\\0011_01_07_03_420.bmp\r\n0011\\0011_01_07_03_421.bmp\r\n0011\\0011_01_07_03_422.bmp\r\n0011\\0011_01_07_03_423.bmp\r\n0011\\0011_01_07_03_424.bmp\r\n0011\\0011_01_07_03_425.bmp\r\n0011\\0011_01_07_03_428.bmp\r\n0011\\0011_01_07_03_43.bmp\r\n0011\\0011_01_07_03_430.bmp\r\n0011\\0011_01_07_03_431.bmp\r\n0011\\0011_01_07_03_432.bmp\r\n0011\\0011_01_07_03_433.bmp\r\n0011\\0011_01_07_03_434.bmp\r\n0011\\0011_01_07_03_435.bmp\r\n0011\\0011_01_07_03_436.bmp\r\n0011\\0011_01_07_03_437.bmp\r\n0011\\0011_01_07_03_438.bmp\r\n0011\\0011_01_07_03_44.bmp\r\n0011\\0011_01_07_03_445.bmp\r\n0011\\0011_01_07_03_446.bmp\r\n0011\\0011_01_07_03_447.bmp\r\n0011\\0011_01_07_03_448.bmp\r\n0011\\0011_01_07_03_449.bmp\r\n0011\\0011_01_07_03_45.bmp\r\n0011\\0011_01_07_03_450.bmp\r\n0011\\0011_01_07_03_452.bmp\r\n0011\\0011_01_07_03_453.bmp\r\n0011\\0011_01_07_03_454.bmp\r\n0011\\0011_01_07_03_455.bmp\r\n0011\\0011_01_07_03_456.bmp\r\n0011\\0011_01_07_03_457.bmp\r\n0011\\0011_01_07_03_459.bmp\r\n0011\\0011_01_07_03_46.bmp\r\n0011\\0011_01_07_03_460.bmp\r\n0011\\0011_01_07_03_467.bmp\r\n0011\\0011_01_07_03_47.bmp\r\n0011\\0011_01_07_03_479.bmp\r\n0011\\0011_01_07_03_482.bmp\r\n0011\\0011_01_07_03_483.bmp\r\n0011\\0011_01_07_03_484.bmp\r\n0011\\0011_01_07_03_487.bmp\r\n0011\\0011_01_07_03_488.bmp\r\n0011\\0011_01_07_03_489.bmp\r\n0011\\0011_01_07_03_49.bmp\r\n0011\\0011_01_07_03_490.bmp\r\n0011\\0011_01_07_03_491.bmp\r\n0011\\0011_01_07_03_492.bmp\r\n0011\\0011_01_07_03_493.bmp\r\n0011\\0011_01_07_03_494.bmp\r\n0011\\0011_01_07_03_495.bmp\r\n0011\\0011_01_07_03_496.bmp\r\n0011\\0011_01_07_03_497.bmp\r\n0011\\0011_01_07_03_499.bmp\r\n0011\\0011_01_07_03_5.bmp\r\n0011\\0011_01_07_03_50.bmp\r\n0011\\0011_01_07_03_51.bmp\r\n0011\\0011_01_07_03_52.bmp\r\n0011\\0011_01_07_03_53.bmp\r\n0011\\0011_01_07_03_54.bmp\r\n0011\\0011_01_07_03_55.bmp\r\n0011\\0011_01_07_03_56.bmp\r\n0011\\0011_01_07_03_57.bmp\r\n0011\\0011_01_07_03_58.bmp\r\n0011\\0011_01_07_03_59.bmp\r\n0011\\0011_01_07_03_6.bmp\r\n0011\\0011_01_07_03_60.bmp\r\n0011\\0011_01_07_03_61.bmp\r\n0011\\0011_01_07_03_63.bmp\r\n0011\\0011_01_07_03_64.bmp\r\n0011\\0011_01_07_03_65.bmp\r\n0011\\0011_01_07_03_66.bmp\r\n0011\\0011_01_07_03_67.bmp\r\n0011\\0011_01_07_03_68.bmp\r\n0011\\0011_01_07_03_69.bmp\r\n0011\\0011_01_07_03_7.bmp\r\n0011\\0011_01_07_03_70.bmp\r\n0011\\0011_01_07_03_71.bmp\r\n0011\\0011_01_07_03_72.bmp\r\n0011\\0011_01_07_03_73.bmp\r\n0011\\0011_01_07_03_74.bmp\r\n0011\\0011_01_07_03_75.bmp\r\n0011\\0011_01_07_03_76.bmp\r\n0011\\0011_01_07_03_77.bmp\r\n0011\\0011_01_07_03_78.bmp\r\n0011\\0011_01_07_03_79.bmp\r\n0011\\0011_01_07_03_8.bmp\r\n0011\\0011_01_07_03_80.bmp\r\n0011\\0011_01_07_03_81.bmp\r\n0011\\0011_01_07_03_82.bmp\r\n0011\\0011_01_07_03_83.bmp\r\n0011\\0011_01_07_03_84.bmp\r\n0011\\0011_01_07_03_85.bmp\r\n0011\\0011_01_07_03_86.bmp\r\n0011\\0011_01_07_03_87.bmp\r\n0011\\0011_01_07_03_88.bmp\r\n0011\\0011_01_07_03_89.bmp\r\n0011\\0011_01_07_03_9.bmp\r\n0011\\0011_01_07_03_90.bmp\r\n0011\\0011_01_07_03_91.bmp\r\n0011\\0011_01_07_03_92.bmp\r\n0011\\0011_01_07_03_93.bmp\r\n0011\\0011_01_07_03_94.bmp\r\n0011\\0011_01_07_03_95.bmp\r\n0011\\0011_01_07_03_96.bmp\r\n0011\\0011_01_07_03_97.bmp\r\n0011\\0011_01_07_03_98.bmp\r\n0011\\0011_01_07_03_99.bmp\r\n"
  },
  {
    "path": "Matlab/NUAA/client_train_normalized.txt",
    "content": "0001\\0001_00_00_01_0.bmp\r\n0001\\0001_00_00_01_101.bmp\r\n0001\\0001_00_00_01_105.bmp\r\n0001\\0001_00_00_01_109.bmp\r\n0001\\0001_00_00_01_112.bmp\r\n0001\\0001_00_00_01_116.bmp\r\n0001\\0001_00_00_01_12.bmp\r\n0001\\0001_00_00_01_123.bmp\r\n0001\\0001_00_00_01_127.bmp\r\n0001\\0001_00_00_01_130.bmp\r\n0001\\0001_00_00_01_134.bmp\r\n0001\\0001_00_00_01_138.bmp\r\n0001\\0001_00_00_01_141.bmp\r\n0001\\0001_00_00_01_145.bmp\r\n0001\\0001_00_00_01_149.bmp\r\n0001\\0001_00_00_01_152.bmp\r\n0001\\0001_00_00_01_156.bmp\r\n0001\\0001_00_00_01_16.bmp\r\n0001\\0001_00_00_01_163.bmp\r\n0001\\0001_00_00_01_167.bmp\r\n0001\\0001_00_00_01_170.bmp\r\n0001\\0001_00_00_01_174.bmp\r\n0001\\0001_00_00_01_178.bmp\r\n0001\\0001_00_00_01_181.bmp\r\n0001\\0001_00_00_01_185.bmp\r\n0001\\0001_00_00_01_189.bmp\r\n0001\\0001_00_00_01_192.bmp\r\n0001\\0001_00_00_01_196.bmp\r\n0001\\0001_00_00_01_2.bmp\r\n0001\\0001_00_00_01_202.bmp\r\n0001\\0001_00_00_01_206.bmp\r\n0001\\0001_00_00_01_21.bmp\r\n0001\\0001_00_00_01_213.bmp\r\n0001\\0001_00_00_01_217.bmp\r\n0001\\0001_00_00_01_220.bmp\r\n0001\\0001_00_00_01_224.bmp\r\n0001\\0001_00_00_01_228.bmp\r\n0001\\0001_00_00_01_231.bmp\r\n0001\\0001_00_00_01_235.bmp\r\n0001\\0001_00_00_01_239.bmp\r\n0001\\0001_00_00_01_242.bmp\r\n0001\\0001_00_00_01_246.bmp\r\n0001\\0001_00_00_01_25.bmp\r\n0001\\0001_00_00_01_253.bmp\r\n0001\\0001_00_00_01_257.bmp\r\n0001\\0001_00_00_01_260.bmp\r\n0001\\0001_00_00_01_264.bmp\r\n0001\\0001_00_00_01_268.bmp\r\n0001\\0001_00_00_01_271.bmp\r\n0001\\0001_00_00_01_275.bmp\r\n0001\\0001_00_00_01_279.bmp\r\n0001\\0001_00_00_01_282.bmp\r\n0001\\0001_00_00_01_286.bmp\r\n0001\\0001_00_00_01_29.bmp\r\n0001\\0001_00_00_01_293.bmp\r\n0001\\0001_00_00_01_297.bmp\r\n0001\\0001_00_00_01_30.bmp\r\n0001\\0001_00_00_01_303.bmp\r\n0001\\0001_00_00_01_307.bmp\r\n0001\\0001_00_00_01_310.bmp\r\n0001\\0001_00_00_01_314.bmp\r\n0001\\0001_00_00_01_318.bmp\r\n0001\\0001_00_00_01_321.bmp\r\n0001\\0001_00_00_01_325.bmp\r\n0001\\0001_00_00_01_329.bmp\r\n0001\\0001_00_00_01_332.bmp\r\n0001\\0001_00_00_01_336.bmp\r\n0001\\0001_00_00_01_34.bmp\r\n0001\\0001_00_00_01_343.bmp\r\n0001\\0001_00_00_01_347.bmp\r\n0001\\0001_00_00_01_350.bmp\r\n0001\\0001_00_00_01_354.bmp\r\n0001\\0001_00_00_01_358.bmp\r\n0001\\0001_00_00_01_361.bmp\r\n0001\\0001_00_00_01_365.bmp\r\n0001\\0001_00_00_01_369.bmp\r\n0001\\0001_00_00_01_372.bmp\r\n0001\\0001_00_00_01_376.bmp\r\n0001\\0001_00_00_01_38.bmp\r\n0001\\0001_00_00_01_383.bmp\r\n0001\\0001_00_00_01_387.bmp\r\n0001\\0001_00_00_01_390.bmp\r\n0001\\0001_00_00_01_394.bmp\r\n0001\\0001_00_00_01_398.bmp\r\n0001\\0001_00_00_01_400.bmp\r\n0001\\0001_00_00_01_404.bmp\r\n0001\\0001_00_00_01_408.bmp\r\n0001\\0001_00_00_01_411.bmp\r\n0001\\0001_00_00_01_415.bmp\r\n0001\\0001_00_00_01_419.bmp\r\n0001\\0001_00_00_01_422.bmp\r\n0001\\0001_00_00_01_426.bmp\r\n0001\\0001_00_00_01_43.bmp\r\n0001\\0001_00_00_01_433.bmp\r\n0001\\0001_00_00_01_437.bmp\r\n0001\\0001_00_00_01_440.bmp\r\n0001\\0001_00_00_01_444.bmp\r\n0001\\0001_00_00_01_448.bmp\r\n0001\\0001_00_00_01_451.bmp\r\n0001\\0001_00_00_01_455.bmp\r\n0001\\0001_00_00_01_459.bmp\r\n0001\\0001_00_00_01_462.bmp\r\n0001\\0001_00_00_01_466.bmp\r\n0001\\0001_00_00_01_47.bmp\r\n0001\\0001_00_00_01_473.bmp\r\n0001\\0001_00_00_01_477.bmp\r\n0001\\0001_00_00_01_480.bmp\r\n0001\\0001_00_00_01_484.bmp\r\n0001\\0001_00_00_01_488.bmp\r\n0001\\0001_00_00_01_491.bmp\r\n0001\\0001_00_00_01_495.bmp\r\n0001\\0001_00_00_01_499.bmp\r\n0001\\0001_00_00_01_52.bmp\r\n0001\\0001_00_00_01_56.bmp\r\n0001\\0001_00_00_01_6.bmp\r\n0001\\0001_00_00_01_63.bmp\r\n0001\\0001_00_00_01_67.bmp\r\n0001\\0001_00_00_01_70.bmp\r\n0001\\0001_00_00_01_74.bmp\r\n0001\\0001_00_00_01_78.bmp\r\n0001\\0001_00_00_01_81.bmp\r\n0001\\0001_00_00_01_85.bmp\r\n0001\\0001_00_00_01_89.bmp\r\n0001\\0001_00_00_01_92.bmp\r\n0001\\0001_00_00_01_96.bmp\r\n0002\\0002_01_00_01_100.bmp\r\n0002\\0002_01_00_01_109.bmp\r\n0002\\0002_01_00_01_116.bmp\r\n0002\\0002_01_00_01_120.bmp\r\n0002\\0002_01_00_01_124.bmp\r\n0002\\0002_01_00_01_128.bmp\r\n0002\\0002_01_00_01_132.bmp\r\n0002\\0002_01_00_01_136.bmp\r\n0002\\0002_01_00_01_14.bmp\r\n0002\\0002_01_00_01_143.bmp\r\n0002\\0002_01_00_01_147.bmp\r\n0002\\0002_01_00_01_150.bmp\r\n0002\\0002_01_00_01_154.bmp\r\n0002\\0002_01_00_01_158.bmp\r\n0002\\0002_01_00_01_17.bmp\r\n0002\\0002_01_00_01_192.bmp\r\n0002\\0002_01_00_01_200.bmp\r\n0002\\0002_01_00_01_206.bmp\r\n0002\\0002_01_00_01_212.bmp\r\n0002\\0002_01_00_01_217.bmp\r\n0002\\0002_01_00_01_221.bmp\r\n0002\\0002_01_00_01_227.bmp\r\n0002\\0002_01_00_01_25.bmp\r\n0002\\0002_01_00_01_29.bmp\r\n0002\\0002_01_00_01_303.bmp\r\n0002\\0002_01_00_01_308.bmp\r\n0002\\0002_01_00_01_311.bmp\r\n0002\\0002_01_00_01_315.bmp\r\n0002\\0002_01_00_01_319.bmp\r\n0002\\0002_01_00_01_323.bmp\r\n0002\\0002_01_00_01_327.bmp\r\n0002\\0002_01_00_01_331.bmp\r\n0002\\0002_01_00_01_335.bmp\r\n0002\\0002_01_00_01_339.bmp\r\n0002\\0002_01_00_01_343.bmp\r\n0002\\0002_01_00_01_347.bmp\r\n0002\\0002_01_00_01_350.bmp\r\n0002\\0002_01_00_01_355.bmp\r\n0002\\0002_01_00_01_359.bmp\r\n0002\\0002_01_00_01_362.bmp\r\n0002\\0002_01_00_01_368.bmp\r\n0002\\0002_01_00_01_38.bmp\r\n0002\\0002_01_00_01_40.bmp\r\n0002\\0002_01_00_01_441.bmp\r\n0002\\0002_01_00_01_48.bmp\r\n0002\\0002_01_00_01_496.bmp\r\n0002\\0002_01_00_01_50.bmp\r\n0002\\0002_01_00_01_54.bmp\r\n0002\\0002_01_00_01_58.bmp\r\n0002\\0002_01_00_01_61.bmp\r\n0002\\0002_01_00_01_65.bmp\r\n0002\\0002_01_00_01_69.bmp\r\n0002\\0002_01_00_01_73.bmp\r\n0002\\0002_01_00_01_85.bmp\r\n0002\\0002_01_00_01_89.bmp\r\n0002\\0002_01_00_01_92.bmp\r\n0002\\0002_01_00_01_96.bmp\r\n0003\\0003_01_00_01_0.bmp\r\n0003\\0003_01_00_01_101.bmp\r\n0003\\0003_01_00_01_105.bmp\r\n0003\\0003_01_00_01_109.bmp\r\n0003\\0003_01_00_01_112.bmp\r\n0003\\0003_01_00_01_116.bmp\r\n0003\\0003_01_00_01_12.bmp\r\n0003\\0003_01_00_01_123.bmp\r\n0003\\0003_01_00_01_127.bmp\r\n0003\\0003_01_00_01_131.bmp\r\n0003\\0003_01_00_01_135.bmp\r\n0003\\0003_01_00_01_139.bmp\r\n0003\\0003_01_00_01_142.bmp\r\n0003\\0003_01_00_01_146.bmp\r\n0003\\0003_01_00_01_15.bmp\r\n0003\\0003_01_00_01_153.bmp\r\n0003\\0003_01_00_01_157.bmp\r\n0003\\0003_01_00_01_163.bmp\r\n0003\\0003_01_00_01_168.bmp\r\n0003\\0003_01_00_01_172.bmp\r\n0003\\0003_01_00_01_176.bmp\r\n0003\\0003_01_00_01_182.bmp\r\n0003\\0003_01_00_01_188.bmp\r\n0003\\0003_01_00_01_192.bmp\r\n0003\\0003_01_00_01_200.bmp\r\n0003\\0003_01_00_01_204.bmp\r\n0003\\0003_01_00_01_208.bmp\r\n0003\\0003_01_00_01_211.bmp\r\n0003\\0003_01_00_01_215.bmp\r\n0003\\0003_01_00_01_219.bmp\r\n0003\\0003_01_00_01_222.bmp\r\n0003\\0003_01_00_01_226.bmp\r\n0003\\0003_01_00_01_23.bmp\r\n0003\\0003_01_00_01_233.bmp\r\n0003\\0003_01_00_01_237.bmp\r\n0003\\0003_01_00_01_240.bmp\r\n0003\\0003_01_00_01_244.bmp\r\n0003\\0003_01_00_01_248.bmp\r\n0003\\0003_01_00_01_251.bmp\r\n0003\\0003_01_00_01_255.bmp\r\n0003\\0003_01_00_01_259.bmp\r\n0003\\0003_01_00_01_262.bmp\r\n0003\\0003_01_00_01_266.bmp\r\n0003\\0003_01_00_01_27.bmp\r\n0003\\0003_01_00_01_274.bmp\r\n0003\\0003_01_00_01_278.bmp\r\n0003\\0003_01_00_01_281.bmp\r\n0003\\0003_01_00_01_285.bmp\r\n0003\\0003_01_00_01_29.bmp\r\n0003\\0003_01_00_01_293.bmp\r\n0003\\0003_01_00_01_297.bmp\r\n0003\\0003_01_00_01_30.bmp\r\n0003\\0003_01_00_01_303.bmp\r\n0003\\0003_01_00_01_307.bmp\r\n0003\\0003_01_00_01_311.bmp\r\n0003\\0003_01_00_01_316.bmp\r\n0003\\0003_01_00_01_32.bmp\r\n0003\\0003_01_00_01_323.bmp\r\n0003\\0003_01_00_01_328.bmp\r\n0003\\0003_01_00_01_331.bmp\r\n0003\\0003_01_00_01_336.bmp\r\n0003\\0003_01_00_01_34.bmp\r\n0003\\0003_01_00_01_345.bmp\r\n0003\\0003_01_00_01_35.bmp\r\n0003\\0003_01_00_01_354.bmp\r\n0003\\0003_01_00_01_358.bmp\r\n0003\\0003_01_00_01_362.bmp\r\n0003\\0003_01_00_01_367.bmp\r\n0003\\0003_01_00_01_371.bmp\r\n0003\\0003_01_00_01_375.bmp\r\n0003\\0003_01_00_01_379.bmp\r\n0003\\0003_01_00_01_382.bmp\r\n0003\\0003_01_00_01_386.bmp\r\n0003\\0003_01_00_01_390.bmp\r\n0003\\0003_01_00_01_394.bmp\r\n0003\\0003_01_00_01_399.bmp\r\n0003\\0003_01_00_01_406.bmp\r\n0003\\0003_01_00_01_410.bmp\r\n0003\\0003_01_00_01_414.bmp\r\n0003\\0003_01_00_01_418.bmp\r\n0003\\0003_01_00_01_421.bmp\r\n0003\\0003_01_00_01_426.bmp\r\n0003\\0003_01_00_01_43.bmp\r\n0003\\0003_01_00_01_433.bmp\r\n0003\\0003_01_00_01_437.bmp\r\n0003\\0003_01_00_01_440.bmp\r\n0003\\0003_01_00_01_444.bmp\r\n0003\\0003_01_00_01_449.bmp\r\n0003\\0003_01_00_01_452.bmp\r\n0003\\0003_01_00_01_456.bmp\r\n0003\\0003_01_00_01_46.bmp\r\n0003\\0003_01_00_01_464.bmp\r\n0003\\0003_01_00_01_468.bmp\r\n0003\\0003_01_00_01_471.bmp\r\n0003\\0003_01_00_01_476.bmp\r\n0003\\0003_01_00_01_48.bmp\r\n0003\\0003_01_00_01_483.bmp\r\n0003\\0003_01_00_01_487.bmp\r\n0003\\0003_01_00_01_490.bmp\r\n0003\\0003_01_00_01_494.bmp\r\n0003\\0003_01_00_01_498.bmp\r\n0003\\0003_01_00_01_51.bmp\r\n0003\\0003_01_00_01_57.bmp\r\n0003\\0003_01_00_01_61.bmp\r\n0003\\0003_01_00_01_65.bmp\r\n0003\\0003_01_00_01_69.bmp\r\n0003\\0003_01_00_01_73.bmp\r\n0003\\0003_01_00_01_79.bmp\r\n0003\\0003_01_00_01_82.bmp\r\n0003\\0003_01_00_01_86.bmp\r\n0003\\0003_01_00_01_90.bmp\r\n0003\\0003_01_00_01_94.bmp\r\n0003\\0003_01_00_01_98.bmp\r\n0004\\0004_01_00_01_0.bmp\r\n0004\\0004_01_00_01_101.bmp\r\n0004\\0004_01_00_01_105.bmp\r\n0004\\0004_01_00_01_109.bmp\r\n0004\\0004_01_00_01_112.bmp\r\n0004\\0004_01_00_01_116.bmp\r\n0004\\0004_01_00_01_122.bmp\r\n0004\\0004_01_00_01_141.bmp\r\n0004\\0004_01_00_01_145.bmp\r\n0004\\0004_01_00_01_15.bmp\r\n0004\\0004_01_00_01_154.bmp\r\n0004\\0004_01_00_01_169.bmp\r\n0004\\0004_01_00_01_172.bmp\r\n0004\\0004_01_00_01_176.bmp\r\n0004\\0004_01_00_01_18.bmp\r\n0004\\0004_01_00_01_183.bmp\r\n0004\\0004_01_00_01_187.bmp\r\n0004\\0004_01_00_01_190.bmp\r\n0004\\0004_01_00_01_194.bmp\r\n0004\\0004_01_00_01_198.bmp\r\n0004\\0004_01_00_01_200.bmp\r\n0004\\0004_01_00_01_204.bmp\r\n0004\\0004_01_00_01_209.bmp\r\n0004\\0004_01_00_01_212.bmp\r\n0004\\0004_01_00_01_216.bmp\r\n0004\\0004_01_00_01_220.bmp\r\n0004\\0004_01_00_01_224.bmp\r\n0004\\0004_01_00_01_228.bmp\r\n0004\\0004_01_00_01_231.bmp\r\n0004\\0004_01_00_01_235.bmp\r\n0004\\0004_01_00_01_239.bmp\r\n0004\\0004_01_00_01_242.bmp\r\n0004\\0004_01_00_01_246.bmp\r\n0004\\0004_01_00_01_25.bmp\r\n0004\\0004_01_00_01_254.bmp\r\n0004\\0004_01_00_01_258.bmp\r\n0004\\0004_01_00_01_261.bmp\r\n0004\\0004_01_00_01_265.bmp\r\n0004\\0004_01_00_01_269.bmp\r\n0004\\0004_01_00_01_272.bmp\r\n0004\\0004_01_00_01_277.bmp\r\n0004\\0004_01_00_01_280.bmp\r\n0004\\0004_01_00_01_284.bmp\r\n0004\\0004_01_00_01_288.bmp\r\n0004\\0004_01_00_01_292.bmp\r\n0004\\0004_01_00_01_297.bmp\r\n0004\\0004_01_00_01_30.bmp\r\n0004\\0004_01_00_01_303.bmp\r\n0004\\0004_01_00_01_307.bmp\r\n0004\\0004_01_00_01_310.bmp\r\n0004\\0004_01_00_01_314.bmp\r\n0004\\0004_01_00_01_318.bmp\r\n0004\\0004_01_00_01_321.bmp\r\n0004\\0004_01_00_01_325.bmp\r\n0004\\0004_01_00_01_33.bmp\r\n0004\\0004_01_00_01_335.bmp\r\n0004\\0004_01_00_01_339.bmp\r\n0004\\0004_01_00_01_342.bmp\r\n0004\\0004_01_00_01_346.bmp\r\n0004\\0004_01_00_01_35.bmp\r\n0004\\0004_01_00_01_353.bmp\r\n0004\\0004_01_00_01_358.bmp\r\n0004\\0004_01_00_01_361.bmp\r\n0004\\0004_01_00_01_367.bmp\r\n0004\\0004_01_00_01_371.bmp\r\n0004\\0004_01_00_01_375.bmp\r\n0004\\0004_01_00_01_379.bmp\r\n0004\\0004_01_00_01_383.bmp\r\n0004\\0004_01_00_01_388.bmp\r\n0004\\0004_01_00_01_391.bmp\r\n0004\\0004_01_00_01_395.bmp\r\n0004\\0004_01_00_01_399.bmp\r\n0004\\0004_01_00_01_402.bmp\r\n0004\\0004_01_00_01_406.bmp\r\n0004\\0004_01_00_01_41.bmp\r\n0004\\0004_01_00_01_413.bmp\r\n0004\\0004_01_00_01_417.bmp\r\n0004\\0004_01_00_01_421.bmp\r\n0004\\0004_01_00_01_425.bmp\r\n0004\\0004_01_00_01_43.bmp\r\n0004\\0004_01_00_01_434.bmp\r\n0004\\0004_01_00_01_440.bmp\r\n0004\\0004_01_00_01_444.bmp\r\n0004\\0004_01_00_01_448.bmp\r\n0004\\0004_01_00_01_453.bmp\r\n0004\\0004_01_00_01_459.bmp\r\n0004\\0004_01_00_01_462.bmp\r\n0004\\0004_01_00_01_466.bmp\r\n0004\\0004_01_00_01_470.bmp\r\n0004\\0004_01_00_01_474.bmp\r\n0004\\0004_01_00_01_478.bmp\r\n0004\\0004_01_00_01_481.bmp\r\n0004\\0004_01_00_01_485.bmp\r\n0004\\0004_01_00_01_489.bmp\r\n0004\\0004_01_00_01_494.bmp\r\n0004\\0004_01_00_01_498.bmp\r\n0004\\0004_01_00_01_51.bmp\r\n0004\\0004_01_00_01_55.bmp\r\n0004\\0004_01_00_01_59.bmp\r\n0004\\0004_01_00_01_62.bmp\r\n0004\\0004_01_00_01_66.bmp\r\n0004\\0004_01_00_01_7.bmp\r\n0004\\0004_01_00_01_73.bmp\r\n0004\\0004_01_00_01_77.bmp\r\n0004\\0004_01_00_01_80.bmp\r\n0004\\0004_01_00_01_86.bmp\r\n0004\\0004_01_00_01_9.bmp\r\n0004\\0004_01_00_01_93.bmp\r\n0004\\0004_01_00_01_97.bmp\r\n0005\\0005_00_00_01_0.bmp\r\n0005\\0005_00_00_01_106.bmp\r\n0005\\0005_00_00_01_12.bmp\r\n0005\\0005_00_00_01_13.bmp\r\n0005\\0005_00_00_01_136.bmp\r\n0005\\0005_00_00_01_152.bmp\r\n0005\\0005_00_00_01_16.bmp\r\n0005\\0005_00_00_01_17.bmp\r\n0005\\0005_00_00_01_182.bmp\r\n0005\\0005_00_00_01_188.bmp\r\n0005\\0005_00_00_01_195.bmp\r\n0005\\0005_00_00_01_201.bmp\r\n0005\\0005_00_00_01_206.bmp\r\n0005\\0005_00_00_01_22.bmp\r\n0005\\0005_00_00_01_240.bmp\r\n0005\\0005_00_00_01_255.bmp\r\n0005\\0005_00_00_01_262.bmp\r\n0005\\0005_00_00_01_287.bmp\r\n0005\\0005_00_00_01_299.bmp\r\n0005\\0005_00_00_01_302.bmp\r\n0005\\0005_00_00_01_309.bmp\r\n0005\\0005_00_00_01_313.bmp\r\n0005\\0005_00_00_01_318.bmp\r\n0005\\0005_00_00_01_325.bmp\r\n0005\\0005_00_00_01_332.bmp\r\n0005\\0005_00_00_01_336.bmp\r\n0005\\0005_00_00_01_342.bmp\r\n0005\\0005_00_00_01_348.bmp\r\n0005\\0005_00_00_01_354.bmp\r\n0005\\0005_00_00_01_36.bmp\r\n0005\\0005_00_00_01_364.bmp\r\n0005\\0005_00_00_01_370.bmp\r\n0005\\0005_00_00_01_374.bmp\r\n0005\\0005_00_00_01_378.bmp\r\n0005\\0005_00_00_01_381.bmp\r\n0005\\0005_00_00_01_385.bmp\r\n0005\\0005_00_00_01_391.bmp\r\n0005\\0005_00_00_01_396.bmp\r\n0005\\0005_00_00_01_401.bmp\r\n0005\\0005_00_00_01_412.bmp\r\n0005\\0005_00_00_01_418.bmp\r\n0005\\0005_00_00_01_425.bmp\r\n0005\\0005_00_00_01_439.bmp\r\n0005\\0005_00_00_01_442.bmp\r\n0005\\0005_00_00_01_446.bmp\r\n0005\\0005_00_00_01_450.bmp\r\n0005\\0005_00_00_01_454.bmp\r\n0005\\0005_00_00_01_458.bmp\r\n0005\\0005_00_00_01_461.bmp\r\n0005\\0005_00_00_01_465.bmp\r\n0005\\0005_00_00_01_47.bmp\r\n0005\\0005_00_00_01_473.bmp\r\n0005\\0005_00_00_01_477.bmp\r\n0005\\0005_00_00_01_480.bmp\r\n0005\\0005_00_00_01_484.bmp\r\n0005\\0005_00_00_01_488.bmp\r\n0005\\0005_00_00_01_491.bmp\r\n0005\\0005_00_00_01_498.bmp\r\n0005\\0005_00_00_01_51.bmp\r\n0005\\0005_00_00_01_55.bmp\r\n0005\\0005_00_00_01_59.bmp\r\n0005\\0005_00_00_01_62.bmp\r\n0005\\0005_00_00_01_66.bmp\r\n0005\\0005_00_00_01_7.bmp\r\n0005\\0005_00_00_01_73.bmp\r\n0005\\0005_00_00_01_78.bmp\r\n0005\\0005_00_00_01_88.bmp\r\n0005\\0005_00_00_01_91.bmp\r\n0005\\0005_00_00_01_95.bmp\r\n0006\\0006_00_00_01_0.bmp\r\n0006\\0006_00_00_01_101.bmp\r\n0006\\0006_00_00_01_105.bmp\r\n0006\\0006_00_00_01_11.bmp\r\n0006\\0006_00_00_01_113.bmp\r\n0006\\0006_00_00_01_117.bmp\r\n0006\\0006_00_00_01_120.bmp\r\n0006\\0006_00_00_01_124.bmp\r\n0006\\0006_00_00_01_128.bmp\r\n0006\\0006_00_00_01_131.bmp\r\n0006\\0006_00_00_01_135.bmp\r\n0006\\0006_00_00_01_139.bmp\r\n0006\\0006_00_00_01_142.bmp\r\n0006\\0006_00_00_01_146.bmp\r\n0006\\0006_00_00_01_15.bmp\r\n0006\\0006_00_00_01_153.bmp\r\n0006\\0006_00_00_01_157.bmp\r\n0006\\0006_00_00_01_160.bmp\r\n0006\\0006_00_00_01_164.bmp\r\n0006\\0006_00_00_01_169.bmp\r\n0006\\0006_00_00_01_172.bmp\r\n0006\\0006_00_00_01_176.bmp\r\n0006\\0006_00_00_01_18.bmp\r\n0006\\0006_00_00_01_183.bmp\r\n0006\\0006_00_00_01_187.bmp\r\n0006\\0006_00_00_01_190.bmp\r\n0006\\0006_00_00_01_194.bmp\r\n0006\\0006_00_00_01_199.bmp\r\n0006\\0006_00_00_01_201.bmp\r\n0006\\0006_00_00_01_205.bmp\r\n0006\\0006_00_00_01_209.bmp\r\n0006\\0006_00_00_01_212.bmp\r\n0006\\0006_00_00_01_217.bmp\r\n0006\\0006_00_00_01_220.bmp\r\n0006\\0006_00_00_01_224.bmp\r\n0006\\0006_00_00_01_228.bmp\r\n0006\\0006_00_00_01_231.bmp\r\n0006\\0006_00_00_01_235.bmp\r\n0006\\0006_00_00_01_239.bmp\r\n0006\\0006_00_00_01_242.bmp\r\n0006\\0006_00_00_01_246.bmp\r\n0006\\0006_00_00_01_25.bmp\r\n0006\\0006_00_00_01_253.bmp\r\n0006\\0006_00_00_01_257.bmp\r\n0006\\0006_00_00_01_260.bmp\r\n0006\\0006_00_00_01_265.bmp\r\n0006\\0006_00_00_01_269.bmp\r\n0006\\0006_00_00_01_272.bmp\r\n0006\\0006_00_00_01_276.bmp\r\n0006\\0006_00_00_01_28.bmp\r\n0006\\0006_00_00_01_283.bmp\r\n0006\\0006_00_00_01_287.bmp\r\n0006\\0006_00_00_01_290.bmp\r\n0006\\0006_00_00_01_294.bmp\r\n0006\\0006_00_00_01_298.bmp\r\n0006\\0006_00_00_01_301.bmp\r\n0006\\0006_00_00_01_306.bmp\r\n0006\\0006_00_00_01_31.bmp\r\n0006\\0006_00_00_01_313.bmp\r\n0006\\0006_00_00_01_317.bmp\r\n0006\\0006_00_00_01_320.bmp\r\n0006\\0006_00_00_01_324.bmp\r\n0006\\0006_00_00_01_328.bmp\r\n0006\\0006_00_00_01_331.bmp\r\n0006\\0006_00_00_01_335.bmp\r\n0006\\0006_00_00_01_339.bmp\r\n0006\\0006_00_00_01_342.bmp\r\n0006\\0006_00_00_01_346.bmp\r\n0006\\0006_00_00_01_35.bmp\r\n0006\\0006_00_00_01_353.bmp\r\n0006\\0006_00_00_01_357.bmp\r\n0006\\0006_00_00_01_360.bmp\r\n0006\\0006_00_00_01_364.bmp\r\n0006\\0006_00_00_01_368.bmp\r\n0006\\0006_00_00_01_371.bmp\r\n0006\\0006_00_00_01_375.bmp\r\n0006\\0006_00_00_01_379.bmp\r\n0006\\0006_00_00_01_382.bmp\r\n0006\\0006_00_00_01_386.bmp\r\n0006\\0006_00_00_01_39.bmp\r\n0006\\0006_00_00_01_394.bmp\r\n0006\\0006_00_00_01_399.bmp\r\n0006\\0006_00_00_01_401.bmp\r\n0006\\0006_00_00_01_405.bmp\r\n0006\\0006_00_00_01_409.bmp\r\n0006\\0006_00_00_01_412.bmp\r\n0006\\0006_00_00_01_416.bmp\r\n0006\\0006_00_00_01_42.bmp\r\n0006\\0006_00_00_01_423.bmp\r\n0006\\0006_00_00_01_427.bmp\r\n0006\\0006_00_00_01_430.bmp\r\n0006\\0006_00_00_01_435.bmp\r\n0006\\0006_00_00_01_439.bmp\r\n0006\\0006_00_00_01_445.bmp\r\n0006\\0006_00_00_01_449.bmp\r\n0006\\0006_00_00_01_453.bmp\r\n0006\\0006_00_00_01_457.bmp\r\n0006\\0006_00_00_01_460.bmp\r\n0006\\0006_00_00_01_465.bmp\r\n0006\\0006_00_00_01_469.bmp\r\n0006\\0006_00_00_01_472.bmp\r\n0006\\0006_00_00_01_476.bmp\r\n0006\\0006_00_00_01_48.bmp\r\n0006\\0006_00_00_01_483.bmp\r\n0006\\0006_00_00_01_487.bmp\r\n0006\\0006_00_00_01_490.bmp\r\n0006\\0006_00_00_01_494.bmp\r\n0006\\0006_00_00_01_498.bmp\r\n0006\\0006_00_00_01_51.bmp\r\n0006\\0006_00_00_01_55.bmp\r\n0006\\0006_00_00_01_59.bmp\r\n0006\\0006_00_00_01_62.bmp\r\n0006\\0006_00_00_01_66.bmp\r\n0006\\0006_00_00_01_70.bmp\r\n0006\\0006_00_00_01_74.bmp\r\n0006\\0006_00_00_01_78.bmp\r\n0006\\0006_00_00_01_81.bmp\r\n0006\\0006_00_00_01_85.bmp\r\n0006\\0006_00_00_01_89.bmp\r\n0006\\0006_00_00_01_92.bmp\r\n0006\\0006_00_00_01_96.bmp\r\n0009\\0009_01_00_01_0.bmp\r\n0009\\0009_01_00_01_101.bmp\r\n0009\\0009_01_00_01_105.bmp\r\n0009\\0009_01_00_01_109.bmp\r\n0009\\0009_01_00_01_112.bmp\r\n0009\\0009_01_00_01_116.bmp\r\n0009\\0009_01_00_01_12.bmp\r\n0009\\0009_01_00_01_123.bmp\r\n0009\\0009_01_00_01_127.bmp\r\n0009\\0009_01_00_01_130.bmp\r\n0009\\0009_01_00_01_135.bmp\r\n0009\\0009_01_00_01_147.bmp\r\n0009\\0009_01_00_01_150.bmp\r\n0009\\0009_01_00_01_154.bmp\r\n0009\\0009_01_00_01_158.bmp\r\n0009\\0009_01_00_01_161.bmp\r\n0009\\0009_01_00_01_165.bmp\r\n0009\\0009_01_00_01_169.bmp\r\n0009\\0009_01_00_01_172.bmp\r\n0009\\0009_01_00_01_176.bmp\r\n0009\\0009_01_00_01_181.bmp\r\n0009\\0009_01_00_01_185.bmp\r\n0009\\0009_01_00_01_189.bmp\r\n0009\\0009_01_00_01_192.bmp\r\n0009\\0009_01_00_01_197.bmp\r\n0009\\0009_01_00_01_201.bmp\r\n0009\\0009_01_00_01_205.bmp\r\n0009\\0009_01_00_01_209.bmp\r\n0009\\0009_01_00_01_212.bmp\r\n0009\\0009_01_00_01_218.bmp\r\n0009\\0009_01_00_01_225.bmp\r\n0009\\0009_01_00_01_230.bmp\r\n0009\\0009_01_00_01_234.bmp\r\n0009\\0009_01_00_01_239.bmp\r\n0009\\0009_01_00_01_244.bmp\r\n0009\\0009_01_00_01_252.bmp\r\n0009\\0009_01_00_01_256.bmp\r\n0009\\0009_01_00_01_26.bmp\r\n0009\\0009_01_00_01_263.bmp\r\n0009\\0009_01_00_01_268.bmp\r\n0009\\0009_01_00_01_271.bmp\r\n0009\\0009_01_00_01_275.bmp\r\n0009\\0009_01_00_01_279.bmp\r\n0009\\0009_01_00_01_282.bmp\r\n0009\\0009_01_00_01_286.bmp\r\n0009\\0009_01_00_01_29.bmp\r\n0009\\0009_01_00_01_293.bmp\r\n0009\\0009_01_00_01_297.bmp\r\n0009\\0009_01_00_01_301.bmp\r\n0009\\0009_01_00_01_305.bmp\r\n0009\\0009_01_00_01_309.bmp\r\n0009\\0009_01_00_01_312.bmp\r\n0009\\0009_01_00_01_316.bmp\r\n0009\\0009_01_00_01_32.bmp\r\n0009\\0009_01_00_01_323.bmp\r\n0009\\0009_01_00_01_327.bmp\r\n0009\\0009_01_00_01_332.bmp\r\n0009\\0009_01_00_01_336.bmp\r\n0009\\0009_01_00_01_341.bmp\r\n0009\\0009_01_00_01_345.bmp\r\n0009\\0009_01_00_01_349.bmp\r\n0009\\0009_01_00_01_352.bmp\r\n0009\\0009_01_00_01_356.bmp\r\n0009\\0009_01_00_01_36.bmp\r\n0009\\0009_01_00_01_363.bmp\r\n0009\\0009_01_00_01_367.bmp\r\n0009\\0009_01_00_01_370.bmp\r\n0009\\0009_01_00_01_374.bmp\r\n0009\\0009_01_00_01_378.bmp\r\n0009\\0009_01_00_01_381.bmp\r\n0009\\0009_01_00_01_385.bmp\r\n0009\\0009_01_00_01_389.bmp\r\n0009\\0009_01_00_01_392.bmp\r\n0009\\0009_01_00_01_396.bmp\r\n0009\\0009_01_00_01_4.bmp\r\n0009\\0009_01_00_01_402.bmp\r\n0009\\0009_01_00_01_406.bmp\r\n0009\\0009_01_00_01_41.bmp\r\n0009\\0009_01_00_01_414.bmp\r\n0009\\0009_01_00_01_420.bmp\r\n0009\\0009_01_00_01_424.bmp\r\n0009\\0009_01_00_01_428.bmp\r\n0009\\0009_01_00_01_433.bmp\r\n0009\\0009_01_00_01_437.bmp\r\n0009\\0009_01_00_01_442.bmp\r\n0009\\0009_01_00_01_446.bmp\r\n0009\\0009_01_00_01_453.bmp\r\n0009\\0009_01_00_01_464.bmp\r\n0007\\0007_00_00_01_0.bmp\r\n0007\\0007_00_00_01_101.bmp\r\n0007\\0007_00_00_01_105.bmp\r\n0007\\0007_00_00_01_109.bmp\r\n0007\\0007_00_00_01_112.bmp\r\n0007\\0007_00_00_01_116.bmp\r\n0007\\0007_00_00_01_12.bmp\r\n0007\\0007_00_00_01_123.bmp\r\n0007\\0007_00_00_01_127.bmp\r\n0007\\0007_00_00_01_130.bmp\r\n0007\\0007_00_00_01_134.bmp\r\n0007\\0007_00_00_01_138.bmp\r\n0007\\0007_00_00_01_141.bmp\r\n0007\\0007_00_00_01_145.bmp\r\n0007\\0007_00_00_01_149.bmp\r\n0007\\0007_00_00_01_152.bmp\r\n0007\\0007_00_00_01_156.bmp\r\n0007\\0007_00_00_01_160.bmp\r\n0007\\0007_00_00_01_166.bmp\r\n0007\\0007_00_00_01_17.bmp\r\n0007\\0007_00_00_01_174.bmp\r\n0007\\0007_00_00_01_18.bmp\r\n0007\\0007_00_00_01_183.bmp\r\n0007\\0007_00_00_01_188.bmp\r\n0007\\0007_00_00_01_191.bmp\r\n0007\\0007_00_00_01_195.bmp\r\n0007\\0007_00_00_01_199.bmp\r\n0007\\0007_00_00_01_201.bmp\r\n0007\\0007_00_00_01_205.bmp\r\n0007\\0007_00_00_01_21.bmp\r\n0007\\0007_00_00_01_213.bmp\r\n0007\\0007_00_00_01_217.bmp\r\n0007\\0007_00_00_01_220.bmp\r\n0007\\0007_00_00_01_224.bmp\r\n0007\\0007_00_00_01_229.bmp\r\n0007\\0007_00_00_01_232.bmp\r\n0007\\0007_00_00_01_236.bmp\r\n0007\\0007_00_00_01_240.bmp\r\n0007\\0007_00_00_01_244.bmp\r\n0007\\0007_00_00_01_248.bmp\r\n0007\\0007_00_00_01_251.bmp\r\n0007\\0007_00_00_01_255.bmp\r\n0007\\0007_00_00_01_259.bmp\r\n0007\\0007_00_00_01_262.bmp\r\n0007\\0007_00_00_01_266.bmp\r\n0007\\0007_00_00_01_27.bmp\r\n0007\\0007_00_00_01_273.bmp\r\n0007\\0007_00_00_01_277.bmp\r\n0007\\0007_00_00_01_280.bmp\r\n0007\\0007_00_00_01_284.bmp\r\n0007\\0007_00_00_01_288.bmp\r\n0007\\0007_00_00_01_291.bmp\r\n0007\\0007_00_00_01_295.bmp\r\n0007\\0007_00_00_01_299.bmp\r\n0007\\0007_00_00_01_301.bmp\r\n0007\\0007_00_00_01_305.bmp\r\n0007\\0007_00_00_01_309.bmp\r\n0007\\0007_00_00_01_312.bmp\r\n0007\\0007_00_00_01_316.bmp\r\n0007\\0007_00_00_01_32.bmp\r\n0007\\0007_00_00_01_323.bmp\r\n0007\\0007_00_00_01_327.bmp\r\n0007\\0007_00_00_01_330.bmp\r\n0007\\0007_00_00_01_334.bmp\r\n0007\\0007_00_00_01_338.bmp\r\n0007\\0007_00_00_01_341.bmp\r\n0007\\0007_00_00_01_345.bmp\r\n0007\\0007_00_00_01_35.bmp\r\n0007\\0007_00_00_01_353.bmp\r\n0007\\0007_00_00_01_36.bmp\r\n0007\\0007_00_00_01_363.bmp\r\n0007\\0007_00_00_01_367.bmp\r\n0007\\0007_00_00_01_370.bmp\r\n0007\\0007_00_00_01_374.bmp\r\n0007\\0007_00_00_01_378.bmp\r\n0007\\0007_00_00_01_381.bmp\r\n0007\\0007_00_00_01_385.bmp\r\n0007\\0007_00_00_01_390.bmp\r\n0007\\0007_00_00_01_399.bmp\r\n0007\\0007_00_00_01_401.bmp\r\n0007\\0007_00_00_01_406.bmp\r\n0007\\0007_00_00_01_41.bmp\r\n0007\\0007_00_00_01_42.bmp\r\n0007\\0007_00_00_01_426.bmp\r\n0007\\0007_00_00_01_434.bmp\r\n0007\\0007_00_00_01_44.bmp\r\n0007\\0007_00_00_01_447.bmp\r\n0007\\0007_00_00_01_457.bmp\r\n0007\\0007_00_00_01_460.bmp\r\n0007\\0007_00_00_01_464.bmp\r\n0007\\0007_00_00_01_468.bmp\r\n0007\\0007_00_00_01_471.bmp\r\n0007\\0007_00_00_01_48.bmp\r\n0007\\0007_00_00_01_483.bmp\r\n0007\\0007_00_00_01_5.bmp\r\n0007\\0007_00_00_01_53.bmp\r\n0007\\0007_00_00_01_57.bmp\r\n0007\\0007_00_00_01_60.bmp\r\n0007\\0007_00_00_01_64.bmp\r\n0007\\0007_00_00_01_68.bmp\r\n0007\\0007_00_00_01_71.bmp\r\n0007\\0007_00_00_01_75.bmp\r\n0007\\0007_00_00_01_79.bmp\r\n0007\\0007_00_00_01_82.bmp\r\n0007\\0007_00_00_01_86.bmp\r\n0007\\0007_00_00_01_9.bmp\r\n0007\\0007_00_00_01_93.bmp\r\n0007\\0007_00_00_01_97.bmp\r\n0007\\0007_01_00_01_100.bmp\r\n0007\\0007_01_00_01_108.bmp\r\n0007\\0007_01_00_01_112.bmp\r\n0007\\0007_01_00_01_116.bmp\r\n0007\\0007_01_00_01_12.bmp\r\n0007\\0007_01_00_01_124.bmp\r\n0007\\0007_01_00_01_132.bmp\r\n0007\\0007_01_00_01_137.bmp\r\n0007\\0007_01_00_01_141.bmp\r\n0007\\0007_01_00_01_151.bmp\r\n0007\\0007_01_00_01_156.bmp\r\n0007\\0007_01_00_01_161.bmp\r\n0007\\0007_01_00_01_17.bmp\r\n0007\\0007_01_00_01_176.bmp\r\n0007\\0007_01_00_01_184.bmp\r\n0007\\0007_01_00_01_190.bmp\r\n0007\\0007_01_00_01_194.bmp\r\n0007\\0007_01_00_01_199.bmp\r\n0007\\0007_01_00_01_204.bmp\r\n0007\\0007_01_00_01_209.bmp\r\n0007\\0007_01_00_01_212.bmp\r\n0007\\0007_01_00_01_22.bmp\r\n0007\\0007_01_00_01_223.bmp\r\n0007\\0007_01_00_01_228.bmp\r\n0007\\0007_01_00_01_232.bmp\r\n0007\\0007_01_00_01_237.bmp\r\n0007\\0007_01_00_01_241.bmp\r\n0007\\0007_01_00_01_245.bmp\r\n0007\\0007_01_00_01_249.bmp\r\n0007\\0007_01_00_01_253.bmp\r\n0007\\0007_01_00_01_257.bmp\r\n0007\\0007_01_00_01_261.bmp\r\n0007\\0007_01_00_01_265.bmp\r\n0007\\0007_01_00_01_269.bmp\r\n0007\\0007_01_00_01_273.bmp\r\n0007\\0007_01_00_01_277.bmp\r\n0007\\0007_01_00_01_280.bmp\r\n0007\\0007_01_00_01_284.bmp\r\n0007\\0007_01_00_01_288.bmp\r\n0007\\0007_01_00_01_291.bmp\r\n0007\\0007_01_00_01_295.bmp\r\n0007\\0007_01_00_01_299.bmp\r\n0007\\0007_01_00_01_301.bmp\r\n0007\\0007_01_00_01_305.bmp\r\n0007\\0007_01_00_01_309.bmp\r\n0007\\0007_01_00_01_313.bmp\r\n0007\\0007_01_00_01_317.bmp\r\n0007\\0007_01_00_01_320.bmp\r\n0007\\0007_01_00_01_324.bmp\r\n0007\\0007_01_00_01_328.bmp\r\n0007\\0007_01_00_01_332.bmp\r\n0007\\0007_01_00_01_336.bmp\r\n0007\\0007_01_00_01_340.bmp\r\n0007\\0007_01_00_01_344.bmp\r\n0007\\0007_01_00_01_348.bmp\r\n0007\\0007_01_00_01_352.bmp\r\n0007\\0007_01_00_01_356.bmp\r\n0007\\0007_01_00_01_36.bmp\r\n0007\\0007_01_00_01_363.bmp\r\n0007\\0007_01_00_01_367.bmp\r\n0007\\0007_01_00_01_371.bmp\r\n0007\\0007_01_00_01_375.bmp\r\n0007\\0007_01_00_01_379.bmp\r\n0007\\0007_01_00_01_382.bmp\r\n0007\\0007_01_00_01_386.bmp\r\n0007\\0007_01_00_01_390.bmp\r\n0007\\0007_01_00_01_394.bmp\r\n0007\\0007_01_00_01_399.bmp\r\n0007\\0007_01_00_01_401.bmp\r\n0007\\0007_01_00_01_405.bmp\r\n0007\\0007_01_00_01_409.bmp\r\n0007\\0007_01_00_01_413.bmp\r\n0007\\0007_01_00_01_417.bmp\r\n0007\\0007_01_00_01_421.bmp\r\n0007\\0007_01_00_01_425.bmp\r\n0007\\0007_01_00_01_430.bmp\r\n0007\\0007_01_00_01_434.bmp\r\n0007\\0007_01_00_01_438.bmp\r\n0007\\0007_01_00_01_442.bmp\r\n0007\\0007_01_00_01_447.bmp\r\n0007\\0007_01_00_01_451.bmp\r\n0007\\0007_01_00_01_455.bmp\r\n0007\\0007_01_00_01_459.bmp\r\n0007\\0007_01_00_01_462.bmp\r\n0007\\0007_01_00_01_468.bmp\r\n0007\\0007_01_00_01_472.bmp\r\n0007\\0007_01_00_01_477.bmp\r\n0007\\0007_01_00_01_481.bmp\r\n0007\\0007_01_00_01_486.bmp\r\n0007\\0007_01_00_01_490.bmp\r\n0007\\0007_01_00_01_494.bmp\r\n0007\\0007_01_00_01_498.bmp\r\n0007\\0007_01_00_01_53.bmp\r\n0007\\0007_01_00_01_59.bmp\r\n0007\\0007_01_00_01_67.bmp\r\n0007\\0007_01_00_01_78.bmp\r\n0007\\0007_01_00_01_83.bmp\r\n0007\\0007_01_00_01_87.bmp\r\n0007\\0007_01_00_01_95.bmp\r\n0001\\0001_00_00_02_0.bmp\r\n0001\\0001_00_00_02_101.bmp\r\n0001\\0001_00_00_02_105.bmp\r\n0001\\0001_00_00_02_109.bmp\r\n0001\\0001_00_00_02_112.bmp\r\n0001\\0001_00_00_02_116.bmp\r\n0001\\0001_00_00_02_12.bmp\r\n0001\\0001_00_00_02_123.bmp\r\n0001\\0001_00_00_02_127.bmp\r\n0001\\0001_00_00_02_130.bmp\r\n0001\\0001_00_00_02_134.bmp\r\n0001\\0001_00_00_02_138.bmp\r\n0001\\0001_00_00_02_141.bmp\r\n0001\\0001_00_00_02_145.bmp\r\n0001\\0001_00_00_02_149.bmp\r\n0001\\0001_00_00_02_152.bmp\r\n0001\\0001_00_00_02_156.bmp\r\n0001\\0001_00_00_02_16.bmp\r\n0001\\0001_00_00_02_167.bmp\r\n0001\\0001_00_00_02_170.bmp\r\n0001\\0001_00_00_02_174.bmp\r\n0001\\0001_00_00_02_178.bmp\r\n0001\\0001_00_00_02_181.bmp\r\n0001\\0001_00_00_02_185.bmp\r\n0001\\0001_00_00_02_189.bmp\r\n0001\\0001_00_00_02_192.bmp\r\n0001\\0001_00_00_02_196.bmp\r\n0001\\0001_00_00_02_2.bmp\r\n0001\\0001_00_00_02_202.bmp\r\n0001\\0001_00_00_02_206.bmp\r\n0001\\0001_00_00_02_21.bmp\r\n0001\\0001_00_00_02_213.bmp\r\n0001\\0001_00_00_02_217.bmp\r\n0001\\0001_00_00_02_220.bmp\r\n0001\\0001_00_00_02_224.bmp\r\n0001\\0001_00_00_02_228.bmp\r\n0001\\0001_00_00_02_231.bmp\r\n0001\\0001_00_00_02_236.bmp\r\n0001\\0001_00_00_02_24.bmp\r\n0001\\0001_00_00_02_243.bmp\r\n0001\\0001_00_00_02_247.bmp\r\n0001\\0001_00_00_02_250.bmp\r\n0001\\0001_00_00_02_254.bmp\r\n0001\\0001_00_00_02_258.bmp\r\n0001\\0001_00_00_02_261.bmp\r\n0001\\0001_00_00_02_265.bmp\r\n0001\\0001_00_00_02_269.bmp\r\n0001\\0001_00_00_02_272.bmp\r\n0001\\0001_00_00_02_276.bmp\r\n0001\\0001_00_00_02_28.bmp\r\n0001\\0001_00_00_02_283.bmp\r\n0001\\0001_00_00_02_287.bmp\r\n0001\\0001_00_00_02_290.bmp\r\n0001\\0001_00_00_02_294.bmp\r\n0001\\0001_00_00_02_298.bmp\r\n0001\\0001_00_00_02_300.bmp\r\n0001\\0001_00_00_02_304.bmp\r\n0001\\0001_00_00_02_31.bmp\r\n0001\\0001_00_00_02_313.bmp\r\n0001\\0001_00_00_02_318.bmp\r\n0001\\0001_00_00_02_321.bmp\r\n0001\\0001_00_00_02_325.bmp\r\n0001\\0001_00_00_02_329.bmp\r\n0001\\0001_00_00_02_332.bmp\r\n0001\\0001_00_00_02_336.bmp\r\n0001\\0001_00_00_02_34.bmp\r\n0001\\0001_00_00_02_343.bmp\r\n0001\\0001_00_00_02_347.bmp\r\n0001\\0001_00_00_02_350.bmp\r\n0001\\0001_00_00_02_354.bmp\r\n0001\\0001_00_00_02_358.bmp\r\n0001\\0001_00_00_02_361.bmp\r\n0001\\0001_00_00_02_365.bmp\r\n0001\\0001_00_00_02_37.bmp\r\n0001\\0001_00_00_02_373.bmp\r\n0001\\0001_00_00_02_377.bmp\r\n0001\\0001_00_00_02_380.bmp\r\n0001\\0001_00_00_02_384.bmp\r\n0001\\0001_00_00_02_388.bmp\r\n0001\\0001_00_00_02_391.bmp\r\n0001\\0001_00_00_02_395.bmp\r\n0001\\0001_00_00_02_399.bmp\r\n0001\\0001_00_00_02_401.bmp\r\n0001\\0001_00_00_02_405.bmp\r\n0001\\0001_00_00_02_409.bmp\r\n0001\\0001_00_00_02_412.bmp\r\n0001\\0001_00_00_02_416.bmp\r\n0001\\0001_00_00_02_42.bmp\r\n0001\\0001_00_00_02_423.bmp\r\n0001\\0001_00_00_02_427.bmp\r\n0001\\0001_00_00_02_430.bmp\r\n0001\\0001_00_00_02_434.bmp\r\n0001\\0001_00_00_02_438.bmp\r\n0001\\0001_00_00_02_441.bmp\r\n0001\\0001_00_00_02_445.bmp\r\n0001\\0001_00_00_02_449.bmp\r\n0001\\0001_00_00_02_452.bmp\r\n0001\\0001_00_00_02_456.bmp\r\n0001\\0001_00_00_02_46.bmp\r\n0001\\0001_00_00_02_463.bmp\r\n0001\\0001_00_00_02_467.bmp\r\n0001\\0001_00_00_02_470.bmp\r\n0001\\0001_00_00_02_474.bmp\r\n0001\\0001_00_00_02_478.bmp\r\n0001\\0001_00_00_02_481.bmp\r\n0001\\0001_00_00_02_485.bmp\r\n0001\\0001_00_00_02_489.bmp\r\n0001\\0001_00_00_02_492.bmp\r\n0001\\0001_00_00_02_496.bmp\r\n0001\\0001_00_00_02_5.bmp\r\n0001\\0001_00_00_02_53.bmp\r\n0001\\0001_00_00_02_57.bmp\r\n0001\\0001_00_00_02_60.bmp\r\n0001\\0001_00_00_02_64.bmp\r\n0001\\0001_00_00_02_68.bmp\r\n0001\\0001_00_00_02_71.bmp\r\n0001\\0001_00_00_02_75.bmp\r\n0001\\0001_00_00_02_79.bmp\r\n0001\\0001_00_00_02_82.bmp\r\n0001\\0001_00_00_02_86.bmp\r\n0001\\0001_00_00_02_9.bmp\r\n0001\\0001_00_00_02_93.bmp\r\n0001\\0001_00_00_02_97.bmp\r\n0004\\0004_01_00_02_0.bmp\r\n0004\\0004_01_00_02_101.bmp\r\n0004\\0004_01_00_02_105.bmp\r\n0004\\0004_01_00_02_109.bmp\r\n0004\\0004_01_00_02_112.bmp\r\n0004\\0004_01_00_02_116.bmp\r\n0004\\0004_01_00_02_12.bmp\r\n0004\\0004_01_00_02_123.bmp\r\n0004\\0004_01_00_02_127.bmp\r\n0004\\0004_01_00_02_130.bmp\r\n0004\\0004_01_00_02_134.bmp\r\n0004\\0004_01_00_02_138.bmp\r\n0004\\0004_01_00_02_141.bmp\r\n0004\\0004_01_00_02_145.bmp\r\n0004\\0004_01_00_02_149.bmp\r\n0004\\0004_01_00_02_152.bmp\r\n0004\\0004_01_00_02_156.bmp\r\n0004\\0004_01_00_02_16.bmp\r\n0004\\0004_01_00_02_163.bmp\r\n0004\\0004_01_00_02_167.bmp\r\n0004\\0004_01_00_02_170.bmp\r\n0004\\0004_01_00_02_174.bmp\r\n0004\\0004_01_00_02_178.bmp\r\n0004\\0004_01_00_02_181.bmp\r\n0004\\0004_01_00_02_185.bmp\r\n0004\\0004_01_00_02_189.bmp\r\n0004\\0004_01_00_02_192.bmp\r\n0004\\0004_01_00_02_196.bmp\r\n0004\\0004_01_00_02_2.bmp\r\n0004\\0004_01_00_02_202.bmp\r\n0004\\0004_01_00_02_206.bmp\r\n0004\\0004_01_00_02_21.bmp\r\n0004\\0004_01_00_02_213.bmp\r\n0004\\0004_01_00_02_217.bmp\r\n0004\\0004_01_00_02_220.bmp\r\n0004\\0004_01_00_02_224.bmp\r\n0004\\0004_01_00_02_228.bmp\r\n0004\\0004_01_00_02_231.bmp\r\n0004\\0004_01_00_02_235.bmp\r\n0004\\0004_01_00_02_239.bmp\r\n0004\\0004_01_00_02_242.bmp\r\n0004\\0004_01_00_02_26.bmp\r\n0004\\0004_01_00_02_270.bmp\r\n0004\\0004_01_00_02_274.bmp\r\n0004\\0004_01_00_02_278.bmp\r\n0004\\0004_01_00_02_281.bmp\r\n0004\\0004_01_00_02_285.bmp\r\n0004\\0004_01_00_02_289.bmp\r\n0004\\0004_01_00_02_292.bmp\r\n0004\\0004_01_00_02_296.bmp\r\n0004\\0004_01_00_02_3.bmp\r\n0004\\0004_01_00_02_302.bmp\r\n0004\\0004_01_00_02_306.bmp\r\n0004\\0004_01_00_02_31.bmp\r\n0004\\0004_01_00_02_313.bmp\r\n0004\\0004_01_00_02_317.bmp\r\n0004\\0004_01_00_02_320.bmp\r\n0004\\0004_01_00_02_324.bmp\r\n0004\\0004_01_00_02_328.bmp\r\n0004\\0004_01_00_02_331.bmp\r\n0004\\0004_01_00_02_335.bmp\r\n0004\\0004_01_00_02_339.bmp\r\n0004\\0004_01_00_02_342.bmp\r\n0004\\0004_01_00_02_346.bmp\r\n0004\\0004_01_00_02_35.bmp\r\n0004\\0004_01_00_02_353.bmp\r\n0004\\0004_01_00_02_357.bmp\r\n0004\\0004_01_00_02_360.bmp\r\n0004\\0004_01_00_02_364.bmp\r\n0004\\0004_01_00_02_368.bmp\r\n0004\\0004_01_00_02_371.bmp\r\n0004\\0004_01_00_02_376.bmp\r\n0004\\0004_01_00_02_38.bmp\r\n0004\\0004_01_00_02_383.bmp\r\n0004\\0004_01_00_02_387.bmp\r\n0004\\0004_01_00_02_390.bmp\r\n0004\\0004_01_00_02_394.bmp\r\n0004\\0004_01_00_02_398.bmp\r\n0004\\0004_01_00_02_400.bmp\r\n0004\\0004_01_00_02_404.bmp\r\n0004\\0004_01_00_02_408.bmp\r\n0004\\0004_01_00_02_411.bmp\r\n0004\\0004_01_00_02_415.bmp\r\n0004\\0004_01_00_02_419.bmp\r\n0004\\0004_01_00_02_422.bmp\r\n0004\\0004_01_00_02_426.bmp\r\n0004\\0004_01_00_02_43.bmp\r\n0004\\0004_01_00_02_433.bmp\r\n0004\\0004_01_00_02_437.bmp\r\n0004\\0004_01_00_02_440.bmp\r\n0004\\0004_01_00_02_444.bmp\r\n0004\\0004_01_00_02_448.bmp\r\n0004\\0004_01_00_02_451.bmp\r\n0004\\0004_01_00_02_455.bmp\r\n0004\\0004_01_00_02_459.bmp\r\n0004\\0004_01_00_02_462.bmp\r\n0004\\0004_01_00_02_466.bmp\r\n0004\\0004_01_00_02_47.bmp\r\n0004\\0004_01_00_02_473.bmp\r\n0004\\0004_01_00_02_477.bmp\r\n0004\\0004_01_00_02_480.bmp\r\n0004\\0004_01_00_02_484.bmp\r\n0004\\0004_01_00_02_488.bmp\r\n0004\\0004_01_00_02_491.bmp\r\n0004\\0004_01_00_02_495.bmp\r\n0004\\0004_01_00_02_499.bmp\r\n0004\\0004_01_00_02_52.bmp\r\n0004\\0004_01_00_02_56.bmp\r\n0004\\0004_01_00_02_6.bmp\r\n0004\\0004_01_00_02_63.bmp\r\n0004\\0004_01_00_02_67.bmp\r\n0004\\0004_01_00_02_70.bmp\r\n0004\\0004_01_00_02_74.bmp\r\n0004\\0004_01_00_02_78.bmp\r\n0004\\0004_01_00_02_81.bmp\r\n0004\\0004_01_00_02_85.bmp\r\n0004\\0004_01_00_02_89.bmp\r\n0004\\0004_01_00_02_92.bmp\r\n0004\\0004_01_00_02_96.bmp\r\n0005\\0005_00_00_02_0.bmp\r\n0005\\0005_00_00_02_101.bmp\r\n0005\\0005_00_00_02_105.bmp\r\n0005\\0005_00_00_02_109.bmp\r\n0005\\0005_00_00_02_112.bmp\r\n0005\\0005_00_00_02_116.bmp\r\n0005\\0005_00_00_02_12.bmp\r\n0005\\0005_00_00_02_123.bmp\r\n0005\\0005_00_00_02_129.bmp\r\n0005\\0005_00_00_02_133.bmp\r\n0005\\0005_00_00_02_137.bmp\r\n0005\\0005_00_00_02_140.bmp\r\n0005\\0005_00_00_02_144.bmp\r\n0005\\0005_00_00_02_148.bmp\r\n0005\\0005_00_00_02_151.bmp\r\n0005\\0005_00_00_02_155.bmp\r\n0005\\0005_00_00_02_16.bmp\r\n0005\\0005_00_00_02_163.bmp\r\n0005\\0005_00_00_02_167.bmp\r\n0005\\0005_00_00_02_170.bmp\r\n0005\\0005_00_00_02_174.bmp\r\n0005\\0005_00_00_02_178.bmp\r\n0005\\0005_00_00_02_182.bmp\r\n0005\\0005_00_00_02_186.bmp\r\n0005\\0005_00_00_02_19.bmp\r\n0005\\0005_00_00_02_193.bmp\r\n0005\\0005_00_00_02_197.bmp\r\n0005\\0005_00_00_02_20.bmp\r\n0005\\0005_00_00_02_203.bmp\r\n0005\\0005_00_00_02_207.bmp\r\n0005\\0005_00_00_02_210.bmp\r\n0005\\0005_00_00_02_214.bmp\r\n0005\\0005_00_00_02_218.bmp\r\n0005\\0005_00_00_02_222.bmp\r\n0005\\0005_00_00_02_226.bmp\r\n0005\\0005_00_00_02_23.bmp\r\n0005\\0005_00_00_02_233.bmp\r\n0005\\0005_00_00_02_237.bmp\r\n0005\\0005_00_00_02_240.bmp\r\n0005\\0005_00_00_02_244.bmp\r\n0005\\0005_00_00_02_248.bmp\r\n0005\\0005_00_00_02_251.bmp\r\n0005\\0005_00_00_02_255.bmp\r\n0005\\0005_00_00_02_26.bmp\r\n0005\\0005_00_00_02_263.bmp\r\n0005\\0005_00_00_02_267.bmp\r\n0005\\0005_00_00_02_270.bmp\r\n0005\\0005_00_00_02_274.bmp\r\n0005\\0005_00_00_02_279.bmp\r\n0005\\0005_00_00_02_282.bmp\r\n0005\\0005_00_00_02_287.bmp\r\n0005\\0005_00_00_02_290.bmp\r\n0005\\0005_00_00_02_295.bmp\r\n0005\\0005_00_00_02_299.bmp\r\n0005\\0005_00_00_02_305.bmp\r\n0005\\0005_00_00_02_31.bmp\r\n0005\\0005_00_00_02_313.bmp\r\n0005\\0005_00_00_02_317.bmp\r\n0005\\0005_00_00_02_321.bmp\r\n0005\\0005_00_00_02_325.bmp\r\n0005\\0005_00_00_02_329.bmp\r\n0005\\0005_00_00_02_332.bmp\r\n0005\\0005_00_00_02_336.bmp\r\n0005\\0005_00_00_02_34.bmp\r\n0005\\0005_00_00_02_343.bmp\r\n0005\\0005_00_00_02_347.bmp\r\n0005\\0005_00_00_02_350.bmp\r\n0005\\0005_00_00_02_355.bmp\r\n0005\\0005_00_00_02_359.bmp\r\n0005\\0005_00_00_02_362.bmp\r\n0005\\0005_00_00_02_366.bmp\r\n0005\\0005_00_00_02_37.bmp\r\n0005\\0005_00_00_02_373.bmp\r\n0005\\0005_00_00_02_377.bmp\r\n0005\\0005_00_00_02_380.bmp\r\n0005\\0005_00_00_02_384.bmp\r\n0005\\0005_00_00_02_388.bmp\r\n0005\\0005_00_00_02_391.bmp\r\n0005\\0005_00_00_02_395.bmp\r\n0005\\0005_00_00_02_399.bmp\r\n0005\\0005_00_00_02_401.bmp\r\n0005\\0005_00_00_02_405.bmp\r\n0005\\0005_00_00_02_409.bmp\r\n0005\\0005_00_00_02_412.bmp\r\n0005\\0005_00_00_02_416.bmp\r\n0005\\0005_00_00_02_42.bmp\r\n0005\\0005_00_00_02_423.bmp\r\n0005\\0005_00_00_02_427.bmp\r\n0005\\0005_00_00_02_430.bmp\r\n0005\\0005_00_00_02_434.bmp\r\n0005\\0005_00_00_02_438.bmp\r\n0005\\0005_00_00_02_441.bmp\r\n0005\\0005_00_00_02_445.bmp\r\n0005\\0005_00_00_02_449.bmp\r\n0005\\0005_00_00_02_452.bmp\r\n0005\\0005_00_00_02_456.bmp\r\n0005\\0005_00_00_02_46.bmp\r\n0005\\0005_00_00_02_463.bmp\r\n0005\\0005_00_00_02_467.bmp\r\n0005\\0005_00_00_02_470.bmp\r\n0005\\0005_00_00_02_474.bmp\r\n0005\\0005_00_00_02_478.bmp\r\n0005\\0005_00_00_02_481.bmp\r\n0005\\0005_00_00_02_485.bmp\r\n0005\\0005_00_00_02_489.bmp\r\n0005\\0005_00_00_02_492.bmp\r\n0005\\0005_00_00_02_496.bmp\r\n0005\\0005_00_00_02_5.bmp\r\n0005\\0005_00_00_02_54.bmp\r\n0005\\0005_00_00_02_58.bmp\r\n0005\\0005_00_00_02_61.bmp\r\n0005\\0005_00_00_02_65.bmp\r\n0005\\0005_00_00_02_69.bmp\r\n0005\\0005_00_00_02_72.bmp\r\n0005\\0005_00_00_02_76.bmp\r\n0005\\0005_00_00_02_80.bmp\r\n0005\\0005_00_00_02_84.bmp\r\n0005\\0005_00_00_02_88.bmp\r\n0005\\0005_00_00_02_91.bmp\r\n0005\\0005_00_00_02_95.bmp\r\n0005\\0005_00_00_02_99.bmp\r\n0006\\0006_00_00_02_0.bmp\r\n0006\\0006_00_00_02_101.bmp\r\n0006\\0006_00_00_02_105.bmp\r\n0006\\0006_00_00_02_109.bmp\r\n0006\\0006_00_00_02_112.bmp\r\n0006\\0006_00_00_02_116.bmp\r\n0006\\0006_00_00_02_12.bmp\r\n0006\\0006_00_00_02_123.bmp\r\n0006\\0006_00_00_02_127.bmp\r\n0006\\0006_00_00_02_130.bmp\r\n0006\\0006_00_00_02_135.bmp\r\n0006\\0006_00_00_02_139.bmp\r\n0006\\0006_00_00_02_142.bmp\r\n0006\\0006_00_00_02_146.bmp\r\n0006\\0006_00_00_02_15.bmp\r\n0006\\0006_00_00_02_153.bmp\r\n0006\\0006_00_00_02_157.bmp\r\n0006\\0006_00_00_02_160.bmp\r\n0006\\0006_00_00_02_164.bmp\r\n0006\\0006_00_00_02_168.bmp\r\n0006\\0006_00_00_02_171.bmp\r\n0006\\0006_00_00_02_175.bmp\r\n0006\\0006_00_00_02_179.bmp\r\n0006\\0006_00_00_02_182.bmp\r\n0006\\0006_00_00_02_186.bmp\r\n0006\\0006_00_00_02_19.bmp\r\n0006\\0006_00_00_02_193.bmp\r\n0006\\0006_00_00_02_197.bmp\r\n0006\\0006_00_00_02_20.bmp\r\n0006\\0006_00_00_02_203.bmp\r\n0006\\0006_00_00_02_207.bmp\r\n0006\\0006_00_00_02_210.bmp\r\n0006\\0006_00_00_02_214.bmp\r\n0006\\0006_00_00_02_218.bmp\r\n0006\\0006_00_00_02_221.bmp\r\n0006\\0006_00_00_02_225.bmp\r\n0006\\0006_00_00_02_229.bmp\r\n0006\\0006_00_00_02_232.bmp\r\n0006\\0006_00_00_02_236.bmp\r\n0006\\0006_00_00_02_24.bmp\r\n0006\\0006_00_00_02_243.bmp\r\n0006\\0006_00_00_02_247.bmp\r\n0006\\0006_00_00_02_250.bmp\r\n0006\\0006_00_00_02_254.bmp\r\n0006\\0006_00_00_02_26.bmp\r\n0006\\0006_00_00_02_263.bmp\r\n0006\\0006_00_00_02_267.bmp\r\n0006\\0006_00_00_02_270.bmp\r\n0006\\0006_00_00_02_274.bmp\r\n0006\\0006_00_00_02_28.bmp\r\n0006\\0006_00_00_02_283.bmp\r\n0006\\0006_00_00_02_287.bmp\r\n0006\\0006_00_00_02_291.bmp\r\n0006\\0006_00_00_02_295.bmp\r\n0006\\0006_00_00_02_299.bmp\r\n0006\\0006_00_00_02_301.bmp\r\n0006\\0006_00_00_02_306.bmp\r\n0006\\0006_00_00_02_31.bmp\r\n0006\\0006_00_00_02_313.bmp\r\n0006\\0006_00_00_02_319.bmp\r\n0006\\0006_00_00_02_330.bmp\r\n0006\\0006_00_00_02_342.bmp\r\n0006\\0006_00_00_02_346.bmp\r\n0006\\0006_00_00_02_35.bmp\r\n0006\\0006_00_00_02_353.bmp\r\n0006\\0006_00_00_02_357.bmp\r\n0006\\0006_00_00_02_360.bmp\r\n0006\\0006_00_00_02_364.bmp\r\n0006\\0006_00_00_02_368.bmp\r\n0006\\0006_00_00_02_371.bmp\r\n0006\\0006_00_00_02_375.bmp\r\n0006\\0006_00_00_02_379.bmp\r\n0006\\0006_00_00_02_382.bmp\r\n0006\\0006_00_00_02_386.bmp\r\n0006\\0006_00_00_02_39.bmp\r\n0006\\0006_00_00_02_393.bmp\r\n0006\\0006_00_00_02_397.bmp\r\n0006\\0006_00_00_02_40.bmp\r\n0006\\0006_00_00_02_403.bmp\r\n0006\\0006_00_00_02_407.bmp\r\n0006\\0006_00_00_02_410.bmp\r\n0006\\0006_00_00_02_414.bmp\r\n0006\\0006_00_00_02_418.bmp\r\n0006\\0006_00_00_02_421.bmp\r\n0006\\0006_00_00_02_425.bmp\r\n0006\\0006_00_00_02_429.bmp\r\n0006\\0006_00_00_02_432.bmp\r\n0006\\0006_00_00_02_436.bmp\r\n0006\\0006_00_00_02_44.bmp\r\n0006\\0006_00_00_02_443.bmp\r\n0006\\0006_00_00_02_447.bmp\r\n0006\\0006_00_00_02_450.bmp\r\n0006\\0006_00_00_02_454.bmp\r\n0006\\0006_00_00_02_458.bmp\r\n0006\\0006_00_00_02_461.bmp\r\n0006\\0006_00_00_02_466.bmp\r\n0006\\0006_00_00_02_47.bmp\r\n0006\\0006_00_00_02_475.bmp\r\n0006\\0006_00_00_02_479.bmp\r\n0006\\0006_00_00_02_482.bmp\r\n0006\\0006_00_00_02_486.bmp\r\n0006\\0006_00_00_02_49.bmp\r\n0006\\0006_00_00_02_493.bmp\r\n0006\\0006_00_00_02_497.bmp\r\n0006\\0006_00_00_02_50.bmp\r\n0006\\0006_00_00_02_54.bmp\r\n0006\\0006_00_00_02_58.bmp\r\n0006\\0006_00_00_02_63.bmp\r\n0006\\0006_00_00_02_69.bmp\r\n0006\\0006_00_00_02_72.bmp\r\n0006\\0006_00_00_02_76.bmp\r\n0006\\0006_00_00_02_8.bmp\r\n0006\\0006_00_00_02_83.bmp\r\n0006\\0006_00_00_02_87.bmp\r\n0006\\0006_00_00_02_90.bmp\r\n0006\\0006_00_00_02_94.bmp\r\n0006\\0006_00_00_02_98.bmp\r\n0007\\0007_01_00_02_0.bmp\r\n0007\\0007_01_00_02_101.bmp\r\n0007\\0007_01_00_02_105.bmp\r\n0007\\0007_01_00_02_109.bmp\r\n0007\\0007_01_00_02_112.bmp\r\n0007\\0007_01_00_02_116.bmp\r\n0007\\0007_01_00_02_12.bmp\r\n0007\\0007_01_00_02_123.bmp\r\n0007\\0007_01_00_02_127.bmp\r\n0007\\0007_01_00_02_130.bmp\r\n0007\\0007_01_00_02_134.bmp\r\n0007\\0007_01_00_02_138.bmp\r\n0007\\0007_01_00_02_141.bmp\r\n0007\\0007_01_00_02_145.bmp\r\n0007\\0007_01_00_02_149.bmp\r\n0007\\0007_01_00_02_152.bmp\r\n0007\\0007_01_00_02_156.bmp\r\n0007\\0007_01_00_02_16.bmp\r\n0007\\0007_01_00_02_163.bmp\r\n0007\\0007_01_00_02_167.bmp\r\n0007\\0007_01_00_02_170.bmp\r\n0007\\0007_01_00_02_174.bmp\r\n0007\\0007_01_00_02_178.bmp\r\n0007\\0007_01_00_02_181.bmp\r\n0007\\0007_01_00_02_185.bmp\r\n0007\\0007_01_00_02_189.bmp\r\n0007\\0007_01_00_02_192.bmp\r\n0007\\0007_01_00_02_196.bmp\r\n0007\\0007_01_00_02_2.bmp\r\n0007\\0007_01_00_02_202.bmp\r\n0007\\0007_01_00_02_206.bmp\r\n0007\\0007_01_00_02_21.bmp\r\n0007\\0007_01_00_02_213.bmp\r\n0007\\0007_01_00_02_217.bmp\r\n0007\\0007_01_00_02_220.bmp\r\n0007\\0007_01_00_02_224.bmp\r\n0007\\0007_01_00_02_228.bmp\r\n0007\\0007_01_00_02_231.bmp\r\n0007\\0007_01_00_02_235.bmp\r\n0007\\0007_01_00_02_239.bmp\r\n0007\\0007_01_00_02_242.bmp\r\n0007\\0007_01_00_02_246.bmp\r\n0007\\0007_01_00_02_25.bmp\r\n0007\\0007_01_00_02_253.bmp\r\n0007\\0007_01_00_02_257.bmp\r\n0007\\0007_01_00_02_260.bmp\r\n0007\\0007_01_00_02_264.bmp\r\n0007\\0007_01_00_02_268.bmp\r\n0007\\0007_01_00_02_271.bmp\r\n0007\\0007_01_00_02_275.bmp\r\n0007\\0007_01_00_02_279.bmp\r\n0007\\0007_01_00_02_282.bmp\r\n0007\\0007_01_00_02_286.bmp\r\n0007\\0007_01_00_02_29.bmp\r\n0007\\0007_01_00_02_293.bmp\r\n0007\\0007_01_00_02_297.bmp\r\n0007\\0007_01_00_02_30.bmp\r\n0007\\0007_01_00_02_303.bmp\r\n0007\\0007_01_00_02_307.bmp\r\n0007\\0007_01_00_02_310.bmp\r\n0007\\0007_01_00_02_314.bmp\r\n0007\\0007_01_00_02_318.bmp\r\n0007\\0007_01_00_02_321.bmp\r\n0007\\0007_01_00_02_325.bmp\r\n0007\\0007_01_00_02_329.bmp\r\n0007\\0007_01_00_02_332.bmp\r\n0007\\0007_01_00_02_336.bmp\r\n0007\\0007_01_00_02_34.bmp\r\n0007\\0007_01_00_02_343.bmp\r\n0007\\0007_01_00_02_347.bmp\r\n0007\\0007_01_00_02_350.bmp\r\n0007\\0007_01_00_02_354.bmp\r\n0007\\0007_01_00_02_358.bmp\r\n0007\\0007_01_00_02_361.bmp\r\n0007\\0007_01_00_02_365.bmp\r\n0007\\0007_01_00_02_369.bmp\r\n0007\\0007_01_00_02_372.bmp\r\n0007\\0007_01_00_02_376.bmp\r\n0007\\0007_01_00_02_38.bmp\r\n0007\\0007_01_00_02_383.bmp\r\n0007\\0007_01_00_02_387.bmp\r\n0007\\0007_01_00_02_390.bmp\r\n0007\\0007_01_00_02_395.bmp\r\n0007\\0007_01_00_02_399.bmp\r\n0007\\0007_01_00_02_401.bmp\r\n0007\\0007_01_00_02_405.bmp\r\n0007\\0007_01_00_02_409.bmp\r\n0007\\0007_01_00_02_412.bmp\r\n0007\\0007_01_00_02_416.bmp\r\n0007\\0007_01_00_02_42.bmp\r\n0007\\0007_01_00_02_423.bmp\r\n0007\\0007_01_00_02_427.bmp\r\n0007\\0007_01_00_02_430.bmp\r\n0007\\0007_01_00_02_434.bmp\r\n0007\\0007_01_00_02_438.bmp\r\n0007\\0007_01_00_02_441.bmp\r\n0007\\0007_01_00_02_445.bmp\r\n0007\\0007_01_00_02_449.bmp\r\n0007\\0007_01_00_02_452.bmp\r\n0007\\0007_01_00_02_456.bmp\r\n0007\\0007_01_00_02_46.bmp\r\n0007\\0007_01_00_02_463.bmp\r\n0007\\0007_01_00_02_467.bmp\r\n0007\\0007_01_00_02_470.bmp\r\n0007\\0007_01_00_02_474.bmp\r\n0007\\0007_01_00_02_478.bmp\r\n0007\\0007_01_00_02_481.bmp\r\n0007\\0007_01_00_02_485.bmp\r\n0007\\0007_01_00_02_489.bmp\r\n0007\\0007_01_00_02_492.bmp\r\n0007\\0007_01_00_02_496.bmp\r\n0007\\0007_01_00_02_5.bmp\r\n0007\\0007_01_00_02_53.bmp\r\n0007\\0007_01_00_02_59.bmp\r\n0007\\0007_01_00_02_62.bmp\r\n0007\\0007_01_00_02_66.bmp\r\n0007\\0007_01_00_02_7.bmp\r\n0007\\0007_01_00_02_73.bmp\r\n0007\\0007_01_00_02_77.bmp\r\n0007\\0007_01_00_02_80.bmp\r\n0007\\0007_01_00_02_84.bmp\r\n0007\\0007_01_00_02_88.bmp\r\n0007\\0007_01_00_02_91.bmp\r\n0007\\0007_01_00_02_95.bmp\r\n0007\\0007_01_00_02_99.bmp\r\n0009\\0009_01_00_02_0.bmp\r\n0009\\0009_01_00_02_101.bmp\r\n0009\\0009_01_00_02_105.bmp\r\n0009\\0009_01_00_02_109.bmp\r\n0009\\0009_01_00_02_112.bmp\r\n0009\\0009_01_00_02_116.bmp\r\n0009\\0009_01_00_02_12.bmp\r\n0009\\0009_01_00_02_123.bmp\r\n0009\\0009_01_00_02_127.bmp\r\n0009\\0009_01_00_02_130.bmp\r\n0009\\0009_01_00_02_134.bmp\r\n0009\\0009_01_00_02_138.bmp\r\n0009\\0009_01_00_02_141.bmp\r\n0009\\0009_01_00_02_145.bmp\r\n0009\\0009_01_00_02_149.bmp\r\n0009\\0009_01_00_02_152.bmp\r\n0009\\0009_01_00_02_156.bmp\r\n0009\\0009_01_00_02_16.bmp\r\n0009\\0009_01_00_02_163.bmp\r\n0009\\0009_01_00_02_167.bmp\r\n0009\\0009_01_00_02_170.bmp\r\n0009\\0009_01_00_02_174.bmp\r\n0009\\0009_01_00_02_178.bmp\r\n0009\\0009_01_00_02_181.bmp\r\n0009\\0009_01_00_02_185.bmp\r\n0009\\0009_01_00_02_189.bmp\r\n0009\\0009_01_00_02_192.bmp\r\n0009\\0009_01_00_02_196.bmp\r\n0009\\0009_01_00_02_2.bmp\r\n0009\\0009_01_00_02_202.bmp\r\n0009\\0009_01_00_02_206.bmp\r\n0009\\0009_01_00_02_21.bmp\r\n0009\\0009_01_00_02_213.bmp\r\n0009\\0009_01_00_02_217.bmp\r\n0009\\0009_01_00_02_220.bmp\r\n0009\\0009_01_00_02_224.bmp\r\n0009\\0009_01_00_02_228.bmp\r\n0009\\0009_01_00_02_231.bmp\r\n0009\\0009_01_00_02_235.bmp\r\n0009\\0009_01_00_02_239.bmp\r\n0009\\0009_01_00_02_242.bmp\r\n0009\\0009_01_00_02_246.bmp\r\n0009\\0009_01_00_02_25.bmp\r\n0009\\0009_01_00_02_253.bmp\r\n0009\\0009_01_00_02_257.bmp\r\n0009\\0009_01_00_02_260.bmp\r\n0009\\0009_01_00_02_264.bmp\r\n0009\\0009_01_00_02_268.bmp\r\n0009\\0009_01_00_02_272.bmp\r\n0009\\0009_01_00_02_276.bmp\r\n0009\\0009_01_00_02_28.bmp\r\n0009\\0009_01_00_02_283.bmp\r\n0009\\0009_01_00_02_287.bmp\r\n0009\\0009_01_00_02_290.bmp\r\n0009\\0009_01_00_02_294.bmp\r\n0009\\0009_01_00_02_298.bmp\r\n0009\\0009_01_00_02_300.bmp\r\n0009\\0009_01_00_02_304.bmp\r\n0009\\0009_01_00_02_308.bmp\r\n0009\\0009_01_00_02_311.bmp\r\n0009\\0009_01_00_02_315.bmp\r\n0009\\0009_01_00_02_319.bmp\r\n0009\\0009_01_00_02_322.bmp\r\n0009\\0009_01_00_02_326.bmp\r\n0009\\0009_01_00_02_33.bmp\r\n0009\\0009_01_00_02_333.bmp\r\n0009\\0009_01_00_02_337.bmp\r\n0009\\0009_01_00_02_340.bmp\r\n0009\\0009_01_00_02_344.bmp\r\n0009\\0009_01_00_02_348.bmp\r\n0009\\0009_01_00_02_351.bmp\r\n0009\\0009_01_00_02_355.bmp\r\n0009\\0009_01_00_02_359.bmp\r\n0009\\0009_01_00_02_362.bmp\r\n0009\\0009_01_00_02_366.bmp\r\n0009\\0009_01_00_02_37.bmp\r\n0009\\0009_01_00_02_373.bmp\r\n0009\\0009_01_00_02_377.bmp\r\n0009\\0009_01_00_02_380.bmp\r\n0009\\0009_01_00_02_384.bmp\r\n0009\\0009_01_00_02_388.bmp\r\n0009\\0009_01_00_02_391.bmp\r\n0009\\0009_01_00_02_395.bmp\r\n0009\\0009_01_00_02_4.bmp\r\n0009\\0009_01_00_02_403.bmp\r\n0009\\0009_01_00_02_407.bmp\r\n0009\\0009_01_00_02_410.bmp\r\n0009\\0009_01_00_02_414.bmp\r\n0009\\0009_01_00_02_418.bmp\r\n0009\\0009_01_00_02_421.bmp\r\n0009\\0009_01_00_02_425.bmp\r\n0009\\0009_01_00_02_429.bmp\r\n0009\\0009_01_00_02_432.bmp\r\n0009\\0009_01_00_02_436.bmp\r\n0009\\0009_01_00_02_44.bmp\r\n0009\\0009_01_00_02_443.bmp\r\n0009\\0009_01_00_02_447.bmp\r\n0009\\0009_01_00_02_450.bmp\r\n0009\\0009_01_00_02_454.bmp\r\n0009\\0009_01_00_02_458.bmp\r\n0009\\0009_01_00_02_461.bmp\r\n0009\\0009_01_00_02_465.bmp\r\n0009\\0009_01_00_02_469.bmp\r\n0009\\0009_01_00_02_472.bmp\r\n0009\\0009_01_00_02_476.bmp\r\n0009\\0009_01_00_02_48.bmp\r\n0009\\0009_01_00_02_483.bmp\r\n0009\\0009_01_00_02_487.bmp\r\n0009\\0009_01_00_02_490.bmp\r\n0009\\0009_01_00_02_494.bmp\r\n0009\\0009_01_00_02_498.bmp\r\n0009\\0009_01_00_02_51.bmp\r\n0009\\0009_01_00_02_55.bmp\r\n0009\\0009_01_00_02_59.bmp\r\n0009\\0009_01_00_02_62.bmp\r\n0009\\0009_01_00_02_66.bmp\r\n0009\\0009_01_00_02_7.bmp\r\n0009\\0009_01_00_02_73.bmp\r\n0009\\0009_01_00_02_77.bmp\r\n0009\\0009_01_00_02_80.bmp\r\n0009\\0009_01_00_02_84.bmp\r\n0009\\0009_01_00_02_88.bmp\r\n0009\\0009_01_00_02_91.bmp\r\n0009\\0009_01_00_02_95.bmp\r\n0009\\0009_01_00_02_99.bmp\r\n0008\\0008_00_00_02_0.bmp\r\n0008\\0008_00_00_02_101.bmp\r\n0008\\0008_00_00_02_105.bmp\r\n0008\\0008_00_00_02_109.bmp\r\n0008\\0008_00_00_02_112.bmp\r\n0008\\0008_00_00_02_116.bmp\r\n0008\\0008_00_00_02_12.bmp\r\n0008\\0008_00_00_02_123.bmp\r\n0008\\0008_00_00_02_127.bmp\r\n0008\\0008_00_00_02_131.bmp\r\n0008\\0008_00_00_02_135.bmp\r\n0008\\0008_00_00_02_139.bmp\r\n0008\\0008_00_00_02_143.bmp\r\n0008\\0008_00_00_02_147.bmp\r\n0008\\0008_00_00_02_151.bmp\r\n0008\\0008_00_00_02_155.bmp\r\n0008\\0008_00_00_02_159.bmp\r\n0008\\0008_00_00_02_162.bmp\r\n0008\\0008_00_00_02_166.bmp\r\n0008\\0008_00_00_02_17.bmp\r\n0008\\0008_00_00_02_173.bmp\r\n0008\\0008_00_00_02_177.bmp\r\n0008\\0008_00_00_02_180.bmp\r\n0008\\0008_00_00_02_184.bmp\r\n0008\\0008_00_00_02_188.bmp\r\n0008\\0008_00_00_02_191.bmp\r\n0008\\0008_00_00_02_195.bmp\r\n0008\\0008_00_00_02_199.bmp\r\n0008\\0008_00_00_02_201.bmp\r\n0008\\0008_00_00_02_205.bmp\r\n0008\\0008_00_00_02_209.bmp\r\n0008\\0008_00_00_02_212.bmp\r\n0008\\0008_00_00_02_216.bmp\r\n0008\\0008_00_00_02_22.bmp\r\n0008\\0008_00_00_02_223.bmp\r\n0008\\0008_00_00_02_227.bmp\r\n0008\\0008_00_00_02_230.bmp\r\n0008\\0008_00_00_02_234.bmp\r\n0008\\0008_00_00_02_238.bmp\r\n0008\\0008_00_00_02_241.bmp\r\n0008\\0008_00_00_02_245.bmp\r\n0008\\0008_00_00_02_249.bmp\r\n0008\\0008_00_00_02_252.bmp\r\n0008\\0008_00_00_02_256.bmp\r\n0008\\0008_00_00_02_26.bmp\r\n0008\\0008_00_00_02_263.bmp\r\n0008\\0008_00_00_02_267.bmp\r\n0008\\0008_00_00_02_270.bmp\r\n0008\\0008_00_00_02_274.bmp\r\n0008\\0008_00_00_02_278.bmp\r\n0008\\0008_00_00_02_281.bmp\r\n0008\\0008_00_00_02_285.bmp\r\n0008\\0008_00_00_02_289.bmp\r\n0008\\0008_00_00_02_292.bmp\r\n0008\\0008_00_00_02_296.bmp\r\n0008\\0008_00_00_02_3.bmp\r\n0008\\0008_00_00_02_302.bmp\r\n0008\\0008_00_00_02_306.bmp\r\n0008\\0008_00_00_02_310.bmp\r\n0008\\0008_00_00_02_314.bmp\r\n0008\\0008_00_00_02_318.bmp\r\n0008\\0008_00_00_02_321.bmp\r\n0008\\0008_00_00_02_325.bmp\r\n0008\\0008_00_00_02_329.bmp\r\n0008\\0008_00_00_02_332.bmp\r\n0008\\0008_00_00_02_336.bmp\r\n0008\\0008_00_00_02_34.bmp\r\n0008\\0008_00_00_02_343.bmp\r\n0008\\0008_00_00_02_347.bmp\r\n0008\\0008_00_00_02_350.bmp\r\n0008\\0008_00_00_02_354.bmp\r\n0008\\0008_00_00_02_358.bmp\r\n0008\\0008_00_00_02_361.bmp\r\n0008\\0008_00_00_02_365.bmp\r\n0008\\0008_00_00_02_369.bmp\r\n0008\\0008_00_00_02_372.bmp\r\n0008\\0008_00_00_02_376.bmp\r\n0008\\0008_00_00_02_38.bmp\r\n0008\\0008_00_00_02_383.bmp\r\n0008\\0008_00_00_02_387.bmp\r\n0008\\0008_00_00_02_390.bmp\r\n0008\\0008_00_00_02_394.bmp\r\n0008\\0008_00_00_02_398.bmp\r\n0008\\0008_00_00_02_400.bmp\r\n0008\\0008_00_00_02_404.bmp\r\n0008\\0008_00_00_02_408.bmp\r\n0008\\0008_00_00_02_411.bmp\r\n0008\\0008_00_00_02_415.bmp\r\n0008\\0008_00_00_02_419.bmp\r\n0008\\0008_00_00_02_422.bmp\r\n0008\\0008_00_00_02_426.bmp\r\n0008\\0008_00_00_02_43.bmp\r\n0008\\0008_00_00_02_433.bmp\r\n0008\\0008_00_00_02_437.bmp\r\n0008\\0008_00_00_02_440.bmp\r\n0008\\0008_00_00_02_444.bmp\r\n0008\\0008_00_00_02_448.bmp\r\n0008\\0008_00_00_02_451.bmp\r\n0008\\0008_00_00_02_455.bmp\r\n0008\\0008_00_00_02_459.bmp\r\n0008\\0008_00_00_02_462.bmp\r\n0008\\0008_00_00_02_466.bmp\r\n0008\\0008_00_00_02_47.bmp\r\n0008\\0008_00_00_02_473.bmp\r\n0008\\0008_00_00_02_48.bmp\r\n0008\\0008_00_00_02_485.bmp\r\n0008\\0008_00_00_02_489.bmp\r\n0008\\0008_00_00_02_492.bmp\r\n0008\\0008_00_00_02_496.bmp\r\n0008\\0008_00_00_02_5.bmp\r\n0008\\0008_00_00_02_53.bmp\r\n0008\\0008_00_00_02_57.bmp\r\n0008\\0008_00_00_02_60.bmp\r\n0008\\0008_00_00_02_64.bmp\r\n0008\\0008_00_00_02_68.bmp\r\n0008\\0008_00_00_02_71.bmp\r\n0008\\0008_00_00_02_75.bmp\r\n0008\\0008_00_00_02_79.bmp\r\n0008\\0008_00_00_02_82.bmp\r\n0008\\0008_00_00_02_86.bmp\r\n0008\\0008_00_00_02_9.bmp\r\n0008\\0008_00_00_02_93.bmp\r\n0008\\0008_00_00_02_97.bmp\r\n"
  },
  {
    "path": "Matlab/NUAA/imposter_test_normalized.txt",
    "content": "0001\\0001_00_03_03_0.bmp\r\n0001\\0001_00_03_03_103.bmp\r\n0001\\0001_00_03_03_109.bmp\r\n0001\\0001_00_03_03_114.bmp\r\n0001\\0001_00_03_03_12.bmp\r\n0001\\0001_00_03_03_125.bmp\r\n0001\\0001_00_03_03_130.bmp\r\n0001\\0001_00_03_03_136.bmp\r\n0001\\0001_00_03_03_141.bmp\r\n0001\\0001_00_03_03_147.bmp\r\n0001\\0001_00_03_03_152.bmp\r\n0001\\0001_00_03_03_161.bmp\r\n0001\\0001_00_03_03_167.bmp\r\n0001\\0001_00_03_03_172.bmp\r\n0001\\0001_00_03_03_178.bmp\r\n0001\\0001_00_03_03_183.bmp\r\n0001\\0001_00_03_03_189.bmp\r\n0001\\0001_00_03_03_194.bmp\r\n0001\\0001_00_03_03_2.bmp\r\n0001\\0001_00_03_03_204.bmp\r\n0001\\0001_00_03_03_21.bmp\r\n0001\\0001_00_03_03_215.bmp\r\n0001\\0001_00_03_03_220.bmp\r\n0001\\0001_00_03_03_226.bmp\r\n0001\\0001_00_03_03_231.bmp\r\n0001\\0001_00_03_03_237.bmp\r\n0001\\0001_00_03_03_242.bmp\r\n0001\\0001_00_03_03_248.bmp\r\n0001\\0001_00_03_03_253.bmp\r\n0001\\0001_00_03_03_259.bmp\r\n0001\\0001_00_03_03_264.bmp\r\n0001\\0001_00_03_03_27.bmp\r\n0001\\0001_00_03_03_275.bmp\r\n0001\\0001_00_03_03_280.bmp\r\n0001\\0001_00_03_03_286.bmp\r\n0001\\0001_00_03_03_291.bmp\r\n0001\\0001_00_03_03_297.bmp\r\n0001\\0001_00_03_03_301.bmp\r\n0001\\0001_00_03_03_307.bmp\r\n0001\\0001_00_03_03_312.bmp\r\n0001\\0001_00_03_03_318.bmp\r\n0001\\0001_00_03_03_323.bmp\r\n0001\\0001_00_03_03_329.bmp\r\n0001\\0001_00_03_03_34.bmp\r\n0001\\0001_00_03_03_345.bmp\r\n0001\\0001_00_03_03_350.bmp\r\n0001\\0001_00_03_03_356.bmp\r\n0001\\0001_00_03_03_361.bmp\r\n0001\\0001_00_03_03_367.bmp\r\n0001\\0001_00_03_03_372.bmp\r\n0001\\0001_00_03_03_378.bmp\r\n0001\\0001_00_03_03_383.bmp\r\n0001\\0001_00_03_03_389.bmp\r\n0001\\0001_00_03_03_394.bmp\r\n0001\\0001_00_03_03_4.bmp\r\n0001\\0001_00_03_03_404.bmp\r\n0001\\0001_00_03_03_41.bmp\r\n0001\\0001_00_03_03_42.bmp\r\n0001\\0001_00_03_03_429.bmp\r\n0001\\0001_00_03_03_434.bmp\r\n0001\\0001_00_03_03_44.bmp\r\n0001\\0001_00_03_03_445.bmp\r\n0001\\0001_00_03_03_450.bmp\r\n0001\\0001_00_03_03_456.bmp\r\n0001\\0001_00_03_03_461.bmp\r\n0001\\0001_00_03_03_467.bmp\r\n0001\\0001_00_03_03_472.bmp\r\n0001\\0001_00_03_03_478.bmp\r\n0001\\0001_00_03_03_483.bmp\r\n0001\\0001_00_03_03_489.bmp\r\n0001\\0001_00_03_03_496.bmp\r\n0001\\0001_00_03_03_54.bmp\r\n0001\\0001_00_03_03_6.bmp\r\n0001\\0001_00_03_03_65.bmp\r\n0001\\0001_00_03_03_70.bmp\r\n0001\\0001_00_03_03_76.bmp\r\n0001\\0001_00_03_03_81.bmp\r\n0001\\0001_00_03_03_87.bmp\r\n0001\\0001_00_03_03_92.bmp\r\n0001\\0001_00_03_03_98.bmp\r\n0001\\0001_00_04_03_0.bmp\r\n0001\\0001_00_04_03_103.bmp\r\n0001\\0001_00_04_03_109.bmp\r\n0001\\0001_00_04_03_114.bmp\r\n0001\\0001_00_04_03_12.bmp\r\n0001\\0001_00_04_03_125.bmp\r\n0001\\0001_00_04_03_130.bmp\r\n0001\\0001_00_04_03_136.bmp\r\n0001\\0001_00_04_03_141.bmp\r\n0001\\0001_00_04_03_147.bmp\r\n0001\\0001_00_04_03_152.bmp\r\n0001\\0001_00_04_03_158.bmp\r\n0001\\0001_00_04_03_163.bmp\r\n0001\\0001_00_04_03_169.bmp\r\n0001\\0001_00_04_03_174.bmp\r\n0001\\0001_00_04_03_18.bmp\r\n0001\\0001_00_04_03_185.bmp\r\n0001\\0001_00_04_03_190.bmp\r\n0001\\0001_00_04_03_196.bmp\r\n0001\\0001_00_04_03_200.bmp\r\n0001\\0001_00_04_03_206.bmp\r\n0001\\0001_00_04_03_211.bmp\r\n0001\\0001_00_04_03_217.bmp\r\n0001\\0001_00_04_03_224.bmp\r\n0001\\0001_00_04_03_23.bmp\r\n0001\\0001_00_04_03_235.bmp\r\n0001\\0001_00_04_03_240.bmp\r\n0001\\0001_00_04_03_246.bmp\r\n0001\\0001_00_04_03_251.bmp\r\n0001\\0001_00_04_03_257.bmp\r\n0001\\0001_00_04_03_262.bmp\r\n0001\\0001_00_04_03_268.bmp\r\n0001\\0001_00_04_03_273.bmp\r\n0001\\0001_00_04_03_279.bmp\r\n0001\\0001_00_04_03_284.bmp\r\n0001\\0001_00_04_03_29.bmp\r\n0001\\0001_00_04_03_295.bmp\r\n0001\\0001_00_04_03_30.bmp\r\n0001\\0001_00_04_03_305.bmp\r\n0001\\0001_00_04_03_310.bmp\r\n0001\\0001_00_04_03_316.bmp\r\n0001\\0001_00_04_03_321.bmp\r\n0001\\0001_00_04_03_327.bmp\r\n0001\\0001_00_04_03_332.bmp\r\n0001\\0001_00_04_03_338.bmp\r\n0001\\0001_00_04_03_343.bmp\r\n0001\\0001_00_04_03_349.bmp\r\n0001\\0001_00_04_03_354.bmp\r\n0001\\0001_00_04_03_36.bmp\r\n0001\\0001_00_04_03_365.bmp\r\n0001\\0001_00_04_03_370.bmp\r\n0001\\0001_00_04_03_376.bmp\r\n0001\\0001_00_04_03_381.bmp\r\n0001\\0001_00_04_03_387.bmp\r\n0001\\0001_00_04_03_392.bmp\r\n0001\\0001_00_04_03_398.bmp\r\n0001\\0001_00_04_03_402.bmp\r\n0001\\0001_00_04_03_408.bmp\r\n0001\\0001_00_04_03_413.bmp\r\n0001\\0001_00_04_03_419.bmp\r\n0001\\0001_00_04_03_424.bmp\r\n0001\\0001_00_04_03_43.bmp\r\n0001\\0001_00_04_03_435.bmp\r\n0001\\0001_00_04_03_440.bmp\r\n0001\\0001_00_04_03_446.bmp\r\n0001\\0001_00_04_03_451.bmp\r\n0001\\0001_00_04_03_457.bmp\r\n0001\\0001_00_04_03_462.bmp\r\n0001\\0001_00_04_03_468.bmp\r\n0001\\0001_00_04_03_473.bmp\r\n0001\\0001_00_04_03_479.bmp\r\n0001\\0001_00_04_03_484.bmp\r\n0001\\0001_00_04_03_49.bmp\r\n0001\\0001_00_04_03_495.bmp\r\n0001\\0001_00_04_03_50.bmp\r\n0001\\0001_00_04_03_56.bmp\r\n0001\\0001_00_04_03_61.bmp\r\n0001\\0001_00_04_03_67.bmp\r\n0001\\0001_00_04_03_72.bmp\r\n0001\\0001_00_04_03_78.bmp\r\n0001\\0001_00_04_03_83.bmp\r\n0001\\0001_00_04_03_89.bmp\r\n0001\\0001_00_04_03_94.bmp\r\n0001\\0001_00_01_03_0.bmp\r\n0001\\0001_00_01_03_103.bmp\r\n0001\\0001_00_01_03_109.bmp\r\n0001\\0001_00_01_03_114.bmp\r\n0001\\0001_00_01_03_12.bmp\r\n0001\\0001_00_01_03_125.bmp\r\n0001\\0001_00_01_03_130.bmp\r\n0001\\0001_00_01_03_136.bmp\r\n0001\\0001_00_01_03_141.bmp\r\n0001\\0001_00_01_03_147.bmp\r\n0001\\0001_00_01_03_152.bmp\r\n0001\\0001_00_01_03_158.bmp\r\n0001\\0001_00_01_03_163.bmp\r\n0001\\0001_00_01_03_169.bmp\r\n0001\\0001_00_01_03_174.bmp\r\n0001\\0001_00_01_03_18.bmp\r\n0001\\0001_00_01_03_185.bmp\r\n0001\\0001_00_01_03_190.bmp\r\n0001\\0001_00_01_03_196.bmp\r\n0001\\0001_00_01_03_200.bmp\r\n0001\\0001_00_01_03_206.bmp\r\n0001\\0001_00_01_03_211.bmp\r\n0001\\0001_00_01_03_217.bmp\r\n0001\\0001_00_01_03_222.bmp\r\n0001\\0001_00_01_03_228.bmp\r\n0001\\0001_00_01_03_233.bmp\r\n0001\\0001_00_01_03_239.bmp\r\n0001\\0001_00_01_03_244.bmp\r\n0001\\0001_00_01_03_25.bmp\r\n0001\\0001_00_01_03_255.bmp\r\n0001\\0001_00_01_03_260.bmp\r\n0001\\0001_00_01_03_266.bmp\r\n0001\\0001_00_01_03_271.bmp\r\n0001\\0001_00_01_03_277.bmp\r\n0001\\0001_00_01_03_282.bmp\r\n0001\\0001_00_01_03_288.bmp\r\n0001\\0001_00_01_03_293.bmp\r\n0001\\0001_00_01_03_299.bmp\r\n0001\\0001_00_01_03_303.bmp\r\n0001\\0001_00_01_03_309.bmp\r\n0001\\0001_00_01_03_314.bmp\r\n0001\\0001_00_01_03_32.bmp\r\n0001\\0001_00_01_03_325.bmp\r\n0001\\0001_00_01_03_330.bmp\r\n0001\\0001_00_01_03_336.bmp\r\n0001\\0001_00_01_03_341.bmp\r\n0001\\0001_00_01_03_347.bmp\r\n0001\\0001_00_01_03_352.bmp\r\n0001\\0001_00_01_03_358.bmp\r\n0001\\0001_00_01_03_363.bmp\r\n0001\\0001_00_01_03_369.bmp\r\n0001\\0001_00_01_03_374.bmp\r\n0001\\0001_00_01_03_38.bmp\r\n0001\\0001_00_01_03_385.bmp\r\n0001\\0001_00_01_03_390.bmp\r\n0001\\0001_00_01_03_396.bmp\r\n0001\\0001_00_01_03_400.bmp\r\n0001\\0001_00_01_03_406.bmp\r\n0001\\0001_00_01_03_411.bmp\r\n0001\\0001_00_01_03_417.bmp\r\n0001\\0001_00_01_03_422.bmp\r\n0001\\0001_00_01_03_428.bmp\r\n0001\\0001_00_01_03_434.bmp\r\n0001\\0001_00_01_03_44.bmp\r\n0001\\0001_00_01_03_445.bmp\r\n0001\\0001_00_01_03_450.bmp\r\n0001\\0001_00_01_03_456.bmp\r\n0001\\0001_00_01_03_461.bmp\r\n0001\\0001_00_01_03_467.bmp\r\n0001\\0001_00_01_03_472.bmp\r\n0001\\0001_00_01_03_478.bmp\r\n0001\\0001_00_01_03_483.bmp\r\n0001\\0001_00_01_03_489.bmp\r\n0001\\0001_00_01_03_494.bmp\r\n0001\\0001_00_01_03_5.bmp\r\n0001\\0001_00_01_03_55.bmp\r\n0001\\0001_00_01_03_60.bmp\r\n0001\\0001_00_01_03_66.bmp\r\n0001\\0001_00_01_03_71.bmp\r\n0001\\0001_00_01_03_77.bmp\r\n0001\\0001_00_01_03_82.bmp\r\n0001\\0001_00_01_03_88.bmp\r\n0001\\0001_00_01_03_93.bmp\r\n0001\\0001_00_01_03_99.bmp\r\n0001\\0001_00_02_03_0.bmp\r\n0001\\0001_00_02_03_103.bmp\r\n0001\\0001_00_02_03_109.bmp\r\n0001\\0001_00_02_03_114.bmp\r\n0001\\0001_00_02_03_12.bmp\r\n0001\\0001_00_02_03_125.bmp\r\n0001\\0001_00_02_03_134.bmp\r\n0001\\0001_00_02_03_14.bmp\r\n0001\\0001_00_02_03_145.bmp\r\n0001\\0001_00_02_03_150.bmp\r\n0001\\0001_00_02_03_156.bmp\r\n0001\\0001_00_02_03_164.bmp\r\n0001\\0001_00_02_03_17.bmp\r\n0001\\0001_00_02_03_175.bmp\r\n0001\\0001_00_02_03_180.bmp\r\n0001\\0001_00_02_03_186.bmp\r\n0001\\0001_00_02_03_191.bmp\r\n0001\\0001_00_02_03_197.bmp\r\n0001\\0001_00_02_03_201.bmp\r\n0001\\0001_00_02_03_207.bmp\r\n0001\\0001_00_02_03_212.bmp\r\n0001\\0001_00_02_03_218.bmp\r\n0001\\0001_00_02_03_223.bmp\r\n0001\\0001_00_02_03_229.bmp\r\n0001\\0001_00_02_03_234.bmp\r\n0001\\0001_00_02_03_24.bmp\r\n0001\\0001_00_02_03_245.bmp\r\n0001\\0001_00_02_03_250.bmp\r\n0001\\0001_00_02_03_256.bmp\r\n0001\\0001_00_02_03_261.bmp\r\n0001\\0001_00_02_03_267.bmp\r\n0001\\0001_00_02_03_272.bmp\r\n0001\\0001_00_02_03_278.bmp\r\n0001\\0001_00_02_03_283.bmp\r\n0001\\0001_00_02_03_289.bmp\r\n0001\\0001_00_02_03_294.bmp\r\n0001\\0001_00_02_03_3.bmp\r\n0001\\0001_00_02_03_304.bmp\r\n0001\\0001_00_02_03_31.bmp\r\n0001\\0001_00_02_03_315.bmp\r\n0001\\0001_00_02_03_320.bmp\r\n0001\\0001_00_02_03_326.bmp\r\n0001\\0001_00_02_03_331.bmp\r\n0001\\0001_00_02_03_337.bmp\r\n0001\\0001_00_02_03_342.bmp\r\n0001\\0001_00_02_03_348.bmp\r\n0001\\0001_00_02_03_353.bmp\r\n0001\\0001_00_02_03_359.bmp\r\n0001\\0001_00_02_03_364.bmp\r\n0001\\0001_00_02_03_37.bmp\r\n0001\\0001_00_02_03_375.bmp\r\n0001\\0001_00_02_03_380.bmp\r\n0001\\0001_00_02_03_386.bmp\r\n0001\\0001_00_02_03_391.bmp\r\n0001\\0001_00_02_03_397.bmp\r\n0001\\0001_00_02_03_401.bmp\r\n0001\\0001_00_02_03_407.bmp\r\n0001\\0001_00_02_03_412.bmp\r\n0001\\0001_00_02_03_418.bmp\r\n0001\\0001_00_02_03_423.bmp\r\n0001\\0001_00_02_03_429.bmp\r\n0001\\0001_00_02_03_434.bmp\r\n0001\\0001_00_02_03_44.bmp\r\n0001\\0001_00_02_03_445.bmp\r\n0001\\0001_00_02_03_450.bmp\r\n0001\\0001_00_02_03_456.bmp\r\n0001\\0001_00_02_03_461.bmp\r\n0001\\0001_00_02_03_467.bmp\r\n0001\\0001_00_02_03_472.bmp\r\n0001\\0001_00_02_03_478.bmp\r\n0001\\0001_00_02_03_483.bmp\r\n0001\\0001_00_02_03_489.bmp\r\n0001\\0001_00_02_03_494.bmp\r\n0001\\0001_00_02_03_5.bmp\r\n0001\\0001_00_02_03_55.bmp\r\n0001\\0001_00_02_03_60.bmp\r\n0001\\0001_00_02_03_66.bmp\r\n0001\\0001_00_02_03_71.bmp\r\n0001\\0001_00_02_03_77.bmp\r\n0001\\0001_00_02_03_82.bmp\r\n0001\\0001_00_02_03_88.bmp\r\n0001\\0001_00_02_03_93.bmp\r\n0001\\0001_00_02_03_99.bmp\r\n0001\\0001_00_08_03_0.bmp\r\n0001\\0001_00_08_03_103.bmp\r\n0001\\0001_00_08_03_109.bmp\r\n0001\\0001_00_08_03_114.bmp\r\n0001\\0001_00_08_03_12.bmp\r\n0001\\0001_00_08_03_125.bmp\r\n0001\\0001_00_08_03_130.bmp\r\n0001\\0001_00_08_03_136.bmp\r\n0001\\0001_00_08_03_141.bmp\r\n0001\\0001_00_08_03_147.bmp\r\n0001\\0001_00_08_03_152.bmp\r\n0001\\0001_00_08_03_158.bmp\r\n0001\\0001_00_08_03_163.bmp\r\n0001\\0001_00_08_03_169.bmp\r\n0001\\0001_00_08_03_174.bmp\r\n0001\\0001_00_08_03_18.bmp\r\n0001\\0001_00_08_03_185.bmp\r\n0001\\0001_00_08_03_190.bmp\r\n0001\\0001_00_08_03_196.bmp\r\n0001\\0001_00_08_03_200.bmp\r\n0001\\0001_00_08_03_206.bmp\r\n0001\\0001_00_08_03_211.bmp\r\n0001\\0001_00_08_03_217.bmp\r\n0001\\0001_00_08_03_222.bmp\r\n0001\\0001_00_08_03_228.bmp\r\n0001\\0001_00_08_03_233.bmp\r\n0001\\0001_00_08_03_239.bmp\r\n0001\\0001_00_08_03_244.bmp\r\n0001\\0001_00_08_03_25.bmp\r\n0001\\0001_00_08_03_255.bmp\r\n0001\\0001_00_08_03_260.bmp\r\n0001\\0001_00_08_03_266.bmp\r\n0001\\0001_00_08_03_271.bmp\r\n0001\\0001_00_08_03_277.bmp\r\n0001\\0001_00_08_03_282.bmp\r\n0001\\0001_00_08_03_288.bmp\r\n0001\\0001_00_08_03_293.bmp\r\n0001\\0001_00_08_03_299.bmp\r\n0001\\0001_00_08_03_303.bmp\r\n0001\\0001_00_08_03_309.bmp\r\n0001\\0001_00_08_03_314.bmp\r\n0001\\0001_00_08_03_32.bmp\r\n0001\\0001_00_08_03_325.bmp\r\n0001\\0001_00_08_03_330.bmp\r\n0001\\0001_00_08_03_336.bmp\r\n0001\\0001_00_08_03_341.bmp\r\n0001\\0001_00_08_03_347.bmp\r\n0001\\0001_00_08_03_352.bmp\r\n0001\\0001_00_08_03_358.bmp\r\n0001\\0001_00_08_03_363.bmp\r\n0001\\0001_00_08_03_369.bmp\r\n0001\\0001_00_08_03_374.bmp\r\n0001\\0001_00_08_03_38.bmp\r\n0001\\0001_00_08_03_385.bmp\r\n0001\\0001_00_08_03_390.bmp\r\n0001\\0001_00_08_03_396.bmp\r\n0001\\0001_00_08_03_400.bmp\r\n0001\\0001_00_08_03_406.bmp\r\n0001\\0001_00_08_03_411.bmp\r\n0001\\0001_00_08_03_417.bmp\r\n0001\\0001_00_08_03_422.bmp\r\n0001\\0001_00_08_03_428.bmp\r\n0001\\0001_00_08_03_433.bmp\r\n0001\\0001_00_08_03_439.bmp\r\n0001\\0001_00_08_03_444.bmp\r\n0001\\0001_00_08_03_45.bmp\r\n0001\\0001_00_08_03_455.bmp\r\n0001\\0001_00_08_03_460.bmp\r\n0001\\0001_00_08_03_466.bmp\r\n0001\\0001_00_08_03_471.bmp\r\n0001\\0001_00_08_03_477.bmp\r\n0001\\0001_00_08_03_482.bmp\r\n0001\\0001_00_08_03_488.bmp\r\n0001\\0001_00_08_03_493.bmp\r\n0001\\0001_00_08_03_499.bmp\r\n0001\\0001_00_08_03_54.bmp\r\n0001\\0001_00_08_03_6.bmp\r\n0001\\0001_00_08_03_65.bmp\r\n0001\\0001_00_08_03_70.bmp\r\n0001\\0001_00_08_03_76.bmp\r\n0001\\0001_00_08_03_81.bmp\r\n0001\\0001_00_08_03_87.bmp\r\n0001\\0001_00_08_03_92.bmp\r\n0001\\0001_00_08_03_98.bmp\r\n0002\\0002_01_03_03_0.bmp\r\n0002\\0002_01_03_03_103.bmp\r\n0002\\0002_01_03_03_109.bmp\r\n0002\\0002_01_03_03_114.bmp\r\n0002\\0002_01_03_03_12.bmp\r\n0002\\0002_01_03_03_13.bmp\r\n0002\\0002_01_03_03_139.bmp\r\n0002\\0002_01_03_03_144.bmp\r\n0002\\0002_01_03_03_15.bmp\r\n0002\\0002_01_03_03_156.bmp\r\n0002\\0002_01_03_03_161.bmp\r\n0002\\0002_01_03_03_167.bmp\r\n0002\\0002_01_03_03_175.bmp\r\n0002\\0002_01_03_03_180.bmp\r\n0002\\0002_01_03_03_186.bmp\r\n0002\\0002_01_03_03_191.bmp\r\n0002\\0002_01_03_03_197.bmp\r\n0002\\0002_01_03_03_201.bmp\r\n0002\\0002_01_03_03_207.bmp\r\n0002\\0002_01_03_03_212.bmp\r\n0002\\0002_01_03_03_218.bmp\r\n0002\\0002_01_03_03_223.bmp\r\n0002\\0002_01_03_03_229.bmp\r\n0002\\0002_01_03_03_24.bmp\r\n0002\\0002_01_03_03_248.bmp\r\n0002\\0002_01_03_03_253.bmp\r\n0002\\0002_01_03_03_259.bmp\r\n0002\\0002_01_03_03_264.bmp\r\n0002\\0002_01_03_03_27.bmp\r\n0002\\0002_01_03_03_275.bmp\r\n0002\\0002_01_03_03_280.bmp\r\n0002\\0002_01_03_03_286.bmp\r\n0002\\0002_01_03_03_291.bmp\r\n0002\\0002_01_03_03_297.bmp\r\n0002\\0002_01_03_03_301.bmp\r\n0002\\0002_01_03_03_307.bmp\r\n0002\\0002_01_03_03_312.bmp\r\n0002\\0002_01_03_03_318.bmp\r\n0002\\0002_01_03_03_323.bmp\r\n0002\\0002_01_03_03_329.bmp\r\n0002\\0002_01_03_03_334.bmp\r\n0002\\0002_01_03_03_34.bmp\r\n0002\\0002_01_03_03_345.bmp\r\n0002\\0002_01_03_03_350.bmp\r\n0002\\0002_01_03_03_356.bmp\r\n0002\\0002_01_03_03_361.bmp\r\n0002\\0002_01_03_03_367.bmp\r\n0002\\0002_01_03_03_372.bmp\r\n0002\\0002_01_03_03_378.bmp\r\n0002\\0002_01_03_03_383.bmp\r\n0002\\0002_01_03_03_389.bmp\r\n0002\\0002_01_03_03_394.bmp\r\n0002\\0002_01_03_03_4.bmp\r\n0002\\0002_01_03_03_404.bmp\r\n0002\\0002_01_03_03_41.bmp\r\n0002\\0002_01_03_03_415.bmp\r\n0002\\0002_01_03_03_422.bmp\r\n0002\\0002_01_03_03_431.bmp\r\n0002\\0002_01_03_03_440.bmp\r\n0002\\0002_01_03_03_446.bmp\r\n0002\\0002_01_03_03_451.bmp\r\n0002\\0002_01_03_03_457.bmp\r\n0002\\0002_01_03_03_462.bmp\r\n0002\\0002_01_03_03_473.bmp\r\n0002\\0002_01_03_03_482.bmp\r\n0002\\0002_01_03_03_49.bmp\r\n0002\\0002_01_03_03_495.bmp\r\n0002\\0002_01_03_03_50.bmp\r\n0002\\0002_01_03_03_56.bmp\r\n0002\\0002_01_03_03_61.bmp\r\n0002\\0002_01_03_03_67.bmp\r\n0002\\0002_01_03_03_72.bmp\r\n0002\\0002_01_03_03_78.bmp\r\n0002\\0002_01_03_03_83.bmp\r\n0002\\0002_01_03_03_89.bmp\r\n0002\\0002_01_03_03_98.bmp\r\n0002\\0002_01_04_03_0.bmp\r\n0002\\0002_01_04_03_103.bmp\r\n0002\\0002_01_04_03_109.bmp\r\n0002\\0002_01_04_03_114.bmp\r\n0002\\0002_01_04_03_12.bmp\r\n0002\\0002_01_04_03_125.bmp\r\n0002\\0002_01_04_03_130.bmp\r\n0002\\0002_01_04_03_136.bmp\r\n0002\\0002_01_04_03_141.bmp\r\n0002\\0002_01_04_03_147.bmp\r\n0002\\0002_01_04_03_152.bmp\r\n0002\\0002_01_04_03_158.bmp\r\n0002\\0002_01_04_03_163.bmp\r\n0002\\0002_01_04_03_169.bmp\r\n0002\\0002_01_04_03_175.bmp\r\n0002\\0002_01_04_03_180.bmp\r\n0002\\0002_01_04_03_186.bmp\r\n0002\\0002_01_04_03_191.bmp\r\n0002\\0002_01_04_03_197.bmp\r\n0002\\0002_01_04_03_201.bmp\r\n0002\\0002_01_04_03_207.bmp\r\n0002\\0002_01_04_03_212.bmp\r\n0002\\0002_01_04_03_218.bmp\r\n0002\\0002_01_04_03_223.bmp\r\n0002\\0002_01_04_03_229.bmp\r\n0002\\0002_01_04_03_234.bmp\r\n0002\\0002_01_04_03_24.bmp\r\n0002\\0002_01_04_03_245.bmp\r\n0002\\0002_01_04_03_250.bmp\r\n0002\\0002_01_04_03_256.bmp\r\n0002\\0002_01_04_03_261.bmp\r\n0002\\0002_01_04_03_267.bmp\r\n0002\\0002_01_04_03_272.bmp\r\n0002\\0002_01_04_03_278.bmp\r\n0002\\0002_01_04_03_283.bmp\r\n0002\\0002_01_04_03_289.bmp\r\n0002\\0002_01_04_03_294.bmp\r\n0002\\0002_01_04_03_3.bmp\r\n0002\\0002_01_04_03_304.bmp\r\n0002\\0002_01_04_03_31.bmp\r\n0002\\0002_01_04_03_315.bmp\r\n0002\\0002_01_04_03_321.bmp\r\n0002\\0002_01_04_03_327.bmp\r\n0002\\0002_01_04_03_333.bmp\r\n0002\\0002_01_04_03_339.bmp\r\n0002\\0002_01_04_03_345.bmp\r\n0002\\0002_01_04_03_350.bmp\r\n0002\\0002_01_04_03_356.bmp\r\n0002\\0002_01_04_03_361.bmp\r\n0002\\0002_01_04_03_367.bmp\r\n0002\\0002_01_04_03_372.bmp\r\n0002\\0002_01_04_03_378.bmp\r\n0002\\0002_01_04_03_383.bmp\r\n0002\\0002_01_04_03_389.bmp\r\n0002\\0002_01_04_03_394.bmp\r\n0002\\0002_01_04_03_4.bmp\r\n0002\\0002_01_04_03_404.bmp\r\n0002\\0002_01_04_03_410.bmp\r\n0002\\0002_01_04_03_416.bmp\r\n0002\\0002_01_04_03_421.bmp\r\n0002\\0002_01_04_03_427.bmp\r\n0002\\0002_01_04_03_432.bmp\r\n0002\\0002_01_04_03_438.bmp\r\n0002\\0002_01_04_03_443.bmp\r\n0002\\0002_01_04_03_449.bmp\r\n0002\\0002_01_04_03_454.bmp\r\n0002\\0002_01_04_03_46.bmp\r\n0002\\0002_01_04_03_465.bmp\r\n0002\\0002_01_04_03_470.bmp\r\n0002\\0002_01_04_03_476.bmp\r\n0002\\0002_01_04_03_481.bmp\r\n0002\\0002_01_04_03_487.bmp\r\n0002\\0002_01_04_03_492.bmp\r\n0002\\0002_01_04_03_498.bmp\r\n0002\\0002_01_04_03_53.bmp\r\n0002\\0002_01_04_03_59.bmp\r\n0002\\0002_01_04_03_64.bmp\r\n0002\\0002_01_04_03_7.bmp\r\n0002\\0002_01_04_03_77.bmp\r\n0002\\0002_01_04_03_88.bmp\r\n0002\\0002_01_04_03_93.bmp\r\n0002\\0002_01_04_03_99.bmp\r\n0002\\0002_01_01_03_0.bmp\r\n0002\\0002_01_01_03_103.bmp\r\n0002\\0002_01_01_03_109.bmp\r\n0002\\0002_01_01_03_114.bmp\r\n0002\\0002_01_01_03_12.bmp\r\n0002\\0002_01_01_03_125.bmp\r\n0002\\0002_01_01_03_130.bmp\r\n0002\\0002_01_01_03_136.bmp\r\n0002\\0002_01_01_03_141.bmp\r\n0002\\0002_01_01_03_147.bmp\r\n0002\\0002_01_01_03_152.bmp\r\n0002\\0002_01_01_03_158.bmp\r\n0002\\0002_01_01_03_163.bmp\r\n0002\\0002_01_01_03_169.bmp\r\n0002\\0002_01_01_03_174.bmp\r\n0002\\0002_01_01_03_18.bmp\r\n0002\\0002_01_01_03_185.bmp\r\n0002\\0002_01_01_03_190.bmp\r\n0002\\0002_01_01_03_196.bmp\r\n0002\\0002_01_01_03_200.bmp\r\n0002\\0002_01_01_03_206.bmp\r\n0002\\0002_01_01_03_211.bmp\r\n0002\\0002_01_01_03_217.bmp\r\n0002\\0002_01_01_03_222.bmp\r\n0002\\0002_01_01_03_228.bmp\r\n0002\\0002_01_01_03_233.bmp\r\n0002\\0002_01_01_03_239.bmp\r\n0002\\0002_01_01_03_244.bmp\r\n0002\\0002_01_01_03_25.bmp\r\n0002\\0002_01_01_03_255.bmp\r\n0002\\0002_01_01_03_260.bmp\r\n0002\\0002_01_01_03_266.bmp\r\n0002\\0002_01_01_03_271.bmp\r\n0002\\0002_01_01_03_277.bmp\r\n0002\\0002_01_01_03_282.bmp\r\n0002\\0002_01_01_03_288.bmp\r\n0002\\0002_01_01_03_293.bmp\r\n0002\\0002_01_01_03_299.bmp\r\n0002\\0002_01_01_03_303.bmp\r\n0002\\0002_01_01_03_309.bmp\r\n0002\\0002_01_01_03_314.bmp\r\n0002\\0002_01_01_03_32.bmp\r\n0002\\0002_01_01_03_325.bmp\r\n0002\\0002_01_01_03_330.bmp\r\n0002\\0002_01_01_03_336.bmp\r\n0002\\0002_01_01_03_341.bmp\r\n0002\\0002_01_01_03_347.bmp\r\n0002\\0002_01_01_03_352.bmp\r\n0002\\0002_01_01_03_358.bmp\r\n0002\\0002_01_01_03_363.bmp\r\n0002\\0002_01_01_03_369.bmp\r\n0002\\0002_01_01_03_374.bmp\r\n0002\\0002_01_01_03_38.bmp\r\n0002\\0002_01_01_03_385.bmp\r\n0002\\0002_01_01_03_390.bmp\r\n0002\\0002_01_01_03_396.bmp\r\n0002\\0002_01_01_03_400.bmp\r\n0002\\0002_01_01_03_406.bmp\r\n0002\\0002_01_01_03_411.bmp\r\n0002\\0002_01_01_03_417.bmp\r\n0002\\0002_01_01_03_422.bmp\r\n0002\\0002_01_01_03_428.bmp\r\n0002\\0002_01_01_03_433.bmp\r\n0002\\0002_01_01_03_439.bmp\r\n0002\\0002_01_01_03_444.bmp\r\n0002\\0002_01_01_03_45.bmp\r\n0002\\0002_01_01_03_455.bmp\r\n0002\\0002_01_01_03_460.bmp\r\n0002\\0002_01_01_03_466.bmp\r\n0002\\0002_01_01_03_471.bmp\r\n0002\\0002_01_01_03_477.bmp\r\n0002\\0002_01_01_03_482.bmp\r\n0002\\0002_01_01_03_488.bmp\r\n0002\\0002_01_01_03_493.bmp\r\n0002\\0002_01_01_03_499.bmp\r\n0002\\0002_01_01_03_54.bmp\r\n0002\\0002_01_01_03_6.bmp\r\n0002\\0002_01_01_03_65.bmp\r\n0002\\0002_01_01_03_70.bmp\r\n0002\\0002_01_01_03_76.bmp\r\n0002\\0002_01_01_03_81.bmp\r\n0002\\0002_01_01_03_87.bmp\r\n0002\\0002_01_01_03_92.bmp\r\n0002\\0002_01_01_03_98.bmp\r\n0002\\0002_01_02_03_0.bmp\r\n0002\\0002_01_02_03_103.bmp\r\n0002\\0002_01_02_03_109.bmp\r\n0002\\0002_01_02_03_114.bmp\r\n0002\\0002_01_02_03_12.bmp\r\n0002\\0002_01_02_03_125.bmp\r\n0002\\0002_01_02_03_130.bmp\r\n0002\\0002_01_02_03_136.bmp\r\n0002\\0002_01_02_03_141.bmp\r\n0002\\0002_01_02_03_147.bmp\r\n0002\\0002_01_02_03_152.bmp\r\n0002\\0002_01_02_03_158.bmp\r\n0002\\0002_01_02_03_163.bmp\r\n0002\\0002_01_02_03_169.bmp\r\n0002\\0002_01_02_03_174.bmp\r\n0002\\0002_01_02_03_18.bmp\r\n0002\\0002_01_02_03_185.bmp\r\n0002\\0002_01_02_03_190.bmp\r\n0002\\0002_01_02_03_196.bmp\r\n0002\\0002_01_02_03_200.bmp\r\n0002\\0002_01_02_03_206.bmp\r\n0002\\0002_01_02_03_211.bmp\r\n0002\\0002_01_02_03_217.bmp\r\n0002\\0002_01_02_03_222.bmp\r\n0002\\0002_01_02_03_228.bmp\r\n0002\\0002_01_02_03_233.bmp\r\n0002\\0002_01_02_03_239.bmp\r\n0002\\0002_01_02_03_244.bmp\r\n0002\\0002_01_02_03_25.bmp\r\n0002\\0002_01_02_03_255.bmp\r\n0002\\0002_01_02_03_260.bmp\r\n0002\\0002_01_02_03_266.bmp\r\n0002\\0002_01_02_03_271.bmp\r\n0002\\0002_01_02_03_277.bmp\r\n0002\\0002_01_02_03_282.bmp\r\n0002\\0002_01_02_03_288.bmp\r\n0002\\0002_01_02_03_293.bmp\r\n0002\\0002_01_02_03_299.bmp\r\n0002\\0002_01_02_03_303.bmp\r\n0002\\0002_01_02_03_309.bmp\r\n0002\\0002_01_02_03_314.bmp\r\n0002\\0002_01_02_03_32.bmp\r\n0002\\0002_01_02_03_325.bmp\r\n0002\\0002_01_02_03_330.bmp\r\n0002\\0002_01_02_03_336.bmp\r\n0002\\0002_01_02_03_341.bmp\r\n0002\\0002_01_02_03_349.bmp\r\n0002\\0002_01_02_03_354.bmp\r\n0002\\0002_01_02_03_362.bmp\r\n0002\\0002_01_02_03_368.bmp\r\n0002\\0002_01_02_03_373.bmp\r\n0002\\0002_01_02_03_379.bmp\r\n0002\\0002_01_02_03_384.bmp\r\n0002\\0002_01_02_03_39.bmp\r\n0002\\0002_01_02_03_395.bmp\r\n0002\\0002_01_02_03_40.bmp\r\n0002\\0002_01_02_03_405.bmp\r\n0002\\0002_01_02_03_410.bmp\r\n0002\\0002_01_02_03_416.bmp\r\n0002\\0002_01_02_03_421.bmp\r\n0002\\0002_01_02_03_427.bmp\r\n0002\\0002_01_02_03_432.bmp\r\n0002\\0002_01_02_03_438.bmp\r\n0002\\0002_01_02_03_443.bmp\r\n0002\\0002_01_02_03_449.bmp\r\n0002\\0002_01_02_03_454.bmp\r\n0002\\0002_01_02_03_46.bmp\r\n0002\\0002_01_02_03_465.bmp\r\n0002\\0002_01_02_03_470.bmp\r\n0002\\0002_01_02_03_476.bmp\r\n0002\\0002_01_02_03_481.bmp\r\n0002\\0002_01_02_03_487.bmp\r\n0002\\0002_01_02_03_492.bmp\r\n0002\\0002_01_02_03_498.bmp\r\n0002\\0002_01_02_03_53.bmp\r\n0002\\0002_01_02_03_59.bmp\r\n0002\\0002_01_02_03_64.bmp\r\n0002\\0002_01_02_03_7.bmp\r\n0002\\0002_01_02_03_75.bmp\r\n0002\\0002_01_02_03_80.bmp\r\n0002\\0002_01_02_03_86.bmp\r\n0002\\0002_01_02_03_91.bmp\r\n0002\\0002_01_02_03_97.bmp\r\n0002\\0002_01_08_03_0.bmp\r\n0002\\0002_01_08_03_103.bmp\r\n0002\\0002_01_08_03_109.bmp\r\n0002\\0002_01_08_03_114.bmp\r\n0002\\0002_01_08_03_12.bmp\r\n0002\\0002_01_08_03_125.bmp\r\n0002\\0002_01_08_03_130.bmp\r\n0002\\0002_01_08_03_136.bmp\r\n0002\\0002_01_08_03_141.bmp\r\n0002\\0002_01_08_03_147.bmp\r\n0002\\0002_01_08_03_152.bmp\r\n0002\\0002_01_08_03_158.bmp\r\n0002\\0002_01_08_03_163.bmp\r\n0002\\0002_01_08_03_169.bmp\r\n0002\\0002_01_08_03_174.bmp\r\n0002\\0002_01_08_03_18.bmp\r\n0002\\0002_01_08_03_185.bmp\r\n0002\\0002_01_08_03_190.bmp\r\n0002\\0002_01_08_03_196.bmp\r\n0002\\0002_01_08_03_200.bmp\r\n0002\\0002_01_08_03_206.bmp\r\n0002\\0002_01_08_03_211.bmp\r\n0002\\0002_01_08_03_217.bmp\r\n0002\\0002_01_08_03_222.bmp\r\n0002\\0002_01_08_03_228.bmp\r\n0002\\0002_01_08_03_233.bmp\r\n0002\\0002_01_08_03_239.bmp\r\n0002\\0002_01_08_03_244.bmp\r\n0002\\0002_01_08_03_25.bmp\r\n0002\\0002_01_08_03_255.bmp\r\n0002\\0002_01_08_03_260.bmp\r\n0002\\0002_01_08_03_266.bmp\r\n0002\\0002_01_08_03_271.bmp\r\n0002\\0002_01_08_03_277.bmp\r\n0002\\0002_01_08_03_282.bmp\r\n0002\\0002_01_08_03_288.bmp\r\n0002\\0002_01_08_03_293.bmp\r\n0002\\0002_01_08_03_299.bmp\r\n0002\\0002_01_08_03_303.bmp\r\n0002\\0002_01_08_03_309.bmp\r\n0002\\0002_01_08_03_314.bmp\r\n0002\\0002_01_08_03_32.bmp\r\n0002\\0002_01_08_03_325.bmp\r\n0002\\0002_01_08_03_330.bmp\r\n0002\\0002_01_08_03_336.bmp\r\n0002\\0002_01_08_03_341.bmp\r\n0002\\0002_01_08_03_347.bmp\r\n0002\\0002_01_08_03_352.bmp\r\n0002\\0002_01_08_03_358.bmp\r\n0002\\0002_01_08_03_363.bmp\r\n0002\\0002_01_08_03_369.bmp\r\n0002\\0002_01_08_03_374.bmp\r\n0002\\0002_01_08_03_38.bmp\r\n0002\\0002_01_08_03_385.bmp\r\n0002\\0002_01_08_03_390.bmp\r\n0002\\0002_01_08_03_396.bmp\r\n0002\\0002_01_08_03_400.bmp\r\n0002\\0002_01_08_03_406.bmp\r\n0002\\0002_01_08_03_411.bmp\r\n0002\\0002_01_08_03_417.bmp\r\n0002\\0002_01_08_03_422.bmp\r\n0002\\0002_01_08_03_428.bmp\r\n0002\\0002_01_08_03_433.bmp\r\n0002\\0002_01_08_03_439.bmp\r\n0002\\0002_01_08_03_444.bmp\r\n0002\\0002_01_08_03_45.bmp\r\n0002\\0002_01_08_03_455.bmp\r\n0002\\0002_01_08_03_460.bmp\r\n0002\\0002_01_08_03_466.bmp\r\n0002\\0002_01_08_03_471.bmp\r\n0002\\0002_01_08_03_477.bmp\r\n0002\\0002_01_08_03_482.bmp\r\n0002\\0002_01_08_03_488.bmp\r\n0002\\0002_01_08_03_493.bmp\r\n0002\\0002_01_08_03_499.bmp\r\n0002\\0002_01_08_03_54.bmp\r\n0002\\0002_01_08_03_6.bmp\r\n0002\\0002_01_08_03_65.bmp\r\n0002\\0002_01_08_03_70.bmp\r\n0002\\0002_01_08_03_76.bmp\r\n0002\\0002_01_08_03_81.bmp\r\n0002\\0002_01_08_03_87.bmp\r\n0002\\0002_01_08_03_92.bmp\r\n0002\\0002_01_08_03_98.bmp\r\n0003\\0003_01_03_03_100.bmp\r\n0003\\0003_01_03_03_106.bmp\r\n0003\\0003_01_03_03_112.bmp\r\n0003\\0003_01_03_03_118.bmp\r\n0003\\0003_01_03_03_124.bmp\r\n0003\\0003_01_03_03_130.bmp\r\n0003\\0003_01_03_03_136.bmp\r\n0003\\0003_01_03_03_142.bmp\r\n0003\\0003_01_03_03_148.bmp\r\n0003\\0003_01_03_03_154.bmp\r\n0003\\0003_01_03_03_160.bmp\r\n0003\\0003_01_03_03_166.bmp\r\n0003\\0003_01_03_03_172.bmp\r\n0003\\0003_01_03_03_178.bmp\r\n0003\\0003_01_03_03_184.bmp\r\n0003\\0003_01_03_03_190.bmp\r\n0003\\0003_01_03_03_196.bmp\r\n0003\\0003_01_03_03_201.bmp\r\n0003\\0003_01_03_03_207.bmp\r\n0003\\0003_01_03_03_212.bmp\r\n0003\\0003_01_03_03_218.bmp\r\n0003\\0003_01_03_03_223.bmp\r\n0003\\0003_01_03_03_229.bmp\r\n0003\\0003_01_03_03_234.bmp\r\n0003\\0003_01_03_03_24.bmp\r\n0003\\0003_01_03_03_245.bmp\r\n0003\\0003_01_03_03_250.bmp\r\n0003\\0003_01_03_03_256.bmp\r\n0003\\0003_01_03_03_261.bmp\r\n0003\\0003_01_03_03_267.bmp\r\n0003\\0003_01_03_03_272.bmp\r\n0003\\0003_01_03_03_278.bmp\r\n0003\\0003_01_03_03_283.bmp\r\n0003\\0003_01_03_03_289.bmp\r\n0003\\0003_01_03_03_294.bmp\r\n0003\\0003_01_03_03_30.bmp\r\n0003\\0003_01_03_03_305.bmp\r\n0003\\0003_01_03_03_310.bmp\r\n0003\\0003_01_03_03_316.bmp\r\n0003\\0003_01_03_03_321.bmp\r\n0003\\0003_01_03_03_327.bmp\r\n0003\\0003_01_03_03_332.bmp\r\n0003\\0003_01_03_03_338.bmp\r\n0003\\0003_01_03_03_343.bmp\r\n0003\\0003_01_03_03_349.bmp\r\n0003\\0003_01_03_03_354.bmp\r\n0003\\0003_01_03_03_36.bmp\r\n0003\\0003_01_03_03_365.bmp\r\n0003\\0003_01_03_03_370.bmp\r\n0003\\0003_01_03_03_376.bmp\r\n0003\\0003_01_03_03_381.bmp\r\n0003\\0003_01_03_03_387.bmp\r\n0003\\0003_01_03_03_392.bmp\r\n0003\\0003_01_03_03_398.bmp\r\n0003\\0003_01_03_03_403.bmp\r\n0003\\0003_01_03_03_409.bmp\r\n0003\\0003_01_03_03_414.bmp\r\n0003\\0003_01_03_03_42.bmp\r\n0003\\0003_01_03_03_428.bmp\r\n0003\\0003_01_03_03_433.bmp\r\n0003\\0003_01_03_03_439.bmp\r\n0003\\0003_01_03_03_444.bmp\r\n0003\\0003_01_03_03_45.bmp\r\n0003\\0003_01_03_03_455.bmp\r\n0003\\0003_01_03_03_460.bmp\r\n0003\\0003_01_03_03_466.bmp\r\n0003\\0003_01_03_03_471.bmp\r\n0003\\0003_01_03_03_477.bmp\r\n0003\\0003_01_03_03_482.bmp\r\n0003\\0003_01_03_03_488.bmp\r\n0003\\0003_01_03_03_493.bmp\r\n0003\\0003_01_03_03_499.bmp\r\n0003\\0003_01_03_03_55.bmp\r\n0003\\0003_01_03_03_61.bmp\r\n0003\\0003_01_03_03_67.bmp\r\n0003\\0003_01_03_03_73.bmp\r\n0003\\0003_01_03_03_79.bmp\r\n0003\\0003_01_03_03_85.bmp\r\n0003\\0003_01_03_03_91.bmp\r\n0003\\0003_01_03_03_97.bmp\r\n0003\\0003_01_04_03_10.bmp\r\n0003\\0003_01_04_03_105.bmp\r\n0003\\0003_01_04_03_110.bmp\r\n0003\\0003_01_04_03_116.bmp\r\n0003\\0003_01_04_03_121.bmp\r\n0003\\0003_01_04_03_127.bmp\r\n0003\\0003_01_04_03_133.bmp\r\n0003\\0003_01_04_03_139.bmp\r\n0003\\0003_01_04_03_145.bmp\r\n0003\\0003_01_04_03_150.bmp\r\n0003\\0003_01_04_03_156.bmp\r\n0003\\0003_01_04_03_161.bmp\r\n0003\\0003_01_04_03_167.bmp\r\n0003\\0003_01_04_03_172.bmp\r\n0003\\0003_01_04_03_178.bmp\r\n0003\\0003_01_04_03_183.bmp\r\n0003\\0003_01_04_03_189.bmp\r\n0003\\0003_01_04_03_194.bmp\r\n0003\\0003_01_04_03_20.bmp\r\n0003\\0003_01_04_03_205.bmp\r\n0003\\0003_01_04_03_210.bmp\r\n0003\\0003_01_04_03_216.bmp\r\n0003\\0003_01_04_03_221.bmp\r\n0003\\0003_01_04_03_227.bmp\r\n0003\\0003_01_04_03_232.bmp\r\n0003\\0003_01_04_03_238.bmp\r\n0003\\0003_01_04_03_243.bmp\r\n0003\\0003_01_04_03_249.bmp\r\n0003\\0003_01_04_03_254.bmp\r\n0003\\0003_01_04_03_26.bmp\r\n0003\\0003_01_04_03_265.bmp\r\n0003\\0003_01_04_03_270.bmp\r\n0003\\0003_01_04_03_276.bmp\r\n0003\\0003_01_04_03_281.bmp\r\n0003\\0003_01_04_03_287.bmp\r\n0003\\0003_01_04_03_292.bmp\r\n0003\\0003_01_04_03_298.bmp\r\n0003\\0003_01_04_03_302.bmp\r\n0003\\0003_01_04_03_308.bmp\r\n0003\\0003_01_04_03_313.bmp\r\n0003\\0003_01_04_03_319.bmp\r\n0003\\0003_01_04_03_325.bmp\r\n0003\\0003_01_04_03_331.bmp\r\n0003\\0003_01_04_03_337.bmp\r\n0003\\0003_01_04_03_343.bmp\r\n0003\\0003_01_04_03_349.bmp\r\n0003\\0003_01_04_03_355.bmp\r\n0003\\0003_01_04_03_360.bmp\r\n0003\\0003_01_04_03_366.bmp\r\n0003\\0003_01_04_03_371.bmp\r\n0003\\0003_01_04_03_377.bmp\r\n0003\\0003_01_04_03_382.bmp\r\n0003\\0003_01_04_03_388.bmp\r\n0003\\0003_01_04_03_393.bmp\r\n0003\\0003_01_04_03_399.bmp\r\n0003\\0003_01_04_03_404.bmp\r\n0003\\0003_01_04_03_41.bmp\r\n0003\\0003_01_04_03_415.bmp\r\n0003\\0003_01_04_03_420.bmp\r\n0003\\0003_01_04_03_426.bmp\r\n0003\\0003_01_04_03_431.bmp\r\n0003\\0003_01_04_03_437.bmp\r\n0003\\0003_01_04_03_442.bmp\r\n0003\\0003_01_04_03_448.bmp\r\n0003\\0003_01_04_03_453.bmp\r\n0003\\0003_01_04_03_459.bmp\r\n0003\\0003_01_04_03_464.bmp\r\n0003\\0003_01_04_03_47.bmp\r\n0003\\0003_01_04_03_475.bmp\r\n0003\\0003_01_04_03_480.bmp\r\n0003\\0003_01_04_03_487.bmp\r\n0003\\0003_01_04_03_492.bmp\r\n0003\\0003_01_04_03_498.bmp\r\n0003\\0003_01_04_03_53.bmp\r\n0003\\0003_01_04_03_59.bmp\r\n0003\\0003_01_04_03_64.bmp\r\n0003\\0003_01_04_03_70.bmp\r\n0003\\0003_01_04_03_76.bmp\r\n0003\\0003_01_04_03_81.bmp\r\n0003\\0003_01_04_03_87.bmp\r\n0003\\0003_01_04_03_92.bmp\r\n0003\\0003_01_04_03_98.bmp\r\n0003\\0003_01_01_03_100.bmp\r\n0003\\0003_01_01_03_106.bmp\r\n0003\\0003_01_01_03_112.bmp\r\n0003\\0003_01_01_03_118.bmp\r\n0003\\0003_01_01_03_124.bmp\r\n0003\\0003_01_01_03_130.bmp\r\n0003\\0003_01_01_03_136.bmp\r\n0003\\0003_01_01_03_142.bmp\r\n0003\\0003_01_01_03_148.bmp\r\n0003\\0003_01_01_03_154.bmp\r\n0003\\0003_01_01_03_160.bmp\r\n0003\\0003_01_01_03_166.bmp\r\n0003\\0003_01_01_03_172.bmp\r\n0003\\0003_01_01_03_178.bmp\r\n0003\\0003_01_01_03_184.bmp\r\n0003\\0003_01_01_03_190.bmp\r\n0003\\0003_01_01_03_196.bmp\r\n0003\\0003_01_01_03_201.bmp\r\n0003\\0003_01_01_03_207.bmp\r\n0003\\0003_01_01_03_212.bmp\r\n0003\\0003_01_01_03_218.bmp\r\n0003\\0003_01_01_03_223.bmp\r\n0003\\0003_01_01_03_229.bmp\r\n0003\\0003_01_01_03_234.bmp\r\n0003\\0003_01_01_03_24.bmp\r\n0003\\0003_01_01_03_245.bmp\r\n0003\\0003_01_01_03_252.bmp\r\n0003\\0003_01_01_03_258.bmp\r\n0003\\0003_01_01_03_263.bmp\r\n0003\\0003_01_01_03_269.bmp\r\n0003\\0003_01_01_03_274.bmp\r\n0003\\0003_01_01_03_28.bmp\r\n0003\\0003_01_01_03_285.bmp\r\n0003\\0003_01_01_03_290.bmp\r\n0003\\0003_01_01_03_296.bmp\r\n0003\\0003_01_01_03_301.bmp\r\n0003\\0003_01_01_03_307.bmp\r\n0003\\0003_01_01_03_313.bmp\r\n0003\\0003_01_01_03_319.bmp\r\n0003\\0003_01_01_03_325.bmp\r\n0003\\0003_01_01_03_331.bmp\r\n0003\\0003_01_01_03_337.bmp\r\n0003\\0003_01_01_03_343.bmp\r\n0003\\0003_01_01_03_349.bmp\r\n0003\\0003_01_01_03_354.bmp\r\n0003\\0003_01_01_03_36.bmp\r\n0003\\0003_01_01_03_365.bmp\r\n0003\\0003_01_01_03_372.bmp\r\n0003\\0003_01_01_03_378.bmp\r\n0003\\0003_01_01_03_383.bmp\r\n0003\\0003_01_01_03_389.bmp\r\n0003\\0003_01_01_03_394.bmp\r\n0003\\0003_01_01_03_40.bmp\r\n0003\\0003_01_01_03_405.bmp\r\n0003\\0003_01_01_03_410.bmp\r\n0003\\0003_01_01_03_416.bmp\r\n0003\\0003_01_01_03_421.bmp\r\n0003\\0003_01_01_03_43.bmp\r\n0003\\0003_01_01_03_435.bmp\r\n0003\\0003_01_01_03_440.bmp\r\n0003\\0003_01_01_03_446.bmp\r\n0003\\0003_01_01_03_451.bmp\r\n0003\\0003_01_01_03_457.bmp\r\n0003\\0003_01_01_03_462.bmp\r\n0003\\0003_01_01_03_468.bmp\r\n0003\\0003_01_01_03_473.bmp\r\n0003\\0003_01_01_03_479.bmp\r\n0003\\0003_01_01_03_484.bmp\r\n0003\\0003_01_01_03_49.bmp\r\n0003\\0003_01_01_03_495.bmp\r\n0003\\0003_01_01_03_51.bmp\r\n0003\\0003_01_01_03_57.bmp\r\n0003\\0003_01_01_03_63.bmp\r\n0003\\0003_01_01_03_69.bmp\r\n0003\\0003_01_01_03_75.bmp\r\n0003\\0003_01_01_03_82.bmp\r\n0003\\0003_01_01_03_88.bmp\r\n0003\\0003_01_01_03_94.bmp\r\n0003\\0003_01_02_03_100.bmp\r\n0003\\0003_01_02_03_106.bmp\r\n0003\\0003_01_02_03_112.bmp\r\n0003\\0003_01_02_03_118.bmp\r\n0003\\0003_01_02_03_124.bmp\r\n0003\\0003_01_02_03_130.bmp\r\n0003\\0003_01_02_03_136.bmp\r\n0003\\0003_01_02_03_142.bmp\r\n0003\\0003_01_02_03_148.bmp\r\n0003\\0003_01_02_03_154.bmp\r\n0003\\0003_01_02_03_160.bmp\r\n0003\\0003_01_02_03_166.bmp\r\n0003\\0003_01_02_03_172.bmp\r\n0003\\0003_01_02_03_178.bmp\r\n0003\\0003_01_02_03_184.bmp\r\n0003\\0003_01_02_03_190.bmp\r\n0003\\0003_01_02_03_196.bmp\r\n0003\\0003_01_02_03_201.bmp\r\n0003\\0003_01_02_03_207.bmp\r\n0003\\0003_01_02_03_212.bmp\r\n0003\\0003_01_02_03_218.bmp\r\n0003\\0003_01_02_03_223.bmp\r\n0003\\0003_01_02_03_229.bmp\r\n0003\\0003_01_02_03_234.bmp\r\n0003\\0003_01_02_03_24.bmp\r\n0003\\0003_01_02_03_245.bmp\r\n0003\\0003_01_02_03_250.bmp\r\n0003\\0003_01_02_03_256.bmp\r\n0003\\0003_01_02_03_261.bmp\r\n0003\\0003_01_02_03_267.bmp\r\n0003\\0003_01_02_03_272.bmp\r\n0003\\0003_01_02_03_278.bmp\r\n0003\\0003_01_02_03_283.bmp\r\n0003\\0003_01_02_03_289.bmp\r\n0003\\0003_01_02_03_294.bmp\r\n0003\\0003_01_02_03_30.bmp\r\n0003\\0003_01_02_03_305.bmp\r\n0003\\0003_01_02_03_310.bmp\r\n0003\\0003_01_02_03_316.bmp\r\n0003\\0003_01_02_03_321.bmp\r\n0003\\0003_01_02_03_327.bmp\r\n0003\\0003_01_02_03_332.bmp\r\n0003\\0003_01_02_03_338.bmp\r\n0003\\0003_01_02_03_343.bmp\r\n0003\\0003_01_02_03_349.bmp\r\n0003\\0003_01_02_03_355.bmp\r\n0003\\0003_01_02_03_360.bmp\r\n0003\\0003_01_02_03_366.bmp\r\n0003\\0003_01_02_03_371.bmp\r\n0003\\0003_01_02_03_377.bmp\r\n0003\\0003_01_02_03_382.bmp\r\n0003\\0003_01_02_03_388.bmp\r\n0003\\0003_01_02_03_393.bmp\r\n0003\\0003_01_02_03_399.bmp\r\n0003\\0003_01_02_03_404.bmp\r\n0003\\0003_01_02_03_41.bmp\r\n0003\\0003_01_02_03_415.bmp\r\n0003\\0003_01_02_03_420.bmp\r\n0003\\0003_01_02_03_426.bmp\r\n0003\\0003_01_02_03_431.bmp\r\n0003\\0003_01_02_03_437.bmp\r\n0003\\0003_01_02_03_442.bmp\r\n0003\\0003_01_02_03_448.bmp\r\n0003\\0003_01_02_03_453.bmp\r\n0003\\0003_01_02_03_459.bmp\r\n0003\\0003_01_02_03_464.bmp\r\n0003\\0003_01_02_03_47.bmp\r\n0003\\0003_01_02_03_475.bmp\r\n0003\\0003_01_02_03_480.bmp\r\n0003\\0003_01_02_03_486.bmp\r\n0003\\0003_01_02_03_492.bmp\r\n0003\\0003_01_02_03_498.bmp\r\n0003\\0003_01_02_03_55.bmp\r\n0003\\0003_01_02_03_61.bmp\r\n0003\\0003_01_02_03_67.bmp\r\n0003\\0003_01_02_03_74.bmp\r\n0003\\0003_01_02_03_80.bmp\r\n0003\\0003_01_02_03_86.bmp\r\n0003\\0003_01_02_03_92.bmp\r\n0003\\0003_01_02_03_98.bmp\r\n0003\\0003_01_08_03_0.bmp\r\n0003\\0003_01_08_03_103.bmp\r\n0003\\0003_01_08_03_109.bmp\r\n0003\\0003_01_08_03_114.bmp\r\n0003\\0003_01_08_03_12.bmp\r\n0003\\0003_01_08_03_125.bmp\r\n0003\\0003_01_08_03_130.bmp\r\n0003\\0003_01_08_03_136.bmp\r\n0003\\0003_01_08_03_141.bmp\r\n0003\\0003_01_08_03_147.bmp\r\n0003\\0003_01_08_03_152.bmp\r\n0003\\0003_01_08_03_158.bmp\r\n0003\\0003_01_08_03_163.bmp\r\n0003\\0003_01_08_03_169.bmp\r\n0003\\0003_01_08_03_174.bmp\r\n0003\\0003_01_08_03_18.bmp\r\n0003\\0003_01_08_03_185.bmp\r\n0003\\0003_01_08_03_190.bmp\r\n0003\\0003_01_08_03_196.bmp\r\n0003\\0003_01_08_03_200.bmp\r\n0003\\0003_01_08_03_206.bmp\r\n0003\\0003_01_08_03_211.bmp\r\n0003\\0003_01_08_03_217.bmp\r\n0003\\0003_01_08_03_222.bmp\r\n0003\\0003_01_08_03_228.bmp\r\n0003\\0003_01_08_03_233.bmp\r\n0003\\0003_01_08_03_239.bmp\r\n0003\\0003_01_08_03_244.bmp\r\n0003\\0003_01_08_03_25.bmp\r\n0003\\0003_01_08_03_255.bmp\r\n0003\\0003_01_08_03_260.bmp\r\n0003\\0003_01_08_03_266.bmp\r\n0003\\0003_01_08_03_271.bmp\r\n0003\\0003_01_08_03_277.bmp\r\n0003\\0003_01_08_03_282.bmp\r\n0003\\0003_01_08_03_288.bmp\r\n0003\\0003_01_08_03_293.bmp\r\n0003\\0003_01_08_03_299.bmp\r\n0003\\0003_01_08_03_303.bmp\r\n0003\\0003_01_08_03_309.bmp\r\n0003\\0003_01_08_03_314.bmp\r\n0003\\0003_01_08_03_32.bmp\r\n0003\\0003_01_08_03_325.bmp\r\n0003\\0003_01_08_03_330.bmp\r\n0003\\0003_01_08_03_336.bmp\r\n0003\\0003_01_08_03_341.bmp\r\n0003\\0003_01_08_03_347.bmp\r\n0003\\0003_01_08_03_352.bmp\r\n0003\\0003_01_08_03_358.bmp\r\n0003\\0003_01_08_03_363.bmp\r\n0003\\0003_01_08_03_369.bmp\r\n0003\\0003_01_08_03_374.bmp\r\n0003\\0003_01_08_03_38.bmp\r\n0003\\0003_01_08_03_385.bmp\r\n0003\\0003_01_08_03_390.bmp\r\n0003\\0003_01_08_03_396.bmp\r\n0003\\0003_01_08_03_400.bmp\r\n0003\\0003_01_08_03_406.bmp\r\n0003\\0003_01_08_03_411.bmp\r\n0003\\0003_01_08_03_417.bmp\r\n0003\\0003_01_08_03_422.bmp\r\n0003\\0003_01_08_03_428.bmp\r\n0003\\0003_01_08_03_433.bmp\r\n0003\\0003_01_08_03_439.bmp\r\n0003\\0003_01_08_03_444.bmp\r\n0003\\0003_01_08_03_45.bmp\r\n0003\\0003_01_08_03_455.bmp\r\n0003\\0003_01_08_03_460.bmp\r\n0003\\0003_01_08_03_466.bmp\r\n0003\\0003_01_08_03_471.bmp\r\n0003\\0003_01_08_03_477.bmp\r\n0003\\0003_01_08_03_482.bmp\r\n0003\\0003_01_08_03_488.bmp\r\n0003\\0003_01_08_03_493.bmp\r\n0003\\0003_01_08_03_499.bmp\r\n0003\\0003_01_08_03_54.bmp\r\n0003\\0003_01_08_03_6.bmp\r\n0003\\0003_01_08_03_65.bmp\r\n0003\\0003_01_08_03_70.bmp\r\n0003\\0003_01_08_03_76.bmp\r\n0003\\0003_01_08_03_81.bmp\r\n0003\\0003_01_08_03_87.bmp\r\n0003\\0003_01_08_03_92.bmp\r\n0003\\0003_01_08_03_98.bmp\r\n0004\\0004_01_03_03_0.bmp\r\n0004\\0004_01_03_03_103.bmp\r\n0004\\0004_01_03_03_109.bmp\r\n0004\\0004_01_03_03_114.bmp\r\n0004\\0004_01_03_03_12.bmp\r\n0004\\0004_01_03_03_125.bmp\r\n0004\\0004_01_03_03_130.bmp\r\n0004\\0004_01_03_03_136.bmp\r\n0004\\0004_01_03_03_141.bmp\r\n0004\\0004_01_03_03_147.bmp\r\n0004\\0004_01_03_03_152.bmp\r\n0004\\0004_01_03_03_158.bmp\r\n0004\\0004_01_03_03_163.bmp\r\n0004\\0004_01_03_03_169.bmp\r\n0004\\0004_01_03_03_175.bmp\r\n0004\\0004_01_03_03_180.bmp\r\n0004\\0004_01_03_03_186.bmp\r\n0004\\0004_01_03_03_191.bmp\r\n0004\\0004_01_03_03_197.bmp\r\n0004\\0004_01_03_03_201.bmp\r\n0004\\0004_01_03_03_207.bmp\r\n0004\\0004_01_03_03_212.bmp\r\n0004\\0004_01_03_03_218.bmp\r\n0004\\0004_01_03_03_223.bmp\r\n0004\\0004_01_03_03_229.bmp\r\n0004\\0004_01_03_03_234.bmp\r\n0004\\0004_01_03_03_24.bmp\r\n0004\\0004_01_03_03_245.bmp\r\n0004\\0004_01_03_03_250.bmp\r\n0004\\0004_01_03_03_256.bmp\r\n0004\\0004_01_03_03_261.bmp\r\n0004\\0004_01_03_03_267.bmp\r\n0004\\0004_01_03_03_272.bmp\r\n0004\\0004_01_03_03_278.bmp\r\n0004\\0004_01_03_03_283.bmp\r\n0004\\0004_01_03_03_289.bmp\r\n0004\\0004_01_03_03_294.bmp\r\n0004\\0004_01_03_03_3.bmp\r\n0004\\0004_01_03_03_304.bmp\r\n0004\\0004_01_03_03_31.bmp\r\n0004\\0004_01_03_03_315.bmp\r\n0004\\0004_01_03_03_320.bmp\r\n0004\\0004_01_03_03_326.bmp\r\n0004\\0004_01_03_03_331.bmp\r\n0004\\0004_01_03_03_337.bmp\r\n0004\\0004_01_03_03_344.bmp\r\n0004\\0004_01_03_03_355.bmp\r\n0004\\0004_01_03_03_360.bmp\r\n0004\\0004_01_03_03_366.bmp\r\n0004\\0004_01_03_03_371.bmp\r\n0004\\0004_01_03_03_377.bmp\r\n0004\\0004_01_03_03_382.bmp\r\n0004\\0004_01_03_03_388.bmp\r\n0004\\0004_01_03_03_398.bmp\r\n0004\\0004_01_03_03_402.bmp\r\n0004\\0004_01_03_03_408.bmp\r\n0004\\0004_01_03_03_413.bmp\r\n0004\\0004_01_03_03_419.bmp\r\n0004\\0004_01_03_03_424.bmp\r\n0004\\0004_01_03_03_43.bmp\r\n0004\\0004_01_03_03_435.bmp\r\n0004\\0004_01_03_03_440.bmp\r\n0004\\0004_01_03_03_446.bmp\r\n0004\\0004_01_03_03_451.bmp\r\n0004\\0004_01_03_03_457.bmp\r\n0004\\0004_01_03_03_462.bmp\r\n0004\\0004_01_03_03_468.bmp\r\n0004\\0004_01_03_03_473.bmp\r\n0004\\0004_01_03_03_479.bmp\r\n0004\\0004_01_03_03_484.bmp\r\n0004\\0004_01_03_03_49.bmp\r\n0004\\0004_01_03_03_496.bmp\r\n0004\\0004_01_03_03_51.bmp\r\n0004\\0004_01_03_03_57.bmp\r\n0004\\0004_01_03_03_62.bmp\r\n0004\\0004_01_03_03_69.bmp\r\n0004\\0004_01_03_03_74.bmp\r\n0004\\0004_01_03_03_8.bmp\r\n0004\\0004_01_03_03_85.bmp\r\n0004\\0004_01_03_03_90.bmp\r\n0004\\0004_01_03_03_96.bmp\r\n0004\\0004_01_04_03_0.bmp\r\n0004\\0004_01_04_03_103.bmp\r\n0004\\0004_01_04_03_109.bmp\r\n0004\\0004_01_04_03_114.bmp\r\n0004\\0004_01_04_03_12.bmp\r\n0004\\0004_01_04_03_125.bmp\r\n0004\\0004_01_04_03_130.bmp\r\n0004\\0004_01_04_03_136.bmp\r\n0004\\0004_01_04_03_141.bmp\r\n0004\\0004_01_04_03_147.bmp\r\n0004\\0004_01_04_03_152.bmp\r\n0004\\0004_01_04_03_159.bmp\r\n0004\\0004_01_04_03_164.bmp\r\n0004\\0004_01_04_03_17.bmp\r\n0004\\0004_01_04_03_175.bmp\r\n0004\\0004_01_04_03_180.bmp\r\n0004\\0004_01_04_03_186.bmp\r\n0004\\0004_01_04_03_191.bmp\r\n0004\\0004_01_04_03_197.bmp\r\n0004\\0004_01_04_03_201.bmp\r\n0004\\0004_01_04_03_207.bmp\r\n0004\\0004_01_04_03_212.bmp\r\n0004\\0004_01_04_03_218.bmp\r\n0004\\0004_01_04_03_223.bmp\r\n0004\\0004_01_04_03_229.bmp\r\n0004\\0004_01_04_03_234.bmp\r\n0004\\0004_01_04_03_240.bmp\r\n0004\\0004_01_04_03_246.bmp\r\n0004\\0004_01_04_03_251.bmp\r\n0004\\0004_01_04_03_257.bmp\r\n0004\\0004_01_04_03_262.bmp\r\n0004\\0004_01_04_03_268.bmp\r\n0004\\0004_01_04_03_273.bmp\r\n0004\\0004_01_04_03_279.bmp\r\n0004\\0004_01_04_03_284.bmp\r\n0004\\0004_01_04_03_29.bmp\r\n0004\\0004_01_04_03_295.bmp\r\n0004\\0004_01_04_03_30.bmp\r\n0004\\0004_01_04_03_305.bmp\r\n0004\\0004_01_04_03_310.bmp\r\n0004\\0004_01_04_03_316.bmp\r\n0004\\0004_01_04_03_321.bmp\r\n0004\\0004_01_04_03_327.bmp\r\n0004\\0004_01_04_03_332.bmp\r\n0004\\0004_01_04_03_338.bmp\r\n0004\\0004_01_04_03_343.bmp\r\n0004\\0004_01_04_03_349.bmp\r\n0004\\0004_01_04_03_354.bmp\r\n0004\\0004_01_04_03_36.bmp\r\n0004\\0004_01_04_03_365.bmp\r\n0004\\0004_01_04_03_370.bmp\r\n0004\\0004_01_04_03_376.bmp\r\n0004\\0004_01_04_03_381.bmp\r\n0004\\0004_01_04_03_387.bmp\r\n0004\\0004_01_04_03_393.bmp\r\n0004\\0004_01_04_03_399.bmp\r\n0004\\0004_01_04_03_404.bmp\r\n0004\\0004_01_04_03_41.bmp\r\n0004\\0004_01_04_03_415.bmp\r\n0004\\0004_01_04_03_420.bmp\r\n0004\\0004_01_04_03_426.bmp\r\n0004\\0004_01_04_03_431.bmp\r\n0004\\0004_01_04_03_437.bmp\r\n0004\\0004_01_04_03_442.bmp\r\n0004\\0004_01_04_03_448.bmp\r\n0004\\0004_01_04_03_453.bmp\r\n0004\\0004_01_04_03_46.bmp\r\n0004\\0004_01_04_03_465.bmp\r\n0004\\0004_01_04_03_470.bmp\r\n0004\\0004_01_04_03_476.bmp\r\n0004\\0004_01_04_03_481.bmp\r\n0004\\0004_01_04_03_49.bmp\r\n0004\\0004_01_04_03_495.bmp\r\n0004\\0004_01_04_03_50.bmp\r\n0004\\0004_01_04_03_56.bmp\r\n0004\\0004_01_04_03_62.bmp\r\n0004\\0004_01_04_03_68.bmp\r\n0004\\0004_01_04_03_74.bmp\r\n0004\\0004_01_04_03_8.bmp\r\n0004\\0004_01_04_03_85.bmp\r\n0004\\0004_01_04_03_90.bmp\r\n0004\\0004_01_04_03_96.bmp\r\n0004\\0004_01_01_03_0.bmp\r\n0004\\0004_01_01_03_103.bmp\r\n0004\\0004_01_01_03_109.bmp\r\n0004\\0004_01_01_03_114.bmp\r\n0004\\0004_01_01_03_12.bmp\r\n0004\\0004_01_01_03_125.bmp\r\n0004\\0004_01_01_03_130.bmp\r\n0004\\0004_01_01_03_136.bmp\r\n0004\\0004_01_01_03_141.bmp\r\n0004\\0004_01_01_03_147.bmp\r\n0004\\0004_01_01_03_152.bmp\r\n0004\\0004_01_01_03_158.bmp\r\n0004\\0004_01_01_03_163.bmp\r\n0004\\0004_01_01_03_169.bmp\r\n0004\\0004_01_01_03_174.bmp\r\n0004\\0004_01_01_03_18.bmp\r\n0004\\0004_01_01_03_185.bmp\r\n0004\\0004_01_01_03_190.bmp\r\n0004\\0004_01_01_03_196.bmp\r\n0004\\0004_01_01_03_200.bmp\r\n0004\\0004_01_01_03_206.bmp\r\n0004\\0004_01_01_03_211.bmp\r\n0004\\0004_01_01_03_217.bmp\r\n0004\\0004_01_01_03_222.bmp\r\n0004\\0004_01_01_03_228.bmp\r\n0004\\0004_01_01_03_233.bmp\r\n0004\\0004_01_01_03_239.bmp\r\n0004\\0004_01_01_03_244.bmp\r\n0004\\0004_01_01_03_25.bmp\r\n0004\\0004_01_01_03_259.bmp\r\n0004\\0004_01_01_03_264.bmp\r\n0004\\0004_01_01_03_27.bmp\r\n0004\\0004_01_01_03_275.bmp\r\n0004\\0004_01_01_03_280.bmp\r\n0004\\0004_01_01_03_286.bmp\r\n0004\\0004_01_01_03_291.bmp\r\n0004\\0004_01_01_03_297.bmp\r\n0004\\0004_01_01_03_301.bmp\r\n0004\\0004_01_01_03_307.bmp\r\n0004\\0004_01_01_03_312.bmp\r\n0004\\0004_01_01_03_318.bmp\r\n0004\\0004_01_01_03_323.bmp\r\n0004\\0004_01_01_03_329.bmp\r\n0004\\0004_01_01_03_334.bmp\r\n0004\\0004_01_01_03_34.bmp\r\n0004\\0004_01_01_03_345.bmp\r\n0004\\0004_01_01_03_350.bmp\r\n0004\\0004_01_01_03_356.bmp\r\n0004\\0004_01_01_03_361.bmp\r\n0004\\0004_01_01_03_367.bmp\r\n0004\\0004_01_01_03_372.bmp\r\n0004\\0004_01_01_03_378.bmp\r\n0004\\0004_01_01_03_383.bmp\r\n0004\\0004_01_01_03_389.bmp\r\n0004\\0004_01_01_03_394.bmp\r\n0004\\0004_01_01_03_4.bmp\r\n0004\\0004_01_01_03_404.bmp\r\n0004\\0004_01_01_03_41.bmp\r\n0004\\0004_01_01_03_415.bmp\r\n0004\\0004_01_01_03_420.bmp\r\n0004\\0004_01_01_03_426.bmp\r\n0004\\0004_01_01_03_431.bmp\r\n0004\\0004_01_01_03_437.bmp\r\n0004\\0004_01_01_03_442.bmp\r\n0004\\0004_01_01_03_448.bmp\r\n0004\\0004_01_01_03_453.bmp\r\n0004\\0004_01_01_03_459.bmp\r\n0004\\0004_01_01_03_464.bmp\r\n0004\\0004_01_01_03_47.bmp\r\n0004\\0004_01_01_03_475.bmp\r\n0004\\0004_01_01_03_480.bmp\r\n0004\\0004_01_01_03_486.bmp\r\n0004\\0004_01_01_03_491.bmp\r\n0004\\0004_01_01_03_497.bmp\r\n0004\\0004_01_01_03_52.bmp\r\n0004\\0004_01_01_03_58.bmp\r\n0004\\0004_01_01_03_63.bmp\r\n0004\\0004_01_01_03_69.bmp\r\n0004\\0004_01_01_03_74.bmp\r\n0004\\0004_01_01_03_8.bmp\r\n0004\\0004_01_01_03_85.bmp\r\n0004\\0004_01_01_03_90.bmp\r\n0004\\0004_01_01_03_96.bmp\r\n0004\\0004_01_02_03_0.bmp\r\n0004\\0004_01_02_03_103.bmp\r\n0004\\0004_01_02_03_109.bmp\r\n0004\\0004_01_02_03_114.bmp\r\n0004\\0004_01_02_03_12.bmp\r\n0004\\0004_01_02_03_125.bmp\r\n0004\\0004_01_02_03_130.bmp\r\n0004\\0004_01_02_03_136.bmp\r\n0004\\0004_01_02_03_141.bmp\r\n0004\\0004_01_02_03_147.bmp\r\n0004\\0004_01_02_03_152.bmp\r\n0004\\0004_01_02_03_158.bmp\r\n0004\\0004_01_02_03_163.bmp\r\n0004\\0004_01_02_03_169.bmp\r\n0004\\0004_01_02_03_174.bmp\r\n0004\\0004_01_02_03_18.bmp\r\n0004\\0004_01_02_03_186.bmp\r\n0004\\0004_01_02_03_191.bmp\r\n0004\\0004_01_02_03_20.bmp\r\n0004\\0004_01_02_03_205.bmp\r\n0004\\0004_01_02_03_211.bmp\r\n0004\\0004_01_02_03_217.bmp\r\n0004\\0004_01_02_03_222.bmp\r\n0004\\0004_01_02_03_228.bmp\r\n0004\\0004_01_02_03_233.bmp\r\n0004\\0004_01_02_03_239.bmp\r\n0004\\0004_01_02_03_25.bmp\r\n0004\\0004_01_02_03_261.bmp\r\n0004\\0004_01_02_03_267.bmp\r\n0004\\0004_01_02_03_272.bmp\r\n0004\\0004_01_02_03_279.bmp\r\n0004\\0004_01_02_03_284.bmp\r\n0004\\0004_01_02_03_29.bmp\r\n0004\\0004_01_02_03_295.bmp\r\n0004\\0004_01_02_03_30.bmp\r\n0004\\0004_01_02_03_305.bmp\r\n0004\\0004_01_02_03_311.bmp\r\n0004\\0004_01_02_03_317.bmp\r\n0004\\0004_01_02_03_322.bmp\r\n0004\\0004_01_02_03_328.bmp\r\n0004\\0004_01_02_03_333.bmp\r\n0004\\0004_01_02_03_339.bmp\r\n0004\\0004_01_02_03_344.bmp\r\n0004\\0004_01_02_03_35.bmp\r\n0004\\0004_01_02_03_355.bmp\r\n0004\\0004_01_02_03_360.bmp\r\n0004\\0004_01_02_03_366.bmp\r\n0004\\0004_01_02_03_371.bmp\r\n0004\\0004_01_02_03_377.bmp\r\n0004\\0004_01_02_03_382.bmp\r\n0004\\0004_01_02_03_388.bmp\r\n0004\\0004_01_02_03_393.bmp\r\n0004\\0004_01_02_03_399.bmp\r\n0004\\0004_01_02_03_403.bmp\r\n0004\\0004_01_02_03_409.bmp\r\n0004\\0004_01_02_03_414.bmp\r\n0004\\0004_01_02_03_42.bmp\r\n0004\\0004_01_02_03_425.bmp\r\n0004\\0004_01_02_03_430.bmp\r\n0004\\0004_01_02_03_436.bmp\r\n0004\\0004_01_02_03_441.bmp\r\n0004\\0004_01_02_03_447.bmp\r\n0004\\0004_01_02_03_452.bmp\r\n0004\\0004_01_02_03_459.bmp\r\n0004\\0004_01_02_03_464.bmp\r\n0004\\0004_01_02_03_472.bmp\r\n0004\\0004_01_02_03_478.bmp\r\n0004\\0004_01_02_03_483.bmp\r\n0004\\0004_01_02_03_49.bmp\r\n0004\\0004_01_02_03_495.bmp\r\n0004\\0004_01_02_03_50.bmp\r\n0004\\0004_01_02_03_56.bmp\r\n0004\\0004_01_02_03_61.bmp\r\n0004\\0004_01_02_03_67.bmp\r\n0004\\0004_01_02_03_72.bmp\r\n0004\\0004_01_02_03_78.bmp\r\n0004\\0004_01_02_03_83.bmp\r\n0004\\0004_01_02_03_89.bmp\r\n0004\\0004_01_02_03_94.bmp\r\n0004\\0004_01_08_03_0.bmp\r\n0004\\0004_01_08_03_103.bmp\r\n0004\\0004_01_08_03_109.bmp\r\n0004\\0004_01_08_03_114.bmp\r\n0004\\0004_01_08_03_12.bmp\r\n0004\\0004_01_08_03_125.bmp\r\n0004\\0004_01_08_03_130.bmp\r\n0004\\0004_01_08_03_136.bmp\r\n0004\\0004_01_08_03_141.bmp\r\n0004\\0004_01_08_03_147.bmp\r\n0004\\0004_01_08_03_152.bmp\r\n0004\\0004_01_08_03_158.bmp\r\n0004\\0004_01_08_03_163.bmp\r\n0004\\0004_01_08_03_169.bmp\r\n0004\\0004_01_08_03_174.bmp\r\n0004\\0004_01_08_03_18.bmp\r\n0004\\0004_01_08_03_185.bmp\r\n0004\\0004_01_08_03_190.bmp\r\n0004\\0004_01_08_03_196.bmp\r\n0004\\0004_01_08_03_200.bmp\r\n0004\\0004_01_08_03_206.bmp\r\n0004\\0004_01_08_03_211.bmp\r\n0004\\0004_01_08_03_217.bmp\r\n0004\\0004_01_08_03_222.bmp\r\n0004\\0004_01_08_03_228.bmp\r\n0004\\0004_01_08_03_233.bmp\r\n0004\\0004_01_08_03_239.bmp\r\n0004\\0004_01_08_03_244.bmp\r\n0004\\0004_01_08_03_25.bmp\r\n0004\\0004_01_08_03_255.bmp\r\n0004\\0004_01_08_03_260.bmp\r\n0004\\0004_01_08_03_266.bmp\r\n0004\\0004_01_08_03_271.bmp\r\n0004\\0004_01_08_03_277.bmp\r\n0004\\0004_01_08_03_282.bmp\r\n0004\\0004_01_08_03_288.bmp\r\n0004\\0004_01_08_03_293.bmp\r\n0004\\0004_01_08_03_299.bmp\r\n0004\\0004_01_08_03_303.bmp\r\n0004\\0004_01_08_03_309.bmp\r\n0004\\0004_01_08_03_314.bmp\r\n0004\\0004_01_08_03_32.bmp\r\n0004\\0004_01_08_03_325.bmp\r\n0004\\0004_01_08_03_330.bmp\r\n0004\\0004_01_08_03_336.bmp\r\n0004\\0004_01_08_03_341.bmp\r\n0004\\0004_01_08_03_347.bmp\r\n0004\\0004_01_08_03_352.bmp\r\n0004\\0004_01_08_03_358.bmp\r\n0004\\0004_01_08_03_363.bmp\r\n0004\\0004_01_08_03_369.bmp\r\n0004\\0004_01_08_03_374.bmp\r\n0004\\0004_01_08_03_38.bmp\r\n0004\\0004_01_08_03_385.bmp\r\n0004\\0004_01_08_03_390.bmp\r\n0004\\0004_01_08_03_397.bmp\r\n0004\\0004_01_08_03_401.bmp\r\n0004\\0004_01_08_03_407.bmp\r\n0004\\0004_01_08_03_412.bmp\r\n0004\\0004_01_08_03_418.bmp\r\n0004\\0004_01_08_03_423.bmp\r\n0004\\0004_01_08_03_429.bmp\r\n0004\\0004_01_08_03_434.bmp\r\n0004\\0004_01_08_03_44.bmp\r\n0004\\0004_01_08_03_445.bmp\r\n0004\\0004_01_08_03_450.bmp\r\n0004\\0004_01_08_03_456.bmp\r\n0004\\0004_01_08_03_461.bmp\r\n0004\\0004_01_08_03_467.bmp\r\n0004\\0004_01_08_03_472.bmp\r\n0004\\0004_01_08_03_478.bmp\r\n0004\\0004_01_08_03_483.bmp\r\n0004\\0004_01_08_03_489.bmp\r\n0004\\0004_01_08_03_494.bmp\r\n0004\\0004_01_08_03_5.bmp\r\n0004\\0004_01_08_03_55.bmp\r\n0004\\0004_01_08_03_60.bmp\r\n0004\\0004_01_08_03_66.bmp\r\n0004\\0004_01_08_03_71.bmp\r\n0004\\0004_01_08_03_77.bmp\r\n0004\\0004_01_08_03_82.bmp\r\n0004\\0004_01_08_03_88.bmp\r\n0004\\0004_01_08_03_93.bmp\r\n0004\\0004_01_08_03_99.bmp\r\n0005\\0005_00_03_03_10.bmp\r\n0005\\0005_00_03_03_107.bmp\r\n0005\\0005_00_03_03_112.bmp\r\n0005\\0005_00_03_03_118.bmp\r\n0005\\0005_00_03_03_123.bmp\r\n0005\\0005_00_03_03_129.bmp\r\n0005\\0005_00_03_03_134.bmp\r\n0005\\0005_00_03_03_14.bmp\r\n0005\\0005_00_03_03_145.bmp\r\n0005\\0005_00_03_03_150.bmp\r\n0005\\0005_00_03_03_156.bmp\r\n0005\\0005_00_03_03_161.bmp\r\n0005\\0005_00_03_03_167.bmp\r\n0005\\0005_00_03_03_172.bmp\r\n0005\\0005_00_03_03_178.bmp\r\n0005\\0005_00_03_03_183.bmp\r\n0005\\0005_00_03_03_189.bmp\r\n0005\\0005_00_03_03_194.bmp\r\n0005\\0005_00_03_03_20.bmp\r\n0005\\0005_00_03_03_205.bmp\r\n0005\\0005_00_03_03_210.bmp\r\n0005\\0005_00_03_03_216.bmp\r\n0005\\0005_00_03_03_221.bmp\r\n0005\\0005_00_03_03_227.bmp\r\n0005\\0005_00_03_03_232.bmp\r\n0005\\0005_00_03_03_239.bmp\r\n0005\\0005_00_03_03_244.bmp\r\n0005\\0005_00_03_03_25.bmp\r\n0005\\0005_00_03_03_255.bmp\r\n0005\\0005_00_03_03_260.bmp\r\n0005\\0005_00_03_03_266.bmp\r\n0005\\0005_00_03_03_271.bmp\r\n0005\\0005_00_03_03_277.bmp\r\n0005\\0005_00_03_03_282.bmp\r\n0005\\0005_00_03_03_288.bmp\r\n0005\\0005_00_03_03_293.bmp\r\n0005\\0005_00_03_03_299.bmp\r\n0005\\0005_00_03_03_304.bmp\r\n0005\\0005_00_03_03_31.bmp\r\n0005\\0005_00_03_03_315.bmp\r\n0005\\0005_00_03_03_320.bmp\r\n0005\\0005_00_03_03_326.bmp\r\n0005\\0005_00_03_03_331.bmp\r\n0005\\0005_00_03_03_337.bmp\r\n0005\\0005_00_03_03_342.bmp\r\n0005\\0005_00_03_03_348.bmp\r\n0005\\0005_00_03_03_353.bmp\r\n0005\\0005_00_03_03_359.bmp\r\n0005\\0005_00_03_03_364.bmp\r\n0005\\0005_00_03_03_37.bmp\r\n0005\\0005_00_03_03_375.bmp\r\n0005\\0005_00_03_03_380.bmp\r\n0005\\0005_00_03_03_386.bmp\r\n0005\\0005_00_03_03_392.bmp\r\n0005\\0005_00_03_03_398.bmp\r\n0005\\0005_00_03_03_403.bmp\r\n0005\\0005_00_03_03_409.bmp\r\n0005\\0005_00_03_03_415.bmp\r\n0005\\0005_00_03_03_420.bmp\r\n0005\\0005_00_03_03_426.bmp\r\n0005\\0005_00_03_03_431.bmp\r\n0005\\0005_00_03_03_437.bmp\r\n0005\\0005_00_03_03_442.bmp\r\n0005\\0005_00_03_03_448.bmp\r\n0005\\0005_00_03_03_453.bmp\r\n0005\\0005_00_03_03_459.bmp\r\n0005\\0005_00_03_03_464.bmp\r\n0005\\0005_00_03_03_47.bmp\r\n0005\\0005_00_03_03_475.bmp\r\n0005\\0005_00_03_03_480.bmp\r\n0005\\0005_00_03_03_486.bmp\r\n0005\\0005_00_03_03_491.bmp\r\n0005\\0005_00_03_03_497.bmp\r\n0005\\0005_00_03_03_53.bmp\r\n0005\\0005_00_03_03_59.bmp\r\n0005\\0005_00_03_03_65.bmp\r\n0005\\0005_00_03_03_70.bmp\r\n0005\\0005_00_03_03_76.bmp\r\n0005\\0005_00_03_03_81.bmp\r\n0005\\0005_00_03_03_88.bmp\r\n0005\\0005_00_03_03_99.bmp\r\n0005\\0005_00_04_03_0.bmp\r\n0005\\0005_00_04_03_103.bmp\r\n0005\\0005_00_04_03_109.bmp\r\n0005\\0005_00_04_03_114.bmp\r\n0005\\0005_00_04_03_120.bmp\r\n0005\\0005_00_04_03_126.bmp\r\n0005\\0005_00_04_03_132.bmp\r\n0005\\0005_00_04_03_138.bmp\r\n0005\\0005_00_04_03_145.bmp\r\n0005\\0005_00_04_03_151.bmp\r\n0005\\0005_00_04_03_160.bmp\r\n0005\\0005_00_04_03_169.bmp\r\n0005\\0005_00_04_03_174.bmp\r\n0005\\0005_00_04_03_180.bmp\r\n0005\\0005_00_04_03_187.bmp\r\n0005\\0005_00_04_03_193.bmp\r\n0005\\0005_00_04_03_199.bmp\r\n0005\\0005_00_04_03_203.bmp\r\n0005\\0005_00_04_03_209.bmp\r\n0005\\0005_00_04_03_214.bmp\r\n0005\\0005_00_04_03_22.bmp\r\n0005\\0005_00_04_03_226.bmp\r\n0005\\0005_00_04_03_231.bmp\r\n0005\\0005_00_04_03_237.bmp\r\n0005\\0005_00_04_03_242.bmp\r\n0005\\0005_00_04_03_248.bmp\r\n0005\\0005_00_04_03_253.bmp\r\n0005\\0005_00_04_03_259.bmp\r\n0005\\0005_00_04_03_264.bmp\r\n0005\\0005_00_04_03_27.bmp\r\n0005\\0005_00_04_03_275.bmp\r\n0005\\0005_00_04_03_280.bmp\r\n0005\\0005_00_04_03_286.bmp\r\n0005\\0005_00_04_03_292.bmp\r\n0005\\0005_00_04_03_298.bmp\r\n0005\\0005_00_04_03_302.bmp\r\n0005\\0005_00_04_03_308.bmp\r\n0005\\0005_00_04_03_313.bmp\r\n0005\\0005_00_04_03_321.bmp\r\n0005\\0005_00_04_03_329.bmp\r\n0005\\0005_00_04_03_334.bmp\r\n0005\\0005_00_04_03_34.bmp\r\n0005\\0005_00_04_03_345.bmp\r\n0005\\0005_00_04_03_355.bmp\r\n0005\\0005_00_04_03_372.bmp\r\n0005\\0005_00_04_03_378.bmp\r\n0005\\0005_00_04_03_384.bmp\r\n0005\\0005_00_04_03_39.bmp\r\n0005\\0005_00_04_03_399.bmp\r\n0005\\0005_00_04_03_403.bmp\r\n0005\\0005_00_04_03_409.bmp\r\n0005\\0005_00_04_03_414.bmp\r\n0005\\0005_00_04_03_42.bmp\r\n0005\\0005_00_04_03_425.bmp\r\n0005\\0005_00_04_03_430.bmp\r\n0005\\0005_00_04_03_436.bmp\r\n0005\\0005_00_04_03_441.bmp\r\n0005\\0005_00_04_03_449.bmp\r\n0005\\0005_00_04_03_456.bmp\r\n0005\\0005_00_04_03_464.bmp\r\n0005\\0005_00_04_03_470.bmp\r\n0005\\0005_00_04_03_476.bmp\r\n0005\\0005_00_04_03_481.bmp\r\n0005\\0005_00_04_03_488.bmp\r\n0005\\0005_00_04_03_493.bmp\r\n0005\\0005_00_04_03_5.bmp\r\n0005\\0005_00_04_03_55.bmp\r\n0005\\0005_00_04_03_60.bmp\r\n0005\\0005_00_04_03_7.bmp\r\n0005\\0005_00_04_03_82.bmp\r\n0005\\0005_00_04_03_88.bmp\r\n0005\\0005_00_04_03_93.bmp\r\n0005\\0005_00_04_03_99.bmp\r\n0005\\0005_00_01_03_0.bmp\r\n0005\\0005_00_01_03_104.bmp\r\n0005\\0005_00_01_03_11.bmp\r\n0005\\0005_00_01_03_115.bmp\r\n0005\\0005_00_01_03_120.bmp\r\n0005\\0005_00_01_03_126.bmp\r\n0005\\0005_00_01_03_131.bmp\r\n0005\\0005_00_01_03_137.bmp\r\n0005\\0005_00_01_03_142.bmp\r\n0005\\0005_00_01_03_148.bmp\r\n0005\\0005_00_01_03_153.bmp\r\n0005\\0005_00_01_03_159.bmp\r\n0005\\0005_00_01_03_164.bmp\r\n0005\\0005_00_01_03_17.bmp\r\n0005\\0005_00_01_03_175.bmp\r\n0005\\0005_00_01_03_180.bmp\r\n0005\\0005_00_01_03_186.bmp\r\n0005\\0005_00_01_03_192.bmp\r\n0005\\0005_00_01_03_198.bmp\r\n0005\\0005_00_01_03_202.bmp\r\n0005\\0005_00_01_03_208.bmp\r\n0005\\0005_00_01_03_213.bmp\r\n0005\\0005_00_01_03_219.bmp\r\n0005\\0005_00_01_03_224.bmp\r\n0005\\0005_00_01_03_23.bmp\r\n0005\\0005_00_01_03_235.bmp\r\n0005\\0005_00_01_03_240.bmp\r\n0005\\0005_00_01_03_246.bmp\r\n0005\\0005_00_01_03_251.bmp\r\n0005\\0005_00_01_03_257.bmp\r\n0005\\0005_00_01_03_262.bmp\r\n0005\\0005_00_01_03_268.bmp\r\n0005\\0005_00_01_03_273.bmp\r\n0005\\0005_00_01_03_279.bmp\r\n0005\\0005_00_01_03_284.bmp\r\n0005\\0005_00_01_03_29.bmp\r\n0005\\0005_00_01_03_295.bmp\r\n0005\\0005_00_01_03_30.bmp\r\n0005\\0005_00_01_03_305.bmp\r\n0005\\0005_00_01_03_310.bmp\r\n0005\\0005_00_01_03_316.bmp\r\n0005\\0005_00_01_03_321.bmp\r\n0005\\0005_00_01_03_327.bmp\r\n0005\\0005_00_01_03_332.bmp\r\n0005\\0005_00_01_03_338.bmp\r\n0005\\0005_00_01_03_343.bmp\r\n0005\\0005_00_01_03_349.bmp\r\n0005\\0005_00_01_03_354.bmp\r\n0005\\0005_00_01_03_36.bmp\r\n0005\\0005_00_01_03_365.bmp\r\n0005\\0005_00_01_03_370.bmp\r\n0005\\0005_00_01_03_376.bmp\r\n0005\\0005_00_01_03_381.bmp\r\n0005\\0005_00_01_03_387.bmp\r\n0005\\0005_00_01_03_392.bmp\r\n0005\\0005_00_01_03_398.bmp\r\n0005\\0005_00_01_03_402.bmp\r\n0005\\0005_00_01_03_408.bmp\r\n0005\\0005_00_01_03_413.bmp\r\n0005\\0005_00_01_03_419.bmp\r\n0005\\0005_00_01_03_424.bmp\r\n0005\\0005_00_01_03_43.bmp\r\n0005\\0005_00_01_03_435.bmp\r\n0005\\0005_00_01_03_440.bmp\r\n0005\\0005_00_01_03_446.bmp\r\n0005\\0005_00_01_03_451.bmp\r\n0005\\0005_00_01_03_457.bmp\r\n0005\\0005_00_01_03_462.bmp\r\n0005\\0005_00_01_03_468.bmp\r\n0005\\0005_00_01_03_473.bmp\r\n0005\\0005_00_01_03_479.bmp\r\n0005\\0005_00_01_03_484.bmp\r\n0005\\0005_00_01_03_49.bmp\r\n0005\\0005_00_01_03_495.bmp\r\n0005\\0005_00_01_03_50.bmp\r\n0005\\0005_00_01_03_56.bmp\r\n0005\\0005_00_01_03_61.bmp\r\n0005\\0005_00_01_03_67.bmp\r\n0005\\0005_00_01_03_72.bmp\r\n0005\\0005_00_01_03_78.bmp\r\n0005\\0005_00_01_03_83.bmp\r\n0005\\0005_00_01_03_89.bmp\r\n0005\\0005_00_01_03_94.bmp\r\n0005\\0005_00_02_03_0.bmp\r\n0005\\0005_00_02_03_103.bmp\r\n0005\\0005_00_02_03_109.bmp\r\n0005\\0005_00_02_03_114.bmp\r\n0005\\0005_00_02_03_12.bmp\r\n0005\\0005_00_02_03_125.bmp\r\n0005\\0005_00_02_03_130.bmp\r\n0005\\0005_00_02_03_136.bmp\r\n0005\\0005_00_02_03_141.bmp\r\n0005\\0005_00_02_03_147.bmp\r\n0005\\0005_00_02_03_152.bmp\r\n0005\\0005_00_02_03_158.bmp\r\n0005\\0005_00_02_03_163.bmp\r\n0005\\0005_00_02_03_169.bmp\r\n0005\\0005_00_02_03_174.bmp\r\n0005\\0005_00_02_03_18.bmp\r\n0005\\0005_00_02_03_185.bmp\r\n0005\\0005_00_02_03_190.bmp\r\n0005\\0005_00_02_03_196.bmp\r\n0005\\0005_00_02_03_200.bmp\r\n0005\\0005_00_02_03_206.bmp\r\n0005\\0005_00_02_03_211.bmp\r\n0005\\0005_00_02_03_217.bmp\r\n0005\\0005_00_02_03_222.bmp\r\n0005\\0005_00_02_03_228.bmp\r\n0005\\0005_00_02_03_233.bmp\r\n0005\\0005_00_02_03_239.bmp\r\n0005\\0005_00_02_03_244.bmp\r\n0005\\0005_00_02_03_25.bmp\r\n0005\\0005_00_02_03_255.bmp\r\n0005\\0005_00_02_03_260.bmp\r\n0005\\0005_00_02_03_266.bmp\r\n0005\\0005_00_02_03_271.bmp\r\n0005\\0005_00_02_03_277.bmp\r\n0005\\0005_00_02_03_282.bmp\r\n0005\\0005_00_02_03_288.bmp\r\n0005\\0005_00_02_03_293.bmp\r\n0005\\0005_00_02_03_299.bmp\r\n0005\\0005_00_02_03_303.bmp\r\n0005\\0005_00_02_03_309.bmp\r\n0005\\0005_00_02_03_314.bmp\r\n0005\\0005_00_02_03_32.bmp\r\n0005\\0005_00_02_03_325.bmp\r\n0005\\0005_00_02_03_330.bmp\r\n0005\\0005_00_02_03_336.bmp\r\n0005\\0005_00_02_03_341.bmp\r\n0005\\0005_00_02_03_347.bmp\r\n0005\\0005_00_02_03_352.bmp\r\n0005\\0005_00_02_03_358.bmp\r\n0005\\0005_00_02_03_363.bmp\r\n0005\\0005_00_02_03_369.bmp\r\n0005\\0005_00_02_03_374.bmp\r\n0005\\0005_00_02_03_38.bmp\r\n0005\\0005_00_02_03_385.bmp\r\n0005\\0005_00_02_03_390.bmp\r\n0005\\0005_00_02_03_396.bmp\r\n0005\\0005_00_02_03_400.bmp\r\n0005\\0005_00_02_03_406.bmp\r\n0005\\0005_00_02_03_411.bmp\r\n0005\\0005_00_02_03_417.bmp\r\n0005\\0005_00_02_03_422.bmp\r\n0005\\0005_00_02_03_428.bmp\r\n0005\\0005_00_02_03_433.bmp\r\n0005\\0005_00_02_03_439.bmp\r\n0005\\0005_00_02_03_444.bmp\r\n0005\\0005_00_02_03_45.bmp\r\n0005\\0005_00_02_03_455.bmp\r\n0005\\0005_00_02_03_460.bmp\r\n0005\\0005_00_02_03_466.bmp\r\n0005\\0005_00_02_03_471.bmp\r\n0005\\0005_00_02_03_477.bmp\r\n0005\\0005_00_02_03_482.bmp\r\n0005\\0005_00_02_03_488.bmp\r\n0005\\0005_00_02_03_493.bmp\r\n0005\\0005_00_02_03_499.bmp\r\n0005\\0005_00_02_03_54.bmp\r\n0005\\0005_00_02_03_6.bmp\r\n0005\\0005_00_02_03_65.bmp\r\n0005\\0005_00_02_03_70.bmp\r\n0005\\0005_00_02_03_76.bmp\r\n0005\\0005_00_02_03_81.bmp\r\n0005\\0005_00_02_03_87.bmp\r\n0005\\0005_00_02_03_92.bmp\r\n0005\\0005_00_02_03_99.bmp\r\n0005\\0005_00_08_03_0.bmp\r\n0005\\0005_00_08_03_103.bmp\r\n0005\\0005_00_08_03_109.bmp\r\n0005\\0005_00_08_03_114.bmp\r\n0005\\0005_00_08_03_12.bmp\r\n0005\\0005_00_08_03_125.bmp\r\n0005\\0005_00_08_03_130.bmp\r\n0005\\0005_00_08_03_136.bmp\r\n0005\\0005_00_08_03_141.bmp\r\n0005\\0005_00_08_03_147.bmp\r\n0005\\0005_00_08_03_152.bmp\r\n0005\\0005_00_08_03_158.bmp\r\n0005\\0005_00_08_03_163.bmp\r\n0005\\0005_00_08_03_169.bmp\r\n0005\\0005_00_08_03_174.bmp\r\n0005\\0005_00_08_03_18.bmp\r\n0005\\0005_00_08_03_185.bmp\r\n0005\\0005_00_08_03_190.bmp\r\n0005\\0005_00_08_03_196.bmp\r\n0005\\0005_00_08_03_200.bmp\r\n0005\\0005_00_08_03_206.bmp\r\n0005\\0005_00_08_03_211.bmp\r\n0005\\0005_00_08_03_217.bmp\r\n0005\\0005_00_08_03_222.bmp\r\n0005\\0005_00_08_03_228.bmp\r\n0005\\0005_00_08_03_233.bmp\r\n0005\\0005_00_08_03_239.bmp\r\n0005\\0005_00_08_03_244.bmp\r\n0005\\0005_00_08_03_25.bmp\r\n0005\\0005_00_08_03_255.bmp\r\n0005\\0005_00_08_03_260.bmp\r\n0005\\0005_00_08_03_266.bmp\r\n0005\\0005_00_08_03_271.bmp\r\n0005\\0005_00_08_03_277.bmp\r\n0005\\0005_00_08_03_282.bmp\r\n0005\\0005_00_08_03_288.bmp\r\n0005\\0005_00_08_03_293.bmp\r\n0005\\0005_00_08_03_299.bmp\r\n0005\\0005_00_08_03_303.bmp\r\n0005\\0005_00_08_03_309.bmp\r\n0005\\0005_00_08_03_314.bmp\r\n0005\\0005_00_08_03_32.bmp\r\n0005\\0005_00_08_03_325.bmp\r\n0005\\0005_00_08_03_330.bmp\r\n0005\\0005_00_08_03_336.bmp\r\n0005\\0005_00_08_03_341.bmp\r\n0005\\0005_00_08_03_347.bmp\r\n0005\\0005_00_08_03_352.bmp\r\n0005\\0005_00_08_03_358.bmp\r\n0005\\0005_00_08_03_363.bmp\r\n0005\\0005_00_08_03_369.bmp\r\n0005\\0005_00_08_03_374.bmp\r\n0005\\0005_00_08_03_38.bmp\r\n0005\\0005_00_08_03_385.bmp\r\n0005\\0005_00_08_03_390.bmp\r\n0005\\0005_00_08_03_396.bmp\r\n0005\\0005_00_08_03_400.bmp\r\n0005\\0005_00_08_03_406.bmp\r\n0005\\0005_00_08_03_411.bmp\r\n0005\\0005_00_08_03_417.bmp\r\n0005\\0005_00_08_03_422.bmp\r\n0005\\0005_00_08_03_428.bmp\r\n0005\\0005_00_08_03_433.bmp\r\n0005\\0005_00_08_03_439.bmp\r\n0005\\0005_00_08_03_444.bmp\r\n0005\\0005_00_08_03_45.bmp\r\n0005\\0005_00_08_03_455.bmp\r\n0005\\0005_00_08_03_460.bmp\r\n0005\\0005_00_08_03_466.bmp\r\n0005\\0005_00_08_03_471.bmp\r\n0005\\0005_00_08_03_477.bmp\r\n0005\\0005_00_08_03_482.bmp\r\n0005\\0005_00_08_03_488.bmp\r\n0005\\0005_00_08_03_493.bmp\r\n0005\\0005_00_08_03_499.bmp\r\n0005\\0005_00_08_03_54.bmp\r\n0005\\0005_00_08_03_6.bmp\r\n0005\\0005_00_08_03_65.bmp\r\n0005\\0005_00_08_03_70.bmp\r\n0005\\0005_00_08_03_76.bmp\r\n0005\\0005_00_08_03_81.bmp\r\n0005\\0005_00_08_03_87.bmp\r\n0005\\0005_00_08_03_92.bmp\r\n0005\\0005_00_08_03_98.bmp\r\n0006\\0006_00_03_03_0.bmp\r\n0006\\0006_00_03_03_104.bmp\r\n0006\\0006_00_03_03_11.bmp\r\n0006\\0006_00_03_03_117.bmp\r\n0006\\0006_00_03_03_123.bmp\r\n0006\\0006_00_03_03_13.bmp\r\n0006\\0006_00_03_03_135.bmp\r\n0006\\0006_00_03_03_140.bmp\r\n0006\\0006_00_03_03_147.bmp\r\n0006\\0006_00_03_03_154.bmp\r\n0006\\0006_00_03_03_18.bmp\r\n0006\\0006_00_03_03_188.bmp\r\n0006\\0006_00_03_03_194.bmp\r\n0006\\0006_00_03_03_2.bmp\r\n0006\\0006_00_03_03_205.bmp\r\n0006\\0006_00_03_03_214.bmp\r\n0006\\0006_00_03_03_220.bmp\r\n0006\\0006_00_03_03_226.bmp\r\n0006\\0006_00_03_03_235.bmp\r\n0006\\0006_00_03_03_243.bmp\r\n0006\\0006_00_03_03_255.bmp\r\n0006\\0006_00_03_03_260.bmp\r\n0006\\0006_00_03_03_268.bmp\r\n0006\\0006_00_03_03_273.bmp\r\n0006\\0006_00_03_03_280.bmp\r\n0006\\0006_00_03_03_296.bmp\r\n0006\\0006_00_03_03_307.bmp\r\n0006\\0006_00_03_03_315.bmp\r\n0006\\0006_00_03_03_321.bmp\r\n0006\\0006_00_03_03_335.bmp\r\n0006\\0006_00_03_03_342.bmp\r\n0006\\0006_00_03_03_348.bmp\r\n0006\\0006_00_03_03_354.bmp\r\n0006\\0006_00_03_03_362.bmp\r\n0006\\0006_00_03_03_380.bmp\r\n0006\\0006_00_03_03_39.bmp\r\n0006\\0006_00_03_03_40.bmp\r\n0006\\0006_00_03_03_416.bmp\r\n0006\\0006_00_03_03_428.bmp\r\n0006\\0006_00_03_03_435.bmp\r\n0006\\0006_00_03_03_442.bmp\r\n0006\\0006_00_03_03_451.bmp\r\n0006\\0006_00_03_03_457.bmp\r\n0006\\0006_00_03_03_463.bmp\r\n0006\\0006_00_03_03_470.bmp\r\n0006\\0006_00_03_03_478.bmp\r\n0006\\0006_00_03_03_486.bmp\r\n0006\\0006_00_03_03_492.bmp\r\n0006\\0006_00_03_03_499.bmp\r\n0006\\0006_00_03_03_56.bmp\r\n0006\\0006_00_03_03_61.bmp\r\n0006\\0006_00_03_03_68.bmp\r\n0006\\0006_00_03_03_74.bmp\r\n0006\\0006_00_03_03_80.bmp\r\n0006\\0006_00_03_03_87.bmp\r\n0006\\0006_00_03_03_94.bmp\r\n0006\\0006_00_04_03_10.bmp\r\n0006\\0006_00_04_03_107.bmp\r\n0006\\0006_00_04_03_113.bmp\r\n0006\\0006_00_04_03_13.bmp\r\n0006\\0006_00_04_03_135.bmp\r\n0006\\0006_00_04_03_144.bmp\r\n0006\\0006_00_04_03_153.bmp\r\n0006\\0006_00_04_03_160.bmp\r\n0006\\0006_00_04_03_170.bmp\r\n0006\\0006_00_04_03_178.bmp\r\n0006\\0006_00_04_03_186.bmp\r\n0006\\0006_00_04_03_193.bmp\r\n0006\\0006_00_04_03_199.bmp\r\n0006\\0006_00_04_03_208.bmp\r\n0006\\0006_00_04_03_216.bmp\r\n0006\\0006_00_04_03_23.bmp\r\n0006\\0006_00_04_03_237.bmp\r\n0006\\0006_00_04_03_242.bmp\r\n0006\\0006_00_04_03_248.bmp\r\n0006\\0006_00_04_03_256.bmp\r\n0006\\0006_00_04_03_270.bmp\r\n0006\\0006_00_04_03_28.bmp\r\n0006\\0006_00_04_03_289.bmp\r\n0006\\0006_00_04_03_295.bmp\r\n0006\\0006_00_04_03_304.bmp\r\n0006\\0006_00_04_03_311.bmp\r\n0006\\0006_00_04_03_319.bmp\r\n0006\\0006_00_04_03_325.bmp\r\n0006\\0006_00_04_03_333.bmp\r\n0006\\0006_00_04_03_343.bmp\r\n0006\\0006_00_04_03_351.bmp\r\n0006\\0006_00_04_03_362.bmp\r\n0006\\0006_00_04_03_369.bmp\r\n0006\\0006_00_04_03_380.bmp\r\n0006\\0006_00_04_03_389.bmp\r\n0006\\0006_00_04_03_400.bmp\r\n0006\\0006_00_04_03_412.bmp\r\n0006\\0006_00_04_03_426.bmp\r\n0006\\0006_00_04_03_434.bmp\r\n0006\\0006_00_04_03_440.bmp\r\n0006\\0006_00_04_03_451.bmp\r\n0006\\0006_00_04_03_464.bmp\r\n0006\\0006_00_04_03_481.bmp\r\n0006\\0006_00_04_03_492.bmp\r\n0006\\0006_00_04_03_52.bmp\r\n0006\\0006_00_04_03_64.bmp\r\n0006\\0006_00_04_03_70.bmp\r\n0006\\0006_00_04_03_78.bmp\r\n0006\\0006_00_04_03_84.bmp\r\n0006\\0006_00_04_03_9.bmp\r\n0006\\0006_00_04_03_97.bmp\r\n0006\\0006_00_01_03_0.bmp\r\n0006\\0006_00_01_03_11.bmp\r\n0006\\0006_00_01_03_115.bmp\r\n0006\\0006_00_01_03_120.bmp\r\n0006\\0006_00_01_03_127.bmp\r\n0006\\0006_00_01_03_132.bmp\r\n0006\\0006_00_01_03_139.bmp\r\n0006\\0006_00_01_03_144.bmp\r\n0006\\0006_00_01_03_151.bmp\r\n0006\\0006_00_01_03_159.bmp\r\n0006\\0006_00_01_03_164.bmp\r\n0006\\0006_00_01_03_170.bmp\r\n0006\\0006_00_01_03_178.bmp\r\n0006\\0006_00_01_03_189.bmp\r\n0006\\0006_00_01_03_2.bmp\r\n0006\\0006_00_01_03_204.bmp\r\n0006\\0006_00_01_03_211.bmp\r\n0006\\0006_00_01_03_217.bmp\r\n0006\\0006_00_01_03_224.bmp\r\n0006\\0006_00_01_03_232.bmp\r\n0006\\0006_00_01_03_240.bmp\r\n0006\\0006_00_01_03_25.bmp\r\n0006\\0006_00_01_03_257.bmp\r\n0006\\0006_00_01_03_265.bmp\r\n0006\\0006_00_01_03_270.bmp\r\n0006\\0006_00_01_03_278.bmp\r\n0006\\0006_00_01_03_284.bmp\r\n0006\\0006_00_01_03_292.bmp\r\n0006\\0006_00_01_03_303.bmp\r\n0006\\0006_00_01_03_310.bmp\r\n0006\\0006_00_01_03_316.bmp\r\n0006\\0006_00_01_03_321.bmp\r\n0006\\0006_00_01_03_331.bmp\r\n0006\\0006_00_01_03_343.bmp\r\n0006\\0006_00_01_03_354.bmp\r\n0006\\0006_00_01_03_362.bmp\r\n0006\\0006_00_01_03_369.bmp\r\n0006\\0006_00_01_03_381.bmp\r\n0006\\0006_00_01_03_388.bmp\r\n0006\\0006_00_01_03_396.bmp\r\n0006\\0006_00_01_03_401.bmp\r\n0006\\0006_00_01_03_41.bmp\r\n0006\\0006_00_01_03_416.bmp\r\n0006\\0006_00_01_03_423.bmp\r\n0006\\0006_00_01_03_434.bmp\r\n0006\\0006_00_01_03_442.bmp\r\n0006\\0006_00_01_03_450.bmp\r\n0006\\0006_00_01_03_458.bmp\r\n0006\\0006_00_01_03_467.bmp\r\n0006\\0006_00_01_03_474.bmp\r\n0006\\0006_00_01_03_481.bmp\r\n0006\\0006_00_01_03_488.bmp\r\n0006\\0006_00_01_03_497.bmp\r\n0006\\0006_00_01_03_55.bmp\r\n0006\\0006_00_01_03_69.bmp\r\n0006\\0006_00_01_03_83.bmp\r\n0006\\0006_00_01_03_89.bmp\r\n0006\\0006_00_01_03_94.bmp\r\n0006\\0006_00_02_03_1.bmp\r\n0006\\0006_00_02_03_108.bmp\r\n0006\\0006_00_02_03_13.bmp\r\n0006\\0006_00_02_03_166.bmp\r\n0006\\0006_00_02_03_178.bmp\r\n0006\\0006_00_02_03_19.bmp\r\n0006\\0006_00_02_03_203.bmp\r\n0006\\0006_00_02_03_214.bmp\r\n0006\\0006_00_02_03_225.bmp\r\n0006\\0006_00_02_03_230.bmp\r\n0006\\0006_00_02_03_237.bmp\r\n0006\\0006_00_02_03_262.bmp\r\n0006\\0006_00_02_03_269.bmp\r\n0006\\0006_00_02_03_277.bmp\r\n0006\\0006_00_02_03_287.bmp\r\n0006\\0006_00_02_03_299.bmp\r\n0006\\0006_00_02_03_309.bmp\r\n0006\\0006_00_02_03_317.bmp\r\n0006\\0006_00_02_03_33.bmp\r\n0006\\0006_00_02_03_343.bmp\r\n0006\\0006_00_02_03_357.bmp\r\n0006\\0006_00_02_03_37.bmp\r\n0006\\0006_00_02_03_378.bmp\r\n0006\\0006_00_02_03_387.bmp\r\n0006\\0006_00_02_03_399.bmp\r\n0006\\0006_00_02_03_41.bmp\r\n0006\\0006_00_02_03_421.bmp\r\n0006\\0006_00_02_03_427.bmp\r\n0006\\0006_00_02_03_434.bmp\r\n0006\\0006_00_02_03_44.bmp\r\n0006\\0006_00_02_03_446.bmp\r\n0006\\0006_00_02_03_451.bmp\r\n0006\\0006_00_02_03_462.bmp\r\n0006\\0006_00_02_03_471.bmp\r\n0006\\0006_00_02_03_485.bmp\r\n0006\\0006_00_02_03_495.bmp\r\n0006\\0006_00_02_03_52.bmp\r\n0006\\0006_00_02_03_7.bmp\r\n0006\\0006_00_02_03_82.bmp\r\n0006\\0006_00_02_03_91.bmp\r\n0006\\0006_00_02_03_97.bmp\r\n0006\\0006_00_08_03_0.bmp\r\n0006\\0006_00_08_03_104.bmp\r\n0006\\0006_00_08_03_11.bmp\r\n0006\\0006_00_08_03_115.bmp\r\n0006\\0006_00_08_03_120.bmp\r\n0006\\0006_00_08_03_126.bmp\r\n0006\\0006_00_08_03_132.bmp\r\n0006\\0006_00_08_03_138.bmp\r\n0006\\0006_00_08_03_143.bmp\r\n0006\\0006_00_08_03_149.bmp\r\n0006\\0006_00_08_03_154.bmp\r\n0006\\0006_00_08_03_16.bmp\r\n0006\\0006_00_08_03_165.bmp\r\n0006\\0006_00_08_03_170.bmp\r\n0006\\0006_00_08_03_176.bmp\r\n0006\\0006_00_08_03_181.bmp\r\n0006\\0006_00_08_03_187.bmp\r\n0006\\0006_00_08_03_192.bmp\r\n0006\\0006_00_08_03_198.bmp\r\n0006\\0006_00_08_03_204.bmp\r\n0006\\0006_00_08_03_210.bmp\r\n0006\\0006_00_08_03_216.bmp\r\n0006\\0006_00_08_03_221.bmp\r\n0006\\0006_00_08_03_227.bmp\r\n0006\\0006_00_08_03_232.bmp\r\n0006\\0006_00_08_03_238.bmp\r\n0006\\0006_00_08_03_243.bmp\r\n0006\\0006_00_08_03_249.bmp\r\n0006\\0006_00_08_03_255.bmp\r\n0006\\0006_00_08_03_260.bmp\r\n0006\\0006_00_08_03_266.bmp\r\n0006\\0006_00_08_03_272.bmp\r\n0006\\0006_00_08_03_28.bmp\r\n0006\\0006_00_08_03_287.bmp\r\n0006\\0006_00_08_03_296.bmp\r\n0006\\0006_00_08_03_300.bmp\r\n0006\\0006_00_08_03_306.bmp\r\n0006\\0006_00_08_03_313.bmp\r\n0006\\0006_00_08_03_319.bmp\r\n0006\\0006_00_08_03_324.bmp\r\n0006\\0006_00_08_03_331.bmp\r\n0006\\0006_00_08_03_337.bmp\r\n0006\\0006_00_08_03_342.bmp\r\n0006\\0006_00_08_03_348.bmp\r\n0006\\0006_00_08_03_353.bmp\r\n0006\\0006_00_08_03_363.bmp\r\n0006\\0006_00_08_03_37.bmp\r\n0006\\0006_00_08_03_378.bmp\r\n0006\\0006_00_08_03_383.bmp\r\n0006\\0006_00_08_03_4.bmp\r\n0006\\0006_00_08_03_405.bmp\r\n0006\\0006_00_08_03_414.bmp\r\n0006\\0006_00_08_03_420.bmp\r\n0006\\0006_00_08_03_427.bmp\r\n0006\\0006_00_08_03_434.bmp\r\n0006\\0006_00_08_03_447.bmp\r\n0006\\0006_00_08_03_455.bmp\r\n0006\\0006_00_08_03_462.bmp\r\n0006\\0006_00_08_03_470.bmp\r\n0006\\0006_00_08_03_477.bmp\r\n0006\\0006_00_08_03_485.bmp\r\n0006\\0006_00_08_03_492.bmp\r\n0006\\0006_00_08_03_5.bmp\r\n0006\\0006_00_08_03_56.bmp\r\n0006\\0006_00_08_03_61.bmp\r\n0006\\0006_00_08_03_68.bmp\r\n0006\\0006_00_08_03_73.bmp\r\n0006\\0006_00_08_03_82.bmp\r\n0006\\0006_00_08_03_88.bmp\r\n0006\\0006_00_08_03_93.bmp\r\n0006\\0006_00_08_03_99.bmp\r\n0007\\0007_01_03_03_0.bmp\r\n0007\\0007_01_03_03_114.bmp\r\n0007\\0007_01_03_03_12.bmp\r\n0007\\0007_01_03_03_125.bmp\r\n0007\\0007_01_03_03_130.bmp\r\n0007\\0007_01_03_03_136.bmp\r\n0007\\0007_01_03_03_141.bmp\r\n0007\\0007_01_03_03_147.bmp\r\n0007\\0007_01_03_03_152.bmp\r\n0007\\0007_01_03_03_158.bmp\r\n0007\\0007_01_03_03_163.bmp\r\n0007\\0007_01_03_03_169.bmp\r\n0007\\0007_01_03_03_174.bmp\r\n0007\\0007_01_03_03_18.bmp\r\n0007\\0007_01_03_03_185.bmp\r\n0007\\0007_01_03_03_190.bmp\r\n0007\\0007_01_03_03_196.bmp\r\n0007\\0007_01_03_03_200.bmp\r\n0007\\0007_01_03_03_206.bmp\r\n0007\\0007_01_03_03_211.bmp\r\n0007\\0007_01_03_03_217.bmp\r\n0007\\0007_01_03_03_222.bmp\r\n0007\\0007_01_03_03_228.bmp\r\n0007\\0007_01_03_03_233.bmp\r\n0007\\0007_01_03_03_239.bmp\r\n0007\\0007_01_03_03_244.bmp\r\n0007\\0007_01_03_03_25.bmp\r\n0007\\0007_01_03_03_255.bmp\r\n0007\\0007_01_03_03_260.bmp\r\n0007\\0007_01_03_03_266.bmp\r\n0007\\0007_01_03_03_271.bmp\r\n0007\\0007_01_03_03_277.bmp\r\n0007\\0007_01_03_03_282.bmp\r\n0007\\0007_01_03_03_288.bmp\r\n0007\\0007_01_03_03_293.bmp\r\n0007\\0007_01_03_03_299.bmp\r\n0007\\0007_01_03_03_303.bmp\r\n0007\\0007_01_03_03_309.bmp\r\n0007\\0007_01_03_03_314.bmp\r\n0007\\0007_01_03_03_32.bmp\r\n0007\\0007_01_03_03_325.bmp\r\n0007\\0007_01_03_03_330.bmp\r\n0007\\0007_01_03_03_336.bmp\r\n0007\\0007_01_03_03_341.bmp\r\n0007\\0007_01_03_03_347.bmp\r\n0007\\0007_01_03_03_352.bmp\r\n0007\\0007_01_03_03_358.bmp\r\n0007\\0007_01_03_03_363.bmp\r\n0007\\0007_01_03_03_369.bmp\r\n0007\\0007_01_03_03_374.bmp\r\n0007\\0007_01_03_03_38.bmp\r\n0007\\0007_01_03_03_385.bmp\r\n0007\\0007_01_03_03_390.bmp\r\n0007\\0007_01_03_03_396.bmp\r\n0007\\0007_01_03_03_400.bmp\r\n0007\\0007_01_03_03_406.bmp\r\n0007\\0007_01_03_03_411.bmp\r\n0007\\0007_01_03_03_417.bmp\r\n0007\\0007_01_03_03_422.bmp\r\n0007\\0007_01_03_03_428.bmp\r\n0007\\0007_01_03_03_433.bmp\r\n0007\\0007_01_03_03_439.bmp\r\n0007\\0007_01_03_03_444.bmp\r\n0007\\0007_01_03_03_45.bmp\r\n0007\\0007_01_03_03_455.bmp\r\n0007\\0007_01_03_03_460.bmp\r\n0007\\0007_01_03_03_466.bmp\r\n0007\\0007_01_03_03_471.bmp\r\n0007\\0007_01_03_03_477.bmp\r\n0007\\0007_01_03_03_482.bmp\r\n0007\\0007_01_03_03_488.bmp\r\n0007\\0007_01_03_03_493.bmp\r\n0007\\0007_01_03_03_499.bmp\r\n0007\\0007_01_03_03_54.bmp\r\n0007\\0007_01_03_03_6.bmp\r\n0007\\0007_01_03_03_65.bmp\r\n0007\\0007_01_03_03_70.bmp\r\n0007\\0007_01_03_03_76.bmp\r\n0007\\0007_01_03_03_81.bmp\r\n0007\\0007_01_03_03_87.bmp\r\n0007\\0007_01_03_03_99.bmp\r\n0007\\0007_01_04_03_1.bmp\r\n0007\\0007_01_04_03_104.bmp\r\n0007\\0007_01_04_03_11.bmp\r\n0007\\0007_01_04_03_115.bmp\r\n0007\\0007_01_04_03_120.bmp\r\n0007\\0007_01_04_03_126.bmp\r\n0007\\0007_01_04_03_131.bmp\r\n0007\\0007_01_04_03_137.bmp\r\n0007\\0007_01_04_03_142.bmp\r\n0007\\0007_01_04_03_148.bmp\r\n0007\\0007_01_04_03_153.bmp\r\n0007\\0007_01_04_03_159.bmp\r\n0007\\0007_01_04_03_164.bmp\r\n0007\\0007_01_04_03_17.bmp\r\n0007\\0007_01_04_03_175.bmp\r\n0007\\0007_01_04_03_180.bmp\r\n0007\\0007_01_04_03_187.bmp\r\n0007\\0007_01_04_03_192.bmp\r\n0007\\0007_01_04_03_198.bmp\r\n0007\\0007_01_04_03_202.bmp\r\n0007\\0007_01_04_03_209.bmp\r\n0007\\0007_01_04_03_214.bmp\r\n0007\\0007_01_04_03_22.bmp\r\n0007\\0007_01_04_03_225.bmp\r\n0007\\0007_01_04_03_230.bmp\r\n0007\\0007_01_04_03_236.bmp\r\n0007\\0007_01_04_03_241.bmp\r\n0007\\0007_01_04_03_247.bmp\r\n0007\\0007_01_04_03_252.bmp\r\n0007\\0007_01_04_03_259.bmp\r\n0007\\0007_01_04_03_265.bmp\r\n0007\\0007_01_04_03_270.bmp\r\n0007\\0007_01_04_03_276.bmp\r\n0007\\0007_01_04_03_281.bmp\r\n0007\\0007_01_04_03_288.bmp\r\n0007\\0007_01_04_03_293.bmp\r\n0007\\0007_01_04_03_299.bmp\r\n0007\\0007_01_04_03_304.bmp\r\n0007\\0007_01_04_03_31.bmp\r\n0007\\0007_01_04_03_316.bmp\r\n0007\\0007_01_04_03_34.bmp\r\n0007\\0007_01_04_03_347.bmp\r\n0007\\0007_01_04_03_352.bmp\r\n0007\\0007_01_04_03_358.bmp\r\n0007\\0007_01_04_03_363.bmp\r\n0007\\0007_01_04_03_369.bmp\r\n0007\\0007_01_04_03_375.bmp\r\n0007\\0007_01_04_03_380.bmp\r\n0007\\0007_01_04_03_386.bmp\r\n0007\\0007_01_04_03_391.bmp\r\n0007\\0007_01_04_03_397.bmp\r\n0007\\0007_01_04_03_401.bmp\r\n0007\\0007_01_04_03_407.bmp\r\n0007\\0007_01_04_03_412.bmp\r\n0007\\0007_01_04_03_418.bmp\r\n0007\\0007_01_04_03_423.bmp\r\n0007\\0007_01_04_03_429.bmp\r\n0007\\0007_01_04_03_434.bmp\r\n0007\\0007_01_04_03_440.bmp\r\n0007\\0007_01_04_03_446.bmp\r\n0007\\0007_01_04_03_451.bmp\r\n0007\\0007_01_04_03_458.bmp\r\n0007\\0007_01_04_03_463.bmp\r\n0007\\0007_01_04_03_469.bmp\r\n0007\\0007_01_04_03_474.bmp\r\n0007\\0007_01_04_03_48.bmp\r\n0007\\0007_01_04_03_485.bmp\r\n0007\\0007_01_04_03_491.bmp\r\n0007\\0007_01_04_03_497.bmp\r\n0007\\0007_01_04_03_52.bmp\r\n0007\\0007_01_04_03_58.bmp\r\n0007\\0007_01_04_03_63.bmp\r\n0007\\0007_01_04_03_69.bmp\r\n0007\\0007_01_04_03_74.bmp\r\n0007\\0007_01_04_03_8.bmp\r\n0007\\0007_01_04_03_87.bmp\r\n0007\\0007_01_04_03_92.bmp\r\n0007\\0007_01_04_03_98.bmp\r\n0007\\0007_01_01_03_0.bmp\r\n0007\\0007_01_01_03_103.bmp\r\n0007\\0007_01_01_03_109.bmp\r\n0007\\0007_01_01_03_114.bmp\r\n0007\\0007_01_01_03_12.bmp\r\n0007\\0007_01_01_03_125.bmp\r\n0007\\0007_01_01_03_130.bmp\r\n0007\\0007_01_01_03_136.bmp\r\n0007\\0007_01_01_03_141.bmp\r\n0007\\0007_01_01_03_147.bmp\r\n0007\\0007_01_01_03_152.bmp\r\n0007\\0007_01_01_03_158.bmp\r\n0007\\0007_01_01_03_163.bmp\r\n0007\\0007_01_01_03_169.bmp\r\n0007\\0007_01_01_03_174.bmp\r\n0007\\0007_01_01_03_18.bmp\r\n0007\\0007_01_01_03_185.bmp\r\n0007\\0007_01_01_03_190.bmp\r\n0007\\0007_01_01_03_196.bmp\r\n0007\\0007_01_01_03_200.bmp\r\n0007\\0007_01_01_03_206.bmp\r\n0007\\0007_01_01_03_211.bmp\r\n0007\\0007_01_01_03_217.bmp\r\n0007\\0007_01_01_03_222.bmp\r\n0007\\0007_01_01_03_228.bmp\r\n0007\\0007_01_01_03_233.bmp\r\n0007\\0007_01_01_03_239.bmp\r\n0007\\0007_01_01_03_244.bmp\r\n0007\\0007_01_01_03_25.bmp\r\n0007\\0007_01_01_03_255.bmp\r\n0007\\0007_01_01_03_260.bmp\r\n0007\\0007_01_01_03_266.bmp\r\n0007\\0007_01_01_03_271.bmp\r\n0007\\0007_01_01_03_277.bmp\r\n0007\\0007_01_01_03_282.bmp\r\n0007\\0007_01_01_03_288.bmp\r\n0007\\0007_01_01_03_293.bmp\r\n0007\\0007_01_01_03_30.bmp\r\n0007\\0007_01_01_03_305.bmp\r\n0007\\0007_01_01_03_311.bmp\r\n0007\\0007_01_01_03_317.bmp\r\n0007\\0007_01_01_03_322.bmp\r\n0007\\0007_01_01_03_328.bmp\r\n0007\\0007_01_01_03_333.bmp\r\n0007\\0007_01_01_03_339.bmp\r\n0007\\0007_01_01_03_344.bmp\r\n0007\\0007_01_01_03_35.bmp\r\n0007\\0007_01_01_03_355.bmp\r\n0007\\0007_01_01_03_360.bmp\r\n0007\\0007_01_01_03_366.bmp\r\n0007\\0007_01_01_03_371.bmp\r\n0007\\0007_01_01_03_377.bmp\r\n0007\\0007_01_01_03_382.bmp\r\n0007\\0007_01_01_03_388.bmp\r\n0007\\0007_01_01_03_393.bmp\r\n0007\\0007_01_01_03_399.bmp\r\n0007\\0007_01_01_03_403.bmp\r\n0007\\0007_01_01_03_409.bmp\r\n0007\\0007_01_01_03_414.bmp\r\n0007\\0007_01_01_03_42.bmp\r\n0007\\0007_01_01_03_425.bmp\r\n0007\\0007_01_01_03_430.bmp\r\n0007\\0007_01_01_03_436.bmp\r\n0007\\0007_01_01_03_441.bmp\r\n0007\\0007_01_01_03_447.bmp\r\n0007\\0007_01_01_03_452.bmp\r\n0007\\0007_01_01_03_458.bmp\r\n0007\\0007_01_01_03_463.bmp\r\n0007\\0007_01_01_03_469.bmp\r\n0007\\0007_01_01_03_474.bmp\r\n0007\\0007_01_01_03_48.bmp\r\n0007\\0007_01_01_03_485.bmp\r\n0007\\0007_01_01_03_490.bmp\r\n0007\\0007_01_01_03_496.bmp\r\n0007\\0007_01_01_03_51.bmp\r\n0007\\0007_01_01_03_57.bmp\r\n0007\\0007_01_01_03_62.bmp\r\n0007\\0007_01_01_03_68.bmp\r\n0007\\0007_01_01_03_73.bmp\r\n0007\\0007_01_01_03_79.bmp\r\n0007\\0007_01_01_03_84.bmp\r\n0007\\0007_01_01_03_9.bmp\r\n0007\\0007_01_01_03_95.bmp\r\n0007\\0007_01_02_03_0.bmp\r\n0007\\0007_01_02_03_103.bmp\r\n0007\\0007_01_02_03_11.bmp\r\n0007\\0007_01_02_03_115.bmp\r\n0007\\0007_01_02_03_120.bmp\r\n0007\\0007_01_02_03_126.bmp\r\n0007\\0007_01_02_03_131.bmp\r\n0007\\0007_01_02_03_137.bmp\r\n0007\\0007_01_02_03_142.bmp\r\n0007\\0007_01_02_03_148.bmp\r\n0007\\0007_01_02_03_154.bmp\r\n0007\\0007_01_02_03_16.bmp\r\n0007\\0007_01_02_03_165.bmp\r\n0007\\0007_01_02_03_170.bmp\r\n0007\\0007_01_02_03_176.bmp\r\n0007\\0007_01_02_03_181.bmp\r\n0007\\0007_01_02_03_187.bmp\r\n0007\\0007_01_02_03_192.bmp\r\n0007\\0007_01_02_03_198.bmp\r\n0007\\0007_01_02_03_202.bmp\r\n0007\\0007_01_02_03_208.bmp\r\n0007\\0007_01_02_03_214.bmp\r\n0007\\0007_01_02_03_22.bmp\r\n0007\\0007_01_02_03_226.bmp\r\n0007\\0007_01_02_03_231.bmp\r\n0007\\0007_01_02_03_237.bmp\r\n0007\\0007_01_02_03_242.bmp\r\n0007\\0007_01_02_03_248.bmp\r\n0007\\0007_01_02_03_253.bmp\r\n0007\\0007_01_02_03_259.bmp\r\n0007\\0007_01_02_03_264.bmp\r\n0007\\0007_01_02_03_27.bmp\r\n0007\\0007_01_02_03_275.bmp\r\n0007\\0007_01_02_03_282.bmp\r\n0007\\0007_01_02_03_288.bmp\r\n0007\\0007_01_02_03_294.bmp\r\n0007\\0007_01_02_03_30.bmp\r\n0007\\0007_01_02_03_305.bmp\r\n0007\\0007_01_02_03_310.bmp\r\n0007\\0007_01_02_03_316.bmp\r\n0007\\0007_01_02_03_321.bmp\r\n0007\\0007_01_02_03_327.bmp\r\n0007\\0007_01_02_03_332.bmp\r\n0007\\0007_01_02_03_338.bmp\r\n0007\\0007_01_02_03_343.bmp\r\n0007\\0007_01_02_03_349.bmp\r\n0007\\0007_01_02_03_354.bmp\r\n0007\\0007_01_02_03_36.bmp\r\n0007\\0007_01_02_03_365.bmp\r\n0007\\0007_01_02_03_370.bmp\r\n0007\\0007_01_02_03_376.bmp\r\n0007\\0007_01_02_03_381.bmp\r\n0007\\0007_01_02_03_387.bmp\r\n0007\\0007_01_02_03_392.bmp\r\n0007\\0007_01_02_03_398.bmp\r\n0007\\0007_01_02_03_402.bmp\r\n0007\\0007_01_02_03_408.bmp\r\n0007\\0007_01_02_03_413.bmp\r\n0007\\0007_01_02_03_419.bmp\r\n0007\\0007_01_02_03_424.bmp\r\n0007\\0007_01_02_03_43.bmp\r\n0007\\0007_01_02_03_435.bmp\r\n0007\\0007_01_02_03_440.bmp\r\n0007\\0007_01_02_03_446.bmp\r\n0007\\0007_01_02_03_451.bmp\r\n0007\\0007_01_02_03_457.bmp\r\n0007\\0007_01_02_03_462.bmp\r\n0007\\0007_01_02_03_468.bmp\r\n0007\\0007_01_02_03_473.bmp\r\n0007\\0007_01_02_03_479.bmp\r\n0007\\0007_01_02_03_486.bmp\r\n0007\\0007_01_02_03_491.bmp\r\n0007\\0007_01_02_03_497.bmp\r\n0007\\0007_01_02_03_52.bmp\r\n0007\\0007_01_02_03_58.bmp\r\n0007\\0007_01_02_03_63.bmp\r\n0007\\0007_01_02_03_69.bmp\r\n0007\\0007_01_02_03_74.bmp\r\n0007\\0007_01_02_03_8.bmp\r\n0007\\0007_01_02_03_85.bmp\r\n0007\\0007_01_02_03_91.bmp\r\n0007\\0007_01_02_03_97.bmp\r\n0007\\0007_01_08_03_0.bmp\r\n0007\\0007_01_08_03_103.bmp\r\n0007\\0007_01_08_03_109.bmp\r\n0007\\0007_01_08_03_114.bmp\r\n0007\\0007_01_08_03_12.bmp\r\n0007\\0007_01_08_03_125.bmp\r\n0007\\0007_01_08_03_130.bmp\r\n0007\\0007_01_08_03_136.bmp\r\n0007\\0007_01_08_03_141.bmp\r\n0007\\0007_01_08_03_147.bmp\r\n0007\\0007_01_08_03_152.bmp\r\n0007\\0007_01_08_03_158.bmp\r\n0007\\0007_01_08_03_163.bmp\r\n0007\\0007_01_08_03_169.bmp\r\n0007\\0007_01_08_03_174.bmp\r\n0007\\0007_01_08_03_18.bmp\r\n0007\\0007_01_08_03_185.bmp\r\n0007\\0007_01_08_03_190.bmp\r\n0007\\0007_01_08_03_196.bmp\r\n0007\\0007_01_08_03_200.bmp\r\n0007\\0007_01_08_03_206.bmp\r\n0007\\0007_01_08_03_211.bmp\r\n0007\\0007_01_08_03_217.bmp\r\n0007\\0007_01_08_03_222.bmp\r\n0007\\0007_01_08_03_228.bmp\r\n0007\\0007_01_08_03_233.bmp\r\n0007\\0007_01_08_03_239.bmp\r\n0007\\0007_01_08_03_244.bmp\r\n0007\\0007_01_08_03_25.bmp\r\n0007\\0007_01_08_03_255.bmp\r\n0007\\0007_01_08_03_260.bmp\r\n0007\\0007_01_08_03_266.bmp\r\n0007\\0007_01_08_03_271.bmp\r\n0007\\0007_01_08_03_277.bmp\r\n0007\\0007_01_08_03_282.bmp\r\n0007\\0007_01_08_03_288.bmp\r\n0007\\0007_01_08_03_293.bmp\r\n0007\\0007_01_08_03_299.bmp\r\n0007\\0007_01_08_03_303.bmp\r\n0007\\0007_01_08_03_309.bmp\r\n0007\\0007_01_08_03_314.bmp\r\n0007\\0007_01_08_03_32.bmp\r\n0007\\0007_01_08_03_325.bmp\r\n0007\\0007_01_08_03_330.bmp\r\n0007\\0007_01_08_03_336.bmp\r\n0007\\0007_01_08_03_341.bmp\r\n0007\\0007_01_08_03_347.bmp\r\n0007\\0007_01_08_03_352.bmp\r\n0007\\0007_01_08_03_358.bmp\r\n0007\\0007_01_08_03_363.bmp\r\n0007\\0007_01_08_03_369.bmp\r\n0007\\0007_01_08_03_374.bmp\r\n0007\\0007_01_08_03_38.bmp\r\n0007\\0007_01_08_03_385.bmp\r\n0007\\0007_01_08_03_390.bmp\r\n0007\\0007_01_08_03_396.bmp\r\n0007\\0007_01_08_03_400.bmp\r\n0007\\0007_01_08_03_406.bmp\r\n0007\\0007_01_08_03_411.bmp\r\n0007\\0007_01_08_03_417.bmp\r\n0007\\0007_01_08_03_422.bmp\r\n0007\\0007_01_08_03_428.bmp\r\n0007\\0007_01_08_03_433.bmp\r\n0007\\0007_01_08_03_439.bmp\r\n0007\\0007_01_08_03_444.bmp\r\n0007\\0007_01_08_03_45.bmp\r\n0007\\0007_01_08_03_455.bmp\r\n0007\\0007_01_08_03_460.bmp\r\n0007\\0007_01_08_03_466.bmp\r\n0007\\0007_01_08_03_471.bmp\r\n0007\\0007_01_08_03_477.bmp\r\n0007\\0007_01_08_03_482.bmp\r\n0007\\0007_01_08_03_488.bmp\r\n0007\\0007_01_08_03_493.bmp\r\n0007\\0007_01_08_03_499.bmp\r\n0007\\0007_01_08_03_54.bmp\r\n0007\\0007_01_08_03_6.bmp\r\n0007\\0007_01_08_03_65.bmp\r\n0007\\0007_01_08_03_70.bmp\r\n0007\\0007_01_08_03_76.bmp\r\n0007\\0007_01_08_03_81.bmp\r\n0007\\0007_01_08_03_87.bmp\r\n0007\\0007_01_08_03_92.bmp\r\n0007\\0007_01_08_03_98.bmp\r\n0009\\0009_01_03_03_0.bmp\r\n0009\\0009_01_03_03_103.bmp\r\n0009\\0009_01_03_03_109.bmp\r\n0009\\0009_01_03_03_114.bmp\r\n0009\\0009_01_03_03_12.bmp\r\n0009\\0009_01_03_03_125.bmp\r\n0009\\0009_01_03_03_130.bmp\r\n0009\\0009_01_03_03_136.bmp\r\n0009\\0009_01_03_03_141.bmp\r\n0009\\0009_01_03_03_147.bmp\r\n0009\\0009_01_03_03_152.bmp\r\n0009\\0009_01_03_03_158.bmp\r\n0009\\0009_01_03_03_163.bmp\r\n0009\\0009_01_03_03_169.bmp\r\n0009\\0009_01_03_03_174.bmp\r\n0009\\0009_01_03_03_18.bmp\r\n0009\\0009_01_03_03_185.bmp\r\n0009\\0009_01_03_03_190.bmp\r\n0009\\0009_01_03_03_196.bmp\r\n0009\\0009_01_03_03_200.bmp\r\n0009\\0009_01_03_03_206.bmp\r\n0009\\0009_01_03_03_211.bmp\r\n0009\\0009_01_03_03_217.bmp\r\n0009\\0009_01_03_03_226.bmp\r\n0009\\0009_01_03_03_231.bmp\r\n0009\\0009_01_03_03_237.bmp\r\n0009\\0009_01_03_03_242.bmp\r\n0009\\0009_01_03_03_248.bmp\r\n0009\\0009_01_03_03_253.bmp\r\n0009\\0009_01_03_03_259.bmp\r\n0009\\0009_01_03_03_264.bmp\r\n0009\\0009_01_03_03_27.bmp\r\n0009\\0009_01_03_03_275.bmp\r\n0009\\0009_01_03_03_281.bmp\r\n0009\\0009_01_03_03_287.bmp\r\n0009\\0009_01_03_03_292.bmp\r\n0009\\0009_01_03_03_298.bmp\r\n0009\\0009_01_03_03_302.bmp\r\n0009\\0009_01_03_03_308.bmp\r\n0009\\0009_01_03_03_317.bmp\r\n0009\\0009_01_03_03_322.bmp\r\n0009\\0009_01_03_03_328.bmp\r\n0009\\0009_01_03_03_333.bmp\r\n0009\\0009_01_03_03_342.bmp\r\n0009\\0009_01_03_03_348.bmp\r\n0009\\0009_01_03_03_353.bmp\r\n0009\\0009_01_03_03_359.bmp\r\n0009\\0009_01_03_03_364.bmp\r\n0009\\0009_01_03_03_37.bmp\r\n0009\\0009_01_03_03_375.bmp\r\n0009\\0009_01_03_03_380.bmp\r\n0009\\0009_01_03_03_386.bmp\r\n0009\\0009_01_03_03_391.bmp\r\n0009\\0009_01_03_03_397.bmp\r\n0009\\0009_01_03_03_401.bmp\r\n0009\\0009_01_03_03_407.bmp\r\n0009\\0009_01_03_03_412.bmp\r\n0009\\0009_01_03_03_418.bmp\r\n0009\\0009_01_03_03_424.bmp\r\n0009\\0009_01_03_03_43.bmp\r\n0009\\0009_01_03_03_444.bmp\r\n0009\\0009_01_03_03_45.bmp\r\n0009\\0009_01_03_03_455.bmp\r\n0009\\0009_01_03_03_460.bmp\r\n0009\\0009_01_03_03_466.bmp\r\n0009\\0009_01_03_03_471.bmp\r\n0009\\0009_01_03_03_477.bmp\r\n0009\\0009_01_03_03_482.bmp\r\n0009\\0009_01_03_03_488.bmp\r\n0009\\0009_01_03_03_493.bmp\r\n0009\\0009_01_03_03_499.bmp\r\n0009\\0009_01_03_03_54.bmp\r\n0009\\0009_01_03_03_6.bmp\r\n0009\\0009_01_03_03_65.bmp\r\n0009\\0009_01_03_03_70.bmp\r\n0009\\0009_01_03_03_76.bmp\r\n0009\\0009_01_03_03_81.bmp\r\n0009\\0009_01_03_03_87.bmp\r\n0009\\0009_01_03_03_92.bmp\r\n0009\\0009_01_03_03_98.bmp\r\n0009\\0009_01_04_03_0.bmp\r\n0009\\0009_01_04_03_103.bmp\r\n0009\\0009_01_04_03_109.bmp\r\n0009\\0009_01_04_03_114.bmp\r\n0009\\0009_01_04_03_12.bmp\r\n0009\\0009_01_04_03_125.bmp\r\n0009\\0009_01_04_03_130.bmp\r\n0009\\0009_01_04_03_136.bmp\r\n0009\\0009_01_04_03_141.bmp\r\n0009\\0009_01_04_03_147.bmp\r\n0009\\0009_01_04_03_152.bmp\r\n0009\\0009_01_04_03_158.bmp\r\n0009\\0009_01_04_03_163.bmp\r\n0009\\0009_01_04_03_169.bmp\r\n0009\\0009_01_04_03_174.bmp\r\n0009\\0009_01_04_03_18.bmp\r\n0009\\0009_01_04_03_185.bmp\r\n0009\\0009_01_04_03_190.bmp\r\n0009\\0009_01_04_03_196.bmp\r\n0009\\0009_01_04_03_200.bmp\r\n0009\\0009_01_04_03_206.bmp\r\n0009\\0009_01_04_03_211.bmp\r\n0009\\0009_01_04_03_217.bmp\r\n0009\\0009_01_04_03_222.bmp\r\n0009\\0009_01_04_03_228.bmp\r\n0009\\0009_01_04_03_233.bmp\r\n0009\\0009_01_04_03_239.bmp\r\n0009\\0009_01_04_03_244.bmp\r\n0009\\0009_01_04_03_25.bmp\r\n0009\\0009_01_04_03_255.bmp\r\n0009\\0009_01_04_03_260.bmp\r\n0009\\0009_01_04_03_266.bmp\r\n0009\\0009_01_04_03_271.bmp\r\n0009\\0009_01_04_03_277.bmp\r\n0009\\0009_01_04_03_282.bmp\r\n0009\\0009_01_04_03_288.bmp\r\n0009\\0009_01_04_03_293.bmp\r\n0009\\0009_01_04_03_299.bmp\r\n0009\\0009_01_04_03_303.bmp\r\n0009\\0009_01_04_03_309.bmp\r\n0009\\0009_01_04_03_314.bmp\r\n0009\\0009_01_04_03_32.bmp\r\n0009\\0009_01_04_03_325.bmp\r\n0009\\0009_01_04_03_330.bmp\r\n0009\\0009_01_04_03_336.bmp\r\n0009\\0009_01_04_03_341.bmp\r\n0009\\0009_01_04_03_347.bmp\r\n0009\\0009_01_04_03_352.bmp\r\n0009\\0009_01_04_03_358.bmp\r\n0009\\0009_01_04_03_363.bmp\r\n0009\\0009_01_04_03_369.bmp\r\n0009\\0009_01_04_03_374.bmp\r\n0009\\0009_01_04_03_38.bmp\r\n0009\\0009_01_04_03_385.bmp\r\n0009\\0009_01_04_03_390.bmp\r\n0009\\0009_01_04_03_396.bmp\r\n0009\\0009_01_04_03_400.bmp\r\n0009\\0009_01_04_03_406.bmp\r\n0009\\0009_01_04_03_411.bmp\r\n0009\\0009_01_04_03_417.bmp\r\n0009\\0009_01_04_03_422.bmp\r\n0009\\0009_01_04_03_428.bmp\r\n0009\\0009_01_04_03_433.bmp\r\n0009\\0009_01_04_03_439.bmp\r\n0009\\0009_01_04_03_444.bmp\r\n0009\\0009_01_04_03_45.bmp\r\n0009\\0009_01_04_03_455.bmp\r\n0009\\0009_01_04_03_460.bmp\r\n0009\\0009_01_04_03_466.bmp\r\n0009\\0009_01_04_03_471.bmp\r\n0009\\0009_01_04_03_477.bmp\r\n0009\\0009_01_04_03_482.bmp\r\n0009\\0009_01_04_03_488.bmp\r\n0009\\0009_01_04_03_493.bmp\r\n0009\\0009_01_04_03_499.bmp\r\n0009\\0009_01_04_03_56.bmp\r\n0009\\0009_01_04_03_61.bmp\r\n0009\\0009_01_04_03_67.bmp\r\n0009\\0009_01_04_03_72.bmp\r\n0009\\0009_01_04_03_78.bmp\r\n0009\\0009_01_04_03_89.bmp\r\n0009\\0009_01_04_03_94.bmp\r\n0009\\0009_01_01_03_0.bmp\r\n0009\\0009_01_01_03_103.bmp\r\n0009\\0009_01_01_03_109.bmp\r\n0009\\0009_01_01_03_114.bmp\r\n0009\\0009_01_01_03_12.bmp\r\n0009\\0009_01_01_03_125.bmp\r\n0009\\0009_01_01_03_130.bmp\r\n0009\\0009_01_01_03_136.bmp\r\n0009\\0009_01_01_03_141.bmp\r\n0009\\0009_01_01_03_147.bmp\r\n0009\\0009_01_01_03_152.bmp\r\n0009\\0009_01_01_03_158.bmp\r\n0009\\0009_01_01_03_163.bmp\r\n0009\\0009_01_01_03_169.bmp\r\n0009\\0009_01_01_03_174.bmp\r\n0009\\0009_01_01_03_18.bmp\r\n0009\\0009_01_01_03_185.bmp\r\n0009\\0009_01_01_03_190.bmp\r\n0009\\0009_01_01_03_196.bmp\r\n0009\\0009_01_01_03_200.bmp\r\n0009\\0009_01_01_03_206.bmp\r\n0009\\0009_01_01_03_211.bmp\r\n0009\\0009_01_01_03_217.bmp\r\n0009\\0009_01_01_03_222.bmp\r\n0009\\0009_01_01_03_228.bmp\r\n0009\\0009_01_01_03_233.bmp\r\n0009\\0009_01_01_03_239.bmp\r\n0009\\0009_01_01_03_244.bmp\r\n0009\\0009_01_01_03_25.bmp\r\n0009\\0009_01_01_03_255.bmp\r\n0009\\0009_01_01_03_260.bmp\r\n0009\\0009_01_01_03_266.bmp\r\n0009\\0009_01_01_03_271.bmp\r\n0009\\0009_01_01_03_277.bmp\r\n0009\\0009_01_01_03_282.bmp\r\n0009\\0009_01_01_03_288.bmp\r\n0009\\0009_01_01_03_293.bmp\r\n0009\\0009_01_01_03_299.bmp\r\n0009\\0009_01_01_03_303.bmp\r\n0009\\0009_01_01_03_309.bmp\r\n0009\\0009_01_01_03_314.bmp\r\n0009\\0009_01_01_03_32.bmp\r\n0009\\0009_01_01_03_325.bmp\r\n0009\\0009_01_01_03_330.bmp\r\n0009\\0009_01_01_03_336.bmp\r\n0009\\0009_01_01_03_341.bmp\r\n0009\\0009_01_01_03_347.bmp\r\n0009\\0009_01_01_03_352.bmp\r\n0009\\0009_01_01_03_358.bmp\r\n0009\\0009_01_01_03_363.bmp\r\n0009\\0009_01_01_03_369.bmp\r\n0009\\0009_01_01_03_374.bmp\r\n0009\\0009_01_01_03_38.bmp\r\n0009\\0009_01_01_03_385.bmp\r\n0009\\0009_01_01_03_390.bmp\r\n0009\\0009_01_01_03_396.bmp\r\n0009\\0009_01_01_03_400.bmp\r\n0009\\0009_01_01_03_406.bmp\r\n0009\\0009_01_01_03_411.bmp\r\n0009\\0009_01_01_03_417.bmp\r\n0009\\0009_01_01_03_422.bmp\r\n0009\\0009_01_01_03_428.bmp\r\n0009\\0009_01_01_03_433.bmp\r\n0009\\0009_01_01_03_439.bmp\r\n0009\\0009_01_01_03_444.bmp\r\n0009\\0009_01_01_03_45.bmp\r\n0009\\0009_01_01_03_455.bmp\r\n0009\\0009_01_01_03_460.bmp\r\n0009\\0009_01_01_03_466.bmp\r\n0009\\0009_01_01_03_471.bmp\r\n0009\\0009_01_01_03_477.bmp\r\n0009\\0009_01_01_03_482.bmp\r\n0009\\0009_01_01_03_488.bmp\r\n0009\\0009_01_01_03_493.bmp\r\n0009\\0009_01_01_03_499.bmp\r\n0009\\0009_01_01_03_54.bmp\r\n0009\\0009_01_01_03_6.bmp\r\n0009\\0009_01_01_03_65.bmp\r\n0009\\0009_01_01_03_70.bmp\r\n0009\\0009_01_01_03_76.bmp\r\n0009\\0009_01_01_03_81.bmp\r\n0009\\0009_01_01_03_87.bmp\r\n0009\\0009_01_01_03_92.bmp\r\n0009\\0009_01_01_03_98.bmp\r\n0009\\0009_01_02_03_0.bmp\r\n0009\\0009_01_02_03_103.bmp\r\n0009\\0009_01_02_03_109.bmp\r\n0009\\0009_01_02_03_114.bmp\r\n0009\\0009_01_02_03_12.bmp\r\n0009\\0009_01_02_03_125.bmp\r\n0009\\0009_01_02_03_130.bmp\r\n0009\\0009_01_02_03_136.bmp\r\n0009\\0009_01_02_03_141.bmp\r\n0009\\0009_01_02_03_147.bmp\r\n0009\\0009_01_02_03_152.bmp\r\n0009\\0009_01_02_03_158.bmp\r\n0009\\0009_01_02_03_163.bmp\r\n0009\\0009_01_02_03_169.bmp\r\n0009\\0009_01_02_03_174.bmp\r\n0009\\0009_01_02_03_18.bmp\r\n0009\\0009_01_02_03_185.bmp\r\n0009\\0009_01_02_03_190.bmp\r\n0009\\0009_01_02_03_196.bmp\r\n0009\\0009_01_02_03_200.bmp\r\n0009\\0009_01_02_03_206.bmp\r\n0009\\0009_01_02_03_211.bmp\r\n0009\\0009_01_02_03_217.bmp\r\n0009\\0009_01_02_03_222.bmp\r\n0009\\0009_01_02_03_228.bmp\r\n0009\\0009_01_02_03_233.bmp\r\n0009\\0009_01_02_03_239.bmp\r\n0009\\0009_01_02_03_244.bmp\r\n0009\\0009_01_02_03_25.bmp\r\n0009\\0009_01_02_03_255.bmp\r\n0009\\0009_01_02_03_260.bmp\r\n0009\\0009_01_02_03_266.bmp\r\n0009\\0009_01_02_03_271.bmp\r\n0009\\0009_01_02_03_277.bmp\r\n0009\\0009_01_02_03_282.bmp\r\n0009\\0009_01_02_03_288.bmp\r\n0009\\0009_01_02_03_293.bmp\r\n0009\\0009_01_02_03_299.bmp\r\n0009\\0009_01_02_03_303.bmp\r\n0009\\0009_01_02_03_309.bmp\r\n0009\\0009_01_02_03_314.bmp\r\n0009\\0009_01_02_03_32.bmp\r\n0009\\0009_01_02_03_325.bmp\r\n0009\\0009_01_02_03_330.bmp\r\n0009\\0009_01_02_03_336.bmp\r\n0009\\0009_01_02_03_341.bmp\r\n0009\\0009_01_02_03_347.bmp\r\n0009\\0009_01_02_03_352.bmp\r\n0009\\0009_01_02_03_358.bmp\r\n0009\\0009_01_02_03_363.bmp\r\n0009\\0009_01_02_03_369.bmp\r\n0009\\0009_01_02_03_374.bmp\r\n0009\\0009_01_02_03_38.bmp\r\n0009\\0009_01_02_03_385.bmp\r\n0009\\0009_01_02_03_390.bmp\r\n0009\\0009_01_02_03_396.bmp\r\n0009\\0009_01_02_03_400.bmp\r\n0009\\0009_01_02_03_406.bmp\r\n0009\\0009_01_02_03_411.bmp\r\n0009\\0009_01_02_03_417.bmp\r\n0009\\0009_01_02_03_422.bmp\r\n0009\\0009_01_02_03_428.bmp\r\n0009\\0009_01_02_03_433.bmp\r\n0009\\0009_01_02_03_439.bmp\r\n0009\\0009_01_02_03_444.bmp\r\n0009\\0009_01_02_03_45.bmp\r\n0009\\0009_01_02_03_455.bmp\r\n0009\\0009_01_02_03_460.bmp\r\n0009\\0009_01_02_03_466.bmp\r\n0009\\0009_01_02_03_471.bmp\r\n0009\\0009_01_02_03_477.bmp\r\n0009\\0009_01_02_03_482.bmp\r\n0009\\0009_01_02_03_488.bmp\r\n0009\\0009_01_02_03_493.bmp\r\n0009\\0009_01_02_03_499.bmp\r\n0009\\0009_01_02_03_54.bmp\r\n0009\\0009_01_02_03_6.bmp\r\n0009\\0009_01_02_03_65.bmp\r\n0009\\0009_01_02_03_70.bmp\r\n0009\\0009_01_02_03_76.bmp\r\n0009\\0009_01_02_03_81.bmp\r\n0009\\0009_01_02_03_87.bmp\r\n0009\\0009_01_02_03_92.bmp\r\n0009\\0009_01_02_03_98.bmp\r\n0009\\0009_01_08_03_0.bmp\r\n0009\\0009_01_08_03_103.bmp\r\n0009\\0009_01_08_03_109.bmp\r\n0009\\0009_01_08_03_114.bmp\r\n0009\\0009_01_08_03_12.bmp\r\n0009\\0009_01_08_03_125.bmp\r\n0009\\0009_01_08_03_130.bmp\r\n0009\\0009_01_08_03_136.bmp\r\n0009\\0009_01_08_03_141.bmp\r\n0009\\0009_01_08_03_147.bmp\r\n0009\\0009_01_08_03_152.bmp\r\n0009\\0009_01_08_03_158.bmp\r\n0009\\0009_01_08_03_163.bmp\r\n0009\\0009_01_08_03_169.bmp\r\n0009\\0009_01_08_03_174.bmp\r\n0009\\0009_01_08_03_18.bmp\r\n0009\\0009_01_08_03_185.bmp\r\n0009\\0009_01_08_03_190.bmp\r\n0009\\0009_01_08_03_196.bmp\r\n0009\\0009_01_08_03_200.bmp\r\n0009\\0009_01_08_03_206.bmp\r\n0009\\0009_01_08_03_211.bmp\r\n0009\\0009_01_08_03_217.bmp\r\n0009\\0009_01_08_03_222.bmp\r\n0009\\0009_01_08_03_228.bmp\r\n0009\\0009_01_08_03_233.bmp\r\n0009\\0009_01_08_03_239.bmp\r\n0009\\0009_01_08_03_244.bmp\r\n0009\\0009_01_08_03_25.bmp\r\n0009\\0009_01_08_03_255.bmp\r\n0009\\0009_01_08_03_260.bmp\r\n0009\\0009_01_08_03_266.bmp\r\n0009\\0009_01_08_03_271.bmp\r\n0009\\0009_01_08_03_277.bmp\r\n0009\\0009_01_08_03_282.bmp\r\n0009\\0009_01_08_03_288.bmp\r\n0009\\0009_01_08_03_293.bmp\r\n0009\\0009_01_08_03_299.bmp\r\n0009\\0009_01_08_03_303.bmp\r\n0009\\0009_01_08_03_309.bmp\r\n0009\\0009_01_08_03_314.bmp\r\n0009\\0009_01_08_03_32.bmp\r\n0009\\0009_01_08_03_325.bmp\r\n0009\\0009_01_08_03_330.bmp\r\n0009\\0009_01_08_03_336.bmp\r\n0009\\0009_01_08_03_341.bmp\r\n0009\\0009_01_08_03_347.bmp\r\n0009\\0009_01_08_03_352.bmp\r\n0009\\0009_01_08_03_358.bmp\r\n0009\\0009_01_08_03_363.bmp\r\n0009\\0009_01_08_03_369.bmp\r\n0009\\0009_01_08_03_374.bmp\r\n0009\\0009_01_08_03_38.bmp\r\n0009\\0009_01_08_03_385.bmp\r\n0009\\0009_01_08_03_390.bmp\r\n0009\\0009_01_08_03_396.bmp\r\n0009\\0009_01_08_03_400.bmp\r\n0009\\0009_01_08_03_406.bmp\r\n0009\\0009_01_08_03_411.bmp\r\n0009\\0009_01_08_03_417.bmp\r\n0009\\0009_01_08_03_422.bmp\r\n0009\\0009_01_08_03_428.bmp\r\n0009\\0009_01_08_03_433.bmp\r\n0009\\0009_01_08_03_439.bmp\r\n0009\\0009_01_08_03_444.bmp\r\n0009\\0009_01_08_03_45.bmp\r\n0009\\0009_01_08_03_455.bmp\r\n0009\\0009_01_08_03_460.bmp\r\n0009\\0009_01_08_03_466.bmp\r\n0009\\0009_01_08_03_471.bmp\r\n0009\\0009_01_08_03_477.bmp\r\n0009\\0009_01_08_03_482.bmp\r\n0009\\0009_01_08_03_488.bmp\r\n0009\\0009_01_08_03_493.bmp\r\n0009\\0009_01_08_03_499.bmp\r\n0009\\0009_01_08_03_54.bmp\r\n0009\\0009_01_08_03_6.bmp\r\n0009\\0009_01_08_03_65.bmp\r\n0009\\0009_01_08_03_70.bmp\r\n0009\\0009_01_08_03_76.bmp\r\n0009\\0009_01_08_03_81.bmp\r\n0009\\0009_01_08_03_87.bmp\r\n0009\\0009_01_08_03_92.bmp\r\n0009\\0009_01_08_03_98.bmp\r\n0008\\0008_00_03_03_0.bmp\r\n0008\\0008_00_03_03_103.bmp\r\n0008\\0008_00_03_03_111.bmp\r\n0008\\0008_00_03_03_117.bmp\r\n0008\\0008_00_03_03_122.bmp\r\n0008\\0008_00_03_03_128.bmp\r\n0008\\0008_00_03_03_133.bmp\r\n0008\\0008_00_03_03_139.bmp\r\n0008\\0008_00_03_03_144.bmp\r\n0008\\0008_00_03_03_15.bmp\r\n0008\\0008_00_03_03_155.bmp\r\n0008\\0008_00_03_03_160.bmp\r\n0008\\0008_00_03_03_166.bmp\r\n0008\\0008_00_03_03_171.bmp\r\n0008\\0008_00_03_03_177.bmp\r\n0008\\0008_00_03_03_182.bmp\r\n0008\\0008_00_03_03_188.bmp\r\n0008\\0008_00_03_03_193.bmp\r\n0008\\0008_00_03_03_199.bmp\r\n0008\\0008_00_03_03_203.bmp\r\n0008\\0008_00_03_03_209.bmp\r\n0008\\0008_00_03_03_214.bmp\r\n0008\\0008_00_03_03_22.bmp\r\n0008\\0008_00_03_03_225.bmp\r\n0008\\0008_00_03_03_230.bmp\r\n0008\\0008_00_03_03_236.bmp\r\n0008\\0008_00_03_03_241.bmp\r\n0008\\0008_00_03_03_247.bmp\r\n0008\\0008_00_03_03_252.bmp\r\n0008\\0008_00_03_03_258.bmp\r\n0008\\0008_00_03_03_263.bmp\r\n0008\\0008_00_03_03_269.bmp\r\n0008\\0008_00_03_03_274.bmp\r\n0008\\0008_00_03_03_28.bmp\r\n0008\\0008_00_03_03_285.bmp\r\n0008\\0008_00_03_03_290.bmp\r\n0008\\0008_00_03_03_296.bmp\r\n0008\\0008_00_03_03_300.bmp\r\n0008\\0008_00_03_03_306.bmp\r\n0008\\0008_00_03_03_311.bmp\r\n0008\\0008_00_03_03_317.bmp\r\n0008\\0008_00_03_03_322.bmp\r\n0008\\0008_00_03_03_328.bmp\r\n0008\\0008_00_03_03_333.bmp\r\n0008\\0008_00_03_03_339.bmp\r\n0008\\0008_00_03_03_344.bmp\r\n0008\\0008_00_03_03_35.bmp\r\n0008\\0008_00_03_03_355.bmp\r\n0008\\0008_00_03_03_360.bmp\r\n0008\\0008_00_03_03_366.bmp\r\n0008\\0008_00_03_03_371.bmp\r\n0008\\0008_00_03_03_377.bmp\r\n0008\\0008_00_03_03_382.bmp\r\n0008\\0008_00_03_03_388.bmp\r\n0008\\0008_00_03_03_393.bmp\r\n0008\\0008_00_03_03_399.bmp\r\n0008\\0008_00_03_03_403.bmp\r\n0008\\0008_00_03_03_409.bmp\r\n0008\\0008_00_03_03_414.bmp\r\n0008\\0008_00_03_03_42.bmp\r\n0008\\0008_00_03_03_425.bmp\r\n0008\\0008_00_03_03_430.bmp\r\n0008\\0008_00_03_03_436.bmp\r\n0008\\0008_00_03_03_441.bmp\r\n0008\\0008_00_03_03_447.bmp\r\n0008\\0008_00_03_03_452.bmp\r\n0008\\0008_00_03_03_458.bmp\r\n0008\\0008_00_03_03_463.bmp\r\n0008\\0008_00_03_03_469.bmp\r\n0008\\0008_00_03_03_474.bmp\r\n0008\\0008_00_03_03_48.bmp\r\n0008\\0008_00_03_03_485.bmp\r\n0008\\0008_00_03_03_490.bmp\r\n0008\\0008_00_03_03_496.bmp\r\n0008\\0008_00_03_03_51.bmp\r\n0008\\0008_00_03_03_57.bmp\r\n0008\\0008_00_03_03_62.bmp\r\n0008\\0008_00_03_03_68.bmp\r\n0008\\0008_00_03_03_73.bmp\r\n0008\\0008_00_03_03_79.bmp\r\n0008\\0008_00_03_03_84.bmp\r\n0008\\0008_00_03_03_9.bmp\r\n0008\\0008_00_03_03_95.bmp\r\n0008\\0008_00_04_03_0.bmp\r\n0008\\0008_00_04_03_103.bmp\r\n0008\\0008_00_04_03_109.bmp\r\n0008\\0008_00_04_03_114.bmp\r\n0008\\0008_00_04_03_12.bmp\r\n0008\\0008_00_04_03_125.bmp\r\n0008\\0008_00_04_03_130.bmp\r\n0008\\0008_00_04_03_136.bmp\r\n0008\\0008_00_04_03_141.bmp\r\n0008\\0008_00_04_03_147.bmp\r\n0008\\0008_00_04_03_152.bmp\r\n0008\\0008_00_04_03_158.bmp\r\n0008\\0008_00_04_03_163.bmp\r\n0008\\0008_00_04_03_169.bmp\r\n0008\\0008_00_04_03_174.bmp\r\n0008\\0008_00_04_03_18.bmp\r\n0008\\0008_00_04_03_185.bmp\r\n0008\\0008_00_04_03_190.bmp\r\n0008\\0008_00_04_03_196.bmp\r\n0008\\0008_00_04_03_200.bmp\r\n0008\\0008_00_04_03_206.bmp\r\n0008\\0008_00_04_03_211.bmp\r\n0008\\0008_00_04_03_217.bmp\r\n0008\\0008_00_04_03_222.bmp\r\n0008\\0008_00_04_03_228.bmp\r\n0008\\0008_00_04_03_233.bmp\r\n0008\\0008_00_04_03_239.bmp\r\n0008\\0008_00_04_03_244.bmp\r\n0008\\0008_00_04_03_25.bmp\r\n0008\\0008_00_04_03_255.bmp\r\n0008\\0008_00_04_03_260.bmp\r\n0008\\0008_00_04_03_266.bmp\r\n0008\\0008_00_04_03_271.bmp\r\n0008\\0008_00_04_03_277.bmp\r\n0008\\0008_00_04_03_282.bmp\r\n0008\\0008_00_04_03_288.bmp\r\n0008\\0008_00_04_03_293.bmp\r\n0008\\0008_00_04_03_299.bmp\r\n0008\\0008_00_04_03_303.bmp\r\n0008\\0008_00_04_03_309.bmp\r\n0008\\0008_00_04_03_314.bmp\r\n0008\\0008_00_04_03_32.bmp\r\n0008\\0008_00_04_03_325.bmp\r\n0008\\0008_00_04_03_330.bmp\r\n0008\\0008_00_04_03_336.bmp\r\n0008\\0008_00_04_03_341.bmp\r\n0008\\0008_00_04_03_347.bmp\r\n0008\\0008_00_04_03_352.bmp\r\n0008\\0008_00_04_03_358.bmp\r\n0008\\0008_00_04_03_363.bmp\r\n0008\\0008_00_04_03_369.bmp\r\n0008\\0008_00_04_03_374.bmp\r\n0008\\0008_00_04_03_380.bmp\r\n0008\\0008_00_04_03_386.bmp\r\n0008\\0008_00_04_03_391.bmp\r\n0008\\0008_00_04_03_397.bmp\r\n0008\\0008_00_04_03_401.bmp\r\n0008\\0008_00_04_03_407.bmp\r\n0008\\0008_00_04_03_412.bmp\r\n0008\\0008_00_04_03_418.bmp\r\n0008\\0008_00_04_03_423.bmp\r\n0008\\0008_00_04_03_429.bmp\r\n0008\\0008_00_04_03_434.bmp\r\n0008\\0008_00_04_03_44.bmp\r\n0008\\0008_00_04_03_445.bmp\r\n0008\\0008_00_04_03_450.bmp\r\n0008\\0008_00_04_03_456.bmp\r\n0008\\0008_00_04_03_461.bmp\r\n0008\\0008_00_04_03_467.bmp\r\n0008\\0008_00_04_03_472.bmp\r\n0008\\0008_00_04_03_478.bmp\r\n0008\\0008_00_04_03_483.bmp\r\n0008\\0008_00_04_03_489.bmp\r\n0008\\0008_00_04_03_494.bmp\r\n0008\\0008_00_04_03_5.bmp\r\n0008\\0008_00_04_03_55.bmp\r\n0008\\0008_00_04_03_60.bmp\r\n0008\\0008_00_04_03_66.bmp\r\n0008\\0008_00_04_03_71.bmp\r\n0008\\0008_00_04_03_77.bmp\r\n0008\\0008_00_04_03_82.bmp\r\n0008\\0008_00_04_03_88.bmp\r\n0008\\0008_00_04_03_93.bmp\r\n0008\\0008_00_04_03_99.bmp\r\n0008\\0008_00_01_03_0.bmp\r\n0008\\0008_00_01_03_103.bmp\r\n0008\\0008_00_01_03_109.bmp\r\n0008\\0008_00_01_03_114.bmp\r\n0008\\0008_00_01_03_12.bmp\r\n0008\\0008_00_01_03_125.bmp\r\n0008\\0008_00_01_03_130.bmp\r\n0008\\0008_00_01_03_136.bmp\r\n0008\\0008_00_01_03_141.bmp\r\n0008\\0008_00_01_03_147.bmp\r\n0008\\0008_00_01_03_152.bmp\r\n0008\\0008_00_01_03_158.bmp\r\n0008\\0008_00_01_03_163.bmp\r\n0008\\0008_00_01_03_169.bmp\r\n0008\\0008_00_01_03_174.bmp\r\n0008\\0008_00_01_03_18.bmp\r\n0008\\0008_00_01_03_185.bmp\r\n0008\\0008_00_01_03_190.bmp\r\n0008\\0008_00_01_03_196.bmp\r\n0008\\0008_00_01_03_200.bmp\r\n0008\\0008_00_01_03_206.bmp\r\n0008\\0008_00_01_03_211.bmp\r\n0008\\0008_00_01_03_217.bmp\r\n0008\\0008_00_01_03_222.bmp\r\n0008\\0008_00_01_03_228.bmp\r\n0008\\0008_00_01_03_233.bmp\r\n0008\\0008_00_01_03_239.bmp\r\n0008\\0008_00_01_03_244.bmp\r\n0008\\0008_00_01_03_25.bmp\r\n0008\\0008_00_01_03_255.bmp\r\n0008\\0008_00_01_03_260.bmp\r\n0008\\0008_00_01_03_266.bmp\r\n0008\\0008_00_01_03_271.bmp\r\n0008\\0008_00_01_03_277.bmp\r\n0008\\0008_00_01_03_282.bmp\r\n0008\\0008_00_01_03_288.bmp\r\n0008\\0008_00_01_03_293.bmp\r\n0008\\0008_00_01_03_299.bmp\r\n0008\\0008_00_01_03_303.bmp\r\n0008\\0008_00_01_03_309.bmp\r\n0008\\0008_00_01_03_314.bmp\r\n0008\\0008_00_01_03_32.bmp\r\n0008\\0008_00_01_03_325.bmp\r\n0008\\0008_00_01_03_330.bmp\r\n0008\\0008_00_01_03_336.bmp\r\n0008\\0008_00_01_03_341.bmp\r\n0008\\0008_00_01_03_347.bmp\r\n0008\\0008_00_01_03_352.bmp\r\n0008\\0008_00_01_03_358.bmp\r\n0008\\0008_00_01_03_363.bmp\r\n0008\\0008_00_01_03_369.bmp\r\n0008\\0008_00_01_03_374.bmp\r\n0008\\0008_00_01_03_38.bmp\r\n0008\\0008_00_01_03_385.bmp\r\n0008\\0008_00_01_03_390.bmp\r\n0008\\0008_00_01_03_396.bmp\r\n0008\\0008_00_01_03_400.bmp\r\n0008\\0008_00_01_03_406.bmp\r\n0008\\0008_00_01_03_411.bmp\r\n0008\\0008_00_01_03_417.bmp\r\n0008\\0008_00_01_03_422.bmp\r\n0008\\0008_00_01_03_428.bmp\r\n0008\\0008_00_01_03_433.bmp\r\n0008\\0008_00_01_03_439.bmp\r\n0008\\0008_00_01_03_444.bmp\r\n0008\\0008_00_01_03_45.bmp\r\n0008\\0008_00_01_03_455.bmp\r\n0008\\0008_00_01_03_460.bmp\r\n0008\\0008_00_01_03_466.bmp\r\n0008\\0008_00_01_03_471.bmp\r\n0008\\0008_00_01_03_477.bmp\r\n0008\\0008_00_01_03_482.bmp\r\n0008\\0008_00_01_03_488.bmp\r\n0008\\0008_00_01_03_493.bmp\r\n0008\\0008_00_01_03_499.bmp\r\n0008\\0008_00_01_03_54.bmp\r\n0008\\0008_00_01_03_6.bmp\r\n0008\\0008_00_01_03_65.bmp\r\n0008\\0008_00_01_03_70.bmp\r\n0008\\0008_00_01_03_76.bmp\r\n0008\\0008_00_01_03_81.bmp\r\n0008\\0008_00_01_03_87.bmp\r\n0008\\0008_00_01_03_92.bmp\r\n0008\\0008_00_01_03_98.bmp\r\n0008\\0008_00_02_03_0.bmp\r\n0008\\0008_00_02_03_103.bmp\r\n0008\\0008_00_02_03_109.bmp\r\n0008\\0008_00_02_03_114.bmp\r\n0008\\0008_00_02_03_12.bmp\r\n0008\\0008_00_02_03_125.bmp\r\n0008\\0008_00_02_03_130.bmp\r\n0008\\0008_00_02_03_136.bmp\r\n0008\\0008_00_02_03_141.bmp\r\n0008\\0008_00_02_03_147.bmp\r\n0008\\0008_00_02_03_152.bmp\r\n0008\\0008_00_02_03_158.bmp\r\n0008\\0008_00_02_03_163.bmp\r\n0008\\0008_00_02_03_169.bmp\r\n0008\\0008_00_02_03_174.bmp\r\n0008\\0008_00_02_03_18.bmp\r\n0008\\0008_00_02_03_185.bmp\r\n0008\\0008_00_02_03_190.bmp\r\n0008\\0008_00_02_03_196.bmp\r\n0008\\0008_00_02_03_200.bmp\r\n0008\\0008_00_02_03_206.bmp\r\n0008\\0008_00_02_03_211.bmp\r\n0008\\0008_00_02_03_217.bmp\r\n0008\\0008_00_02_03_222.bmp\r\n0008\\0008_00_02_03_228.bmp\r\n0008\\0008_00_02_03_233.bmp\r\n0008\\0008_00_02_03_239.bmp\r\n0008\\0008_00_02_03_244.bmp\r\n0008\\0008_00_02_03_25.bmp\r\n0008\\0008_00_02_03_255.bmp\r\n0008\\0008_00_02_03_260.bmp\r\n0008\\0008_00_02_03_266.bmp\r\n0008\\0008_00_02_03_271.bmp\r\n0008\\0008_00_02_03_277.bmp\r\n0008\\0008_00_02_03_282.bmp\r\n0008\\0008_00_02_03_288.bmp\r\n0008\\0008_00_02_03_293.bmp\r\n0008\\0008_00_02_03_299.bmp\r\n0008\\0008_00_02_03_303.bmp\r\n0008\\0008_00_02_03_309.bmp\r\n0008\\0008_00_02_03_314.bmp\r\n0008\\0008_00_02_03_32.bmp\r\n0008\\0008_00_02_03_325.bmp\r\n0008\\0008_00_02_03_330.bmp\r\n0008\\0008_00_02_03_336.bmp\r\n0008\\0008_00_02_03_341.bmp\r\n0008\\0008_00_02_03_347.bmp\r\n0008\\0008_00_02_03_352.bmp\r\n0008\\0008_00_02_03_358.bmp\r\n0008\\0008_00_02_03_363.bmp\r\n0008\\0008_00_02_03_369.bmp\r\n0008\\0008_00_02_03_374.bmp\r\n0008\\0008_00_02_03_38.bmp\r\n0008\\0008_00_02_03_385.bmp\r\n0008\\0008_00_02_03_390.bmp\r\n0008\\0008_00_02_03_396.bmp\r\n0008\\0008_00_02_03_400.bmp\r\n0008\\0008_00_02_03_406.bmp\r\n0008\\0008_00_02_03_411.bmp\r\n0008\\0008_00_02_03_417.bmp\r\n0008\\0008_00_02_03_422.bmp\r\n0008\\0008_00_02_03_428.bmp\r\n0008\\0008_00_02_03_433.bmp\r\n0008\\0008_00_02_03_439.bmp\r\n0008\\0008_00_02_03_444.bmp\r\n0008\\0008_00_02_03_45.bmp\r\n0008\\0008_00_02_03_455.bmp\r\n0008\\0008_00_02_03_460.bmp\r\n0008\\0008_00_02_03_466.bmp\r\n0008\\0008_00_02_03_471.bmp\r\n0008\\0008_00_02_03_477.bmp\r\n0008\\0008_00_02_03_482.bmp\r\n0008\\0008_00_02_03_488.bmp\r\n0008\\0008_00_02_03_493.bmp\r\n0008\\0008_00_02_03_499.bmp\r\n0008\\0008_00_02_03_54.bmp\r\n0008\\0008_00_02_03_6.bmp\r\n0008\\0008_00_02_03_65.bmp\r\n0008\\0008_00_02_03_70.bmp\r\n0008\\0008_00_02_03_76.bmp\r\n0008\\0008_00_02_03_81.bmp\r\n0008\\0008_00_02_03_87.bmp\r\n0008\\0008_00_02_03_92.bmp\r\n0008\\0008_00_02_03_98.bmp\r\n0008\\0008_00_08_03_100.bmp\r\n0008\\0008_00_08_03_106.bmp\r\n0008\\0008_00_08_03_112.bmp\r\n0008\\0008_00_08_03_118.bmp\r\n0008\\0008_00_08_03_124.bmp\r\n0008\\0008_00_08_03_130.bmp\r\n0008\\0008_00_08_03_136.bmp\r\n0008\\0008_00_08_03_142.bmp\r\n0008\\0008_00_08_03_148.bmp\r\n0008\\0008_00_08_03_154.bmp\r\n0008\\0008_00_08_03_160.bmp\r\n0008\\0008_00_08_03_166.bmp\r\n0008\\0008_00_08_03_172.bmp\r\n0008\\0008_00_08_03_178.bmp\r\n0008\\0008_00_08_03_184.bmp\r\n0008\\0008_00_08_03_190.bmp\r\n0008\\0008_00_08_03_196.bmp\r\n0008\\0008_00_08_03_202.bmp\r\n0008\\0008_00_08_03_208.bmp\r\n0008\\0008_00_08_03_214.bmp\r\n0008\\0008_00_08_03_220.bmp\r\n0008\\0008_00_08_03_226.bmp\r\n0008\\0008_00_08_03_232.bmp\r\n0008\\0008_00_08_03_238.bmp\r\n0008\\0008_00_08_03_244.bmp\r\n0008\\0008_00_08_03_250.bmp\r\n0008\\0008_00_08_03_256.bmp\r\n0008\\0008_00_08_03_262.bmp\r\n0008\\0008_00_08_03_268.bmp\r\n0008\\0008_00_08_03_274.bmp\r\n0008\\0008_00_08_03_280.bmp\r\n0008\\0008_00_08_03_286.bmp\r\n0008\\0008_00_08_03_292.bmp\r\n0008\\0008_00_08_03_298.bmp\r\n0008\\0008_00_08_03_304.bmp\r\n0008\\0008_00_08_03_310.bmp\r\n0008\\0008_00_08_03_316.bmp\r\n0008\\0008_00_08_03_322.bmp\r\n0008\\0008_00_08_03_328.bmp\r\n0008\\0008_00_08_03_334.bmp\r\n0008\\0008_00_08_03_340.bmp\r\n0008\\0008_00_08_03_346.bmp\r\n0008\\0008_00_08_03_352.bmp\r\n0008\\0008_00_08_03_358.bmp\r\n0008\\0008_00_08_03_364.bmp\r\n0008\\0008_00_08_03_370.bmp\r\n0008\\0008_00_08_03_376.bmp\r\n0008\\0008_00_08_03_382.bmp\r\n0008\\0008_00_08_03_388.bmp\r\n0008\\0008_00_08_03_394.bmp\r\n0008\\0008_00_08_03_400.bmp\r\n0008\\0008_00_08_03_406.bmp\r\n0008\\0008_00_08_03_412.bmp\r\n0008\\0008_00_08_03_418.bmp\r\n0008\\0008_00_08_03_424.bmp\r\n0008\\0008_00_08_03_430.bmp\r\n0008\\0008_00_08_03_436.bmp\r\n0008\\0008_00_08_03_442.bmp\r\n0008\\0008_00_08_03_448.bmp\r\n0008\\0008_00_08_03_454.bmp\r\n0008\\0008_00_08_03_460.bmp\r\n0008\\0008_00_08_03_466.bmp\r\n0008\\0008_00_08_03_472.bmp\r\n0008\\0008_00_08_03_478.bmp\r\n0008\\0008_00_08_03_484.bmp\r\n0008\\0008_00_08_03_490.bmp\r\n0008\\0008_00_08_03_496.bmp\r\n0008\\0008_00_08_03_82.bmp\r\n0008\\0008_00_08_03_88.bmp\r\n0008\\0008_00_08_03_94.bmp\r\n0014\\0014_01_03_03_0.bmp\r\n0014\\0014_01_03_03_102.bmp\r\n0014\\0014_01_03_03_107.bmp\r\n0014\\0014_01_03_03_111.bmp\r\n0014\\0014_01_03_03_116.bmp\r\n0014\\0014_01_03_03_120.bmp\r\n0014\\0014_01_03_03_125.bmp\r\n0014\\0014_01_03_03_13.bmp\r\n0014\\0014_01_03_03_134.bmp\r\n0014\\0014_01_03_03_139.bmp\r\n0014\\0014_01_03_03_143.bmp\r\n0014\\0014_01_03_03_148.bmp\r\n0014\\0014_01_03_03_152.bmp\r\n0014\\0014_01_03_03_157.bmp\r\n0014\\0014_01_03_03_161.bmp\r\n0014\\0014_01_03_03_166.bmp\r\n0014\\0014_01_03_03_170.bmp\r\n0014\\0014_01_03_03_175.bmp\r\n0014\\0014_01_03_03_18.bmp\r\n0014\\0014_01_03_03_184.bmp\r\n0014\\0014_01_03_03_189.bmp\r\n0014\\0014_01_03_03_193.bmp\r\n0014\\0014_01_03_03_198.bmp\r\n0014\\0014_01_03_03_201.bmp\r\n0014\\0014_01_03_03_206.bmp\r\n0014\\0014_01_03_03_210.bmp\r\n0014\\0014_01_03_03_215.bmp\r\n0014\\0014_01_03_03_22.bmp\r\n0014\\0014_01_03_03_224.bmp\r\n0014\\0014_01_03_03_229.bmp\r\n0014\\0014_01_03_03_233.bmp\r\n0014\\0014_01_03_03_238.bmp\r\n0014\\0014_01_03_03_242.bmp\r\n0014\\0014_01_03_03_247.bmp\r\n0014\\0014_01_03_03_251.bmp\r\n0014\\0014_01_03_03_256.bmp\r\n0014\\0014_01_03_03_260.bmp\r\n0014\\0014_01_03_03_265.bmp\r\n0014\\0014_01_03_03_27.bmp\r\n0014\\0014_01_03_03_274.bmp\r\n0014\\0014_01_03_03_279.bmp\r\n0014\\0014_01_03_03_283.bmp\r\n0014\\0014_01_03_03_288.bmp\r\n0014\\0014_01_03_03_292.bmp\r\n0014\\0014_01_03_03_297.bmp\r\n0014\\0014_01_03_03_300.bmp\r\n0014\\0014_01_03_03_305.bmp\r\n0014\\0014_01_03_03_31.bmp\r\n0014\\0014_01_03_03_314.bmp\r\n0014\\0014_01_03_03_319.bmp\r\n0014\\0014_01_03_03_323.bmp\r\n0014\\0014_01_03_03_328.bmp\r\n0014\\0014_01_03_03_332.bmp\r\n0014\\0014_01_03_03_337.bmp\r\n0014\\0014_01_03_03_341.bmp\r\n0014\\0014_01_03_03_346.bmp\r\n0014\\0014_01_03_03_350.bmp\r\n0014\\0014_01_03_03_355.bmp\r\n0014\\0014_01_03_03_36.bmp\r\n0014\\0014_01_03_03_364.bmp\r\n0014\\0014_01_03_03_369.bmp\r\n0014\\0014_01_03_03_373.bmp\r\n0014\\0014_01_03_03_378.bmp\r\n0014\\0014_01_03_03_382.bmp\r\n0014\\0014_01_03_03_387.bmp\r\n0014\\0014_01_03_03_391.bmp\r\n0014\\0014_01_03_03_396.bmp\r\n0014\\0014_01_03_03_40.bmp\r\n0014\\0014_01_03_03_404.bmp\r\n0014\\0014_01_03_03_409.bmp\r\n0014\\0014_01_03_03_413.bmp\r\n0014\\0014_01_03_03_418.bmp\r\n0014\\0014_01_03_03_422.bmp\r\n0014\\0014_01_03_03_427.bmp\r\n0014\\0014_01_03_03_431.bmp\r\n0014\\0014_01_03_03_436.bmp\r\n0014\\0014_01_03_03_440.bmp\r\n0014\\0014_01_03_03_445.bmp\r\n0014\\0014_01_03_03_45.bmp\r\n0014\\0014_01_03_03_454.bmp\r\n0014\\0014_01_03_03_459.bmp\r\n0014\\0014_01_03_03_463.bmp\r\n0014\\0014_01_03_03_468.bmp\r\n0014\\0014_01_03_03_472.bmp\r\n0014\\0014_01_03_03_477.bmp\r\n0014\\0014_01_03_03_481.bmp\r\n0014\\0014_01_03_03_486.bmp\r\n0014\\0014_01_03_03_490.bmp\r\n0014\\0014_01_03_03_495.bmp\r\n0014\\0014_01_03_03_5.bmp\r\n0014\\0014_01_03_03_54.bmp\r\n0014\\0014_01_03_03_59.bmp\r\n0014\\0014_01_03_03_63.bmp\r\n0014\\0014_01_03_03_68.bmp\r\n0014\\0014_01_03_03_72.bmp\r\n0014\\0014_01_03_03_77.bmp\r\n0014\\0014_01_03_03_81.bmp\r\n0014\\0014_01_03_03_86.bmp\r\n0014\\0014_01_03_03_90.bmp\r\n0014\\0014_01_03_03_95.bmp\r\n0014\\0014_01_04_03_0.bmp\r\n0014\\0014_01_04_03_103.bmp\r\n0014\\0014_01_04_03_108.bmp\r\n0014\\0014_01_04_03_112.bmp\r\n0014\\0014_01_04_03_117.bmp\r\n0014\\0014_01_04_03_121.bmp\r\n0014\\0014_01_04_03_126.bmp\r\n0014\\0014_01_04_03_130.bmp\r\n0014\\0014_01_04_03_135.bmp\r\n0014\\0014_01_04_03_14.bmp\r\n0014\\0014_01_04_03_144.bmp\r\n0014\\0014_01_04_03_149.bmp\r\n0014\\0014_01_04_03_153.bmp\r\n0014\\0014_01_04_03_158.bmp\r\n0014\\0014_01_04_03_162.bmp\r\n0014\\0014_01_04_03_167.bmp\r\n0014\\0014_01_04_03_171.bmp\r\n0014\\0014_01_04_03_176.bmp\r\n0014\\0014_01_04_03_180.bmp\r\n0014\\0014_01_04_03_185.bmp\r\n0014\\0014_01_04_03_19.bmp\r\n0014\\0014_01_04_03_194.bmp\r\n0014\\0014_01_04_03_2.bmp\r\n0014\\0014_01_04_03_203.bmp\r\n0014\\0014_01_04_03_208.bmp\r\n0014\\0014_01_04_03_212.bmp\r\n0014\\0014_01_04_03_217.bmp\r\n0014\\0014_01_04_03_222.bmp\r\n0014\\0014_01_04_03_227.bmp\r\n0014\\0014_01_04_03_232.bmp\r\n0014\\0014_01_04_03_237.bmp\r\n0014\\0014_01_04_03_241.bmp\r\n0014\\0014_01_04_03_246.bmp\r\n0014\\0014_01_04_03_250.bmp\r\n0014\\0014_01_04_03_255.bmp\r\n0014\\0014_01_04_03_26.bmp\r\n0014\\0014_01_04_03_264.bmp\r\n0014\\0014_01_04_03_269.bmp\r\n0014\\0014_01_04_03_273.bmp\r\n0014\\0014_01_04_03_278.bmp\r\n0014\\0014_01_04_03_282.bmp\r\n0014\\0014_01_04_03_287.bmp\r\n0014\\0014_01_04_03_291.bmp\r\n0014\\0014_01_04_03_296.bmp\r\n0014\\0014_01_04_03_30.bmp\r\n0014\\0014_01_04_03_304.bmp\r\n0014\\0014_01_04_03_309.bmp\r\n0014\\0014_01_04_03_313.bmp\r\n0014\\0014_01_04_03_318.bmp\r\n0014\\0014_01_04_03_323.bmp\r\n0014\\0014_01_04_03_328.bmp\r\n0014\\0014_01_04_03_332.bmp\r\n0014\\0014_01_04_03_337.bmp\r\n0014\\0014_01_04_03_341.bmp\r\n0014\\0014_01_04_03_346.bmp\r\n0014\\0014_01_04_03_350.bmp\r\n0014\\0014_01_04_03_355.bmp\r\n0014\\0014_01_04_03_361.bmp\r\n0014\\0014_01_04_03_366.bmp\r\n0014\\0014_01_04_03_370.bmp\r\n0014\\0014_01_04_03_375.bmp\r\n0014\\0014_01_04_03_38.bmp\r\n0014\\0014_01_04_03_384.bmp\r\n0014\\0014_01_04_03_389.bmp\r\n0014\\0014_01_04_03_393.bmp\r\n0014\\0014_01_04_03_398.bmp\r\n0014\\0014_01_04_03_401.bmp\r\n0014\\0014_01_04_03_406.bmp\r\n0014\\0014_01_04_03_410.bmp\r\n0014\\0014_01_04_03_415.bmp\r\n0014\\0014_01_04_03_42.bmp\r\n0014\\0014_01_04_03_424.bmp\r\n0014\\0014_01_04_03_429.bmp\r\n0014\\0014_01_04_03_433.bmp\r\n0014\\0014_01_04_03_438.bmp\r\n0014\\0014_01_04_03_442.bmp\r\n0014\\0014_01_04_03_448.bmp\r\n0014\\0014_01_04_03_452.bmp\r\n0014\\0014_01_04_03_457.bmp\r\n0014\\0014_01_04_03_461.bmp\r\n0014\\0014_01_04_03_466.bmp\r\n0014\\0014_01_04_03_470.bmp\r\n0014\\0014_01_04_03_475.bmp\r\n0014\\0014_01_04_03_480.bmp\r\n0014\\0014_01_04_03_485.bmp\r\n0014\\0014_01_04_03_49.bmp\r\n0014\\0014_01_04_03_494.bmp\r\n0014\\0014_01_04_03_499.bmp\r\n0014\\0014_01_04_03_54.bmp\r\n0014\\0014_01_04_03_59.bmp\r\n0014\\0014_01_04_03_63.bmp\r\n0014\\0014_01_04_03_68.bmp\r\n0014\\0014_01_04_03_72.bmp\r\n0014\\0014_01_04_03_77.bmp\r\n0014\\0014_01_04_03_81.bmp\r\n0014\\0014_01_04_03_86.bmp\r\n0014\\0014_01_04_03_90.bmp\r\n0014\\0014_01_04_03_95.bmp\r\n0014\\0014_01_01_03_0.bmp\r\n0014\\0014_01_01_03_102.bmp\r\n0014\\0014_01_01_03_107.bmp\r\n0014\\0014_01_01_03_111.bmp\r\n0014\\0014_01_01_03_116.bmp\r\n0014\\0014_01_01_03_120.bmp\r\n0014\\0014_01_01_03_125.bmp\r\n0014\\0014_01_01_03_13.bmp\r\n0014\\0014_01_01_03_134.bmp\r\n0014\\0014_01_01_03_14.bmp\r\n0014\\0014_01_01_03_145.bmp\r\n0014\\0014_01_01_03_15.bmp\r\n0014\\0014_01_01_03_154.bmp\r\n0014\\0014_01_01_03_159.bmp\r\n0014\\0014_01_01_03_163.bmp\r\n0014\\0014_01_01_03_168.bmp\r\n0014\\0014_01_01_03_172.bmp\r\n0014\\0014_01_01_03_177.bmp\r\n0014\\0014_01_01_03_181.bmp\r\n0014\\0014_01_01_03_186.bmp\r\n0014\\0014_01_01_03_190.bmp\r\n0014\\0014_01_01_03_195.bmp\r\n0014\\0014_01_01_03_2.bmp\r\n0014\\0014_01_01_03_203.bmp\r\n0014\\0014_01_01_03_208.bmp\r\n0014\\0014_01_01_03_212.bmp\r\n0014\\0014_01_01_03_217.bmp\r\n0014\\0014_01_01_03_221.bmp\r\n0014\\0014_01_01_03_227.bmp\r\n0014\\0014_01_01_03_231.bmp\r\n0014\\0014_01_01_03_236.bmp\r\n0014\\0014_01_01_03_240.bmp\r\n0014\\0014_01_01_03_245.bmp\r\n0014\\0014_01_01_03_25.bmp\r\n0014\\0014_01_01_03_254.bmp\r\n0014\\0014_01_01_03_259.bmp\r\n0014\\0014_01_01_03_263.bmp\r\n0014\\0014_01_01_03_268.bmp\r\n0014\\0014_01_01_03_272.bmp\r\n0014\\0014_01_01_03_277.bmp\r\n0014\\0014_01_01_03_281.bmp\r\n0014\\0014_01_01_03_286.bmp\r\n0014\\0014_01_01_03_290.bmp\r\n0014\\0014_01_01_03_295.bmp\r\n0014\\0014_01_01_03_3.bmp\r\n0014\\0014_01_01_03_303.bmp\r\n0014\\0014_01_01_03_308.bmp\r\n0014\\0014_01_01_03_314.bmp\r\n0014\\0014_01_01_03_32.bmp\r\n0014\\0014_01_01_03_325.bmp\r\n0014\\0014_01_01_03_33.bmp\r\n0014\\0014_01_01_03_336.bmp\r\n0014\\0014_01_01_03_340.bmp\r\n0014\\0014_01_01_03_346.bmp\r\n0014\\0014_01_01_03_350.bmp\r\n0014\\0014_01_01_03_355.bmp\r\n0014\\0014_01_01_03_360.bmp\r\n0014\\0014_01_01_03_365.bmp\r\n0014\\0014_01_01_03_370.bmp\r\n0014\\0014_01_01_03_375.bmp\r\n0014\\0014_01_01_03_380.bmp\r\n0014\\0014_01_01_03_388.bmp\r\n0014\\0014_01_01_03_392.bmp\r\n0014\\0014_01_01_03_398.bmp\r\n0014\\0014_01_01_03_401.bmp\r\n0014\\0014_01_01_03_407.bmp\r\n0014\\0014_01_01_03_412.bmp\r\n0014\\0014_01_01_03_417.bmp\r\n0014\\0014_01_01_03_422.bmp\r\n0014\\0014_01_01_03_428.bmp\r\n0014\\0014_01_01_03_432.bmp\r\n0014\\0014_01_01_03_437.bmp\r\n0014\\0014_01_01_03_441.bmp\r\n0014\\0014_01_01_03_446.bmp\r\n0014\\0014_01_01_03_450.bmp\r\n0014\\0014_01_01_03_455.bmp\r\n0014\\0014_01_01_03_460.bmp\r\n0014\\0014_01_01_03_465.bmp\r\n0014\\0014_01_01_03_47.bmp\r\n0014\\0014_01_01_03_474.bmp\r\n0014\\0014_01_01_03_479.bmp\r\n0014\\0014_01_01_03_484.bmp\r\n0014\\0014_01_01_03_49.bmp\r\n0014\\0014_01_01_03_498.bmp\r\n0014\\0014_01_01_03_52.bmp\r\n0014\\0014_01_01_03_57.bmp\r\n0014\\0014_01_01_03_61.bmp\r\n0014\\0014_01_01_03_68.bmp\r\n0014\\0014_01_01_03_74.bmp\r\n0014\\0014_01_01_03_8.bmp\r\n0014\\0014_01_01_03_84.bmp\r\n0014\\0014_01_01_03_89.bmp\r\n0014\\0014_01_01_03_93.bmp\r\n0014\\0014_01_01_03_98.bmp\r\n0014\\0014_01_02_03_102.bmp\r\n0014\\0014_01_02_03_107.bmp\r\n0014\\0014_01_02_03_117.bmp\r\n0014\\0014_01_02_03_126.bmp\r\n0014\\0014_01_02_03_133.bmp\r\n0014\\0014_01_02_03_139.bmp\r\n0014\\0014_01_02_03_145.bmp\r\n0014\\0014_01_02_03_15.bmp\r\n0014\\0014_01_02_03_157.bmp\r\n0014\\0014_01_02_03_162.bmp\r\n0014\\0014_01_02_03_168.bmp\r\n0014\\0014_01_02_03_173.bmp\r\n0014\\0014_01_02_03_178.bmp\r\n0014\\0014_01_02_03_185.bmp\r\n0014\\0014_01_02_03_190.bmp\r\n0014\\0014_01_02_03_205.bmp\r\n0014\\0014_01_02_03_216.bmp\r\n0014\\0014_01_02_03_225.bmp\r\n0014\\0014_01_02_03_23.bmp\r\n0014\\0014_01_02_03_236.bmp\r\n0014\\0014_01_02_03_240.bmp\r\n0014\\0014_01_02_03_248.bmp\r\n0014\\0014_01_02_03_257.bmp\r\n0014\\0014_01_02_03_265.bmp\r\n0014\\0014_01_02_03_276.bmp\r\n0014\\0014_01_02_03_285.bmp\r\n0014\\0014_01_02_03_290.bmp\r\n0014\\0014_01_02_03_306.bmp\r\n0014\\0014_01_02_03_317.bmp\r\n0014\\0014_01_02_03_321.bmp\r\n0014\\0014_01_02_03_33.bmp\r\n0014\\0014_01_02_03_34.bmp\r\n0014\\0014_01_02_03_35.bmp\r\n0014\\0014_01_02_03_361.bmp\r\n0014\\0014_01_02_03_366.bmp\r\n0014\\0014_01_02_03_374.bmp\r\n0014\\0014_01_02_03_383.bmp\r\n0014\\0014_01_02_03_392.bmp\r\n0014\\0014_01_02_03_40.bmp\r\n0014\\0014_01_02_03_408.bmp\r\n0014\\0014_01_02_03_418.bmp\r\n0014\\0014_01_02_03_43.bmp\r\n0014\\0014_01_02_03_44.bmp\r\n0014\\0014_01_02_03_451.bmp\r\n0014\\0014_01_02_03_461.bmp\r\n0014\\0014_01_02_03_471.bmp\r\n0014\\0014_01_02_03_487.bmp\r\n0014\\0014_01_02_03_492.bmp\r\n0014\\0014_01_02_03_52.bmp\r\n0014\\0014_01_02_03_62.bmp\r\n0014\\0014_01_02_03_68.bmp\r\n0014\\0014_01_02_03_73.bmp\r\n0014\\0014_01_02_03_84.bmp\r\n0014\\0014_01_02_03_91.bmp\r\n0014\\0014_01_02_03_96.bmp\r\n0014\\0014_01_08_03_0.bmp\r\n0014\\0014_01_08_03_102.bmp\r\n0014\\0014_01_08_03_107.bmp\r\n0014\\0014_01_08_03_111.bmp\r\n0014\\0014_01_08_03_117.bmp\r\n0014\\0014_01_08_03_122.bmp\r\n0014\\0014_01_08_03_127.bmp\r\n0014\\0014_01_08_03_131.bmp\r\n0014\\0014_01_08_03_136.bmp\r\n0014\\0014_01_08_03_140.bmp\r\n0014\\0014_01_08_03_145.bmp\r\n0014\\0014_01_08_03_15.bmp\r\n0014\\0014_01_08_03_155.bmp\r\n0014\\0014_01_08_03_16.bmp\r\n0014\\0014_01_08_03_164.bmp\r\n0014\\0014_01_08_03_169.bmp\r\n0014\\0014_01_08_03_173.bmp\r\n0014\\0014_01_08_03_178.bmp\r\n0014\\0014_01_08_03_182.bmp\r\n0014\\0014_01_08_03_187.bmp\r\n0014\\0014_01_08_03_191.bmp\r\n0014\\0014_01_08_03_199.bmp\r\n0014\\0014_01_08_03_202.bmp\r\n0014\\0014_01_08_03_207.bmp\r\n0014\\0014_01_08_03_211.bmp\r\n0014\\0014_01_08_03_216.bmp\r\n0014\\0014_01_08_03_220.bmp\r\n0014\\0014_01_08_03_226.bmp\r\n0014\\0014_01_08_03_230.bmp\r\n0014\\0014_01_08_03_24.bmp\r\n0014\\0014_01_08_03_244.bmp\r\n0014\\0014_01_08_03_249.bmp\r\n0014\\0014_01_08_03_253.bmp\r\n0014\\0014_01_08_03_258.bmp\r\n0014\\0014_01_08_03_262.bmp\r\n0014\\0014_01_08_03_267.bmp\r\n0014\\0014_01_08_03_272.bmp\r\n0014\\0014_01_08_03_277.bmp\r\n0014\\0014_01_08_03_281.bmp\r\n0014\\0014_01_08_03_287.bmp\r\n0014\\0014_01_08_03_292.bmp\r\n0014\\0014_01_08_03_30.bmp\r\n0014\\0014_01_08_03_306.bmp\r\n0014\\0014_01_08_03_310.bmp\r\n0014\\0014_01_08_03_315.bmp\r\n0014\\0014_01_08_03_323.bmp\r\n0014\\0014_01_08_03_328.bmp\r\n0014\\0014_01_08_03_332.bmp\r\n0014\\0014_01_08_03_337.bmp\r\n0014\\0014_01_08_03_341.bmp\r\n0014\\0014_01_08_03_350.bmp\r\n0014\\0014_01_08_03_356.bmp\r\n0014\\0014_01_08_03_360.bmp\r\n0014\\0014_01_08_03_365.bmp\r\n0014\\0014_01_08_03_37.bmp\r\n0014\\0014_01_08_03_374.bmp\r\n0014\\0014_01_08_03_381.bmp\r\n0014\\0014_01_08_03_391.bmp\r\n0014\\0014_01_08_03_396.bmp\r\n0014\\0014_01_08_03_40.bmp\r\n0014\\0014_01_08_03_404.bmp\r\n0014\\0014_01_08_03_409.bmp\r\n0014\\0014_01_08_03_413.bmp\r\n0014\\0014_01_08_03_418.bmp\r\n0014\\0014_01_08_03_422.bmp\r\n0014\\0014_01_08_03_427.bmp\r\n0014\\0014_01_08_03_431.bmp\r\n0014\\0014_01_08_03_436.bmp\r\n0014\\0014_01_08_03_440.bmp\r\n0014\\0014_01_08_03_445.bmp\r\n0014\\0014_01_08_03_45.bmp\r\n0014\\0014_01_08_03_454.bmp\r\n0014\\0014_01_08_03_459.bmp\r\n0014\\0014_01_08_03_463.bmp\r\n0014\\0014_01_08_03_468.bmp\r\n0014\\0014_01_08_03_472.bmp\r\n0014\\0014_01_08_03_477.bmp\r\n0014\\0014_01_08_03_481.bmp\r\n0014\\0014_01_08_03_488.bmp\r\n0014\\0014_01_08_03_492.bmp\r\n0014\\0014_01_08_03_497.bmp\r\n0014\\0014_01_08_03_51.bmp\r\n0014\\0014_01_08_03_56.bmp\r\n0014\\0014_01_08_03_60.bmp\r\n0014\\0014_01_08_03_65.bmp\r\n0014\\0014_01_08_03_7.bmp\r\n0014\\0014_01_08_03_74.bmp\r\n0014\\0014_01_08_03_79.bmp\r\n0014\\0014_01_08_03_83.bmp\r\n0014\\0014_01_08_03_88.bmp\r\n0014\\0014_01_08_03_92.bmp\r\n0014\\0014_01_08_03_97.bmp\r\n0016\\0016_01_03_03_0.bmp\r\n0016\\0016_01_03_03_102.bmp\r\n0016\\0016_01_03_03_109.bmp\r\n0016\\0016_01_03_03_113.bmp\r\n0016\\0016_01_03_03_118.bmp\r\n0016\\0016_01_03_03_122.bmp\r\n0016\\0016_01_03_03_127.bmp\r\n0016\\0016_01_03_03_131.bmp\r\n0016\\0016_01_03_03_136.bmp\r\n0016\\0016_01_03_03_140.bmp\r\n0016\\0016_01_03_03_145.bmp\r\n0016\\0016_01_03_03_15.bmp\r\n0016\\0016_01_03_03_154.bmp\r\n0016\\0016_01_03_03_159.bmp\r\n0016\\0016_01_03_03_163.bmp\r\n0016\\0016_01_03_03_168.bmp\r\n0016\\0016_01_03_03_172.bmp\r\n0016\\0016_01_03_03_177.bmp\r\n0016\\0016_01_03_03_181.bmp\r\n0016\\0016_01_03_03_186.bmp\r\n0016\\0016_01_03_03_190.bmp\r\n0016\\0016_01_03_03_195.bmp\r\n0016\\0016_01_03_03_2.bmp\r\n0016\\0016_01_03_03_203.bmp\r\n0016\\0016_01_03_03_208.bmp\r\n0016\\0016_01_03_03_213.bmp\r\n0016\\0016_01_03_03_218.bmp\r\n0016\\0016_01_03_03_222.bmp\r\n0016\\0016_01_03_03_227.bmp\r\n0016\\0016_01_03_03_231.bmp\r\n0016\\0016_01_03_03_236.bmp\r\n0016\\0016_01_03_03_240.bmp\r\n0016\\0016_01_03_03_245.bmp\r\n0016\\0016_01_03_03_25.bmp\r\n0016\\0016_01_03_03_254.bmp\r\n0016\\0016_01_03_03_259.bmp\r\n0016\\0016_01_03_03_263.bmp\r\n0016\\0016_01_03_03_268.bmp\r\n0016\\0016_01_03_03_272.bmp\r\n0016\\0016_01_03_03_277.bmp\r\n0016\\0016_01_03_03_281.bmp\r\n0016\\0016_01_03_03_286.bmp\r\n0016\\0016_01_03_03_290.bmp\r\n0016\\0016_01_03_03_295.bmp\r\n0016\\0016_01_03_03_3.bmp\r\n0016\\0016_01_03_03_304.bmp\r\n0016\\0016_01_03_03_31.bmp\r\n0016\\0016_01_03_03_314.bmp\r\n0016\\0016_01_03_03_319.bmp\r\n0016\\0016_01_03_03_324.bmp\r\n0016\\0016_01_03_03_329.bmp\r\n0016\\0016_01_03_03_333.bmp\r\n0016\\0016_01_03_03_338.bmp\r\n0016\\0016_01_03_03_342.bmp\r\n0016\\0016_01_03_03_349.bmp\r\n0016\\0016_01_03_03_353.bmp\r\n0016\\0016_01_03_03_359.bmp\r\n0016\\0016_01_03_03_363.bmp\r\n0016\\0016_01_03_03_369.bmp\r\n0016\\0016_01_03_03_373.bmp\r\n0016\\0016_01_03_03_378.bmp\r\n0016\\0016_01_03_03_382.bmp\r\n0016\\0016_01_03_03_387.bmp\r\n0016\\0016_01_03_03_391.bmp\r\n0016\\0016_01_03_03_396.bmp\r\n0016\\0016_01_03_03_40.bmp\r\n0016\\0016_01_03_03_404.bmp\r\n0016\\0016_01_03_03_409.bmp\r\n0016\\0016_01_03_03_413.bmp\r\n0016\\0016_01_03_03_418.bmp\r\n0016\\0016_01_03_03_422.bmp\r\n0016\\0016_01_03_03_427.bmp\r\n0016\\0016_01_03_03_431.bmp\r\n0016\\0016_01_03_03_436.bmp\r\n0016\\0016_01_03_03_440.bmp\r\n0016\\0016_01_03_03_445.bmp\r\n0016\\0016_01_03_03_45.bmp\r\n0016\\0016_01_03_03_454.bmp\r\n0016\\0016_01_03_03_459.bmp\r\n0016\\0016_01_03_03_463.bmp\r\n0016\\0016_01_03_03_468.bmp\r\n0016\\0016_01_03_03_472.bmp\r\n0016\\0016_01_03_03_477.bmp\r\n0016\\0016_01_03_03_481.bmp\r\n0016\\0016_01_03_03_486.bmp\r\n0016\\0016_01_03_03_490.bmp\r\n0016\\0016_01_03_03_495.bmp\r\n0016\\0016_01_03_03_5.bmp\r\n0016\\0016_01_03_03_54.bmp\r\n0016\\0016_01_03_03_59.bmp\r\n0016\\0016_01_03_03_63.bmp\r\n0016\\0016_01_03_03_68.bmp\r\n0016\\0016_01_03_03_72.bmp\r\n0016\\0016_01_03_03_77.bmp\r\n0016\\0016_01_03_03_81.bmp\r\n0016\\0016_01_03_03_86.bmp\r\n0016\\0016_01_03_03_90.bmp\r\n0016\\0016_01_03_03_95.bmp\r\n0016\\0016_01_04_03_0.bmp\r\n0016\\0016_01_04_03_102.bmp\r\n0016\\0016_01_04_03_107.bmp\r\n0016\\0016_01_04_03_111.bmp\r\n0016\\0016_01_04_03_116.bmp\r\n0016\\0016_01_04_03_120.bmp\r\n0016\\0016_01_04_03_125.bmp\r\n0016\\0016_01_04_03_13.bmp\r\n0016\\0016_01_04_03_135.bmp\r\n0016\\0016_01_04_03_14.bmp\r\n0016\\0016_01_04_03_144.bmp\r\n0016\\0016_01_04_03_149.bmp\r\n0016\\0016_01_04_03_153.bmp\r\n0016\\0016_01_04_03_158.bmp\r\n0016\\0016_01_04_03_162.bmp\r\n0016\\0016_01_04_03_167.bmp\r\n0016\\0016_01_04_03_171.bmp\r\n0016\\0016_01_04_03_176.bmp\r\n0016\\0016_01_04_03_180.bmp\r\n0016\\0016_01_04_03_185.bmp\r\n0016\\0016_01_04_03_19.bmp\r\n0016\\0016_01_04_03_194.bmp\r\n0016\\0016_01_04_03_199.bmp\r\n0016\\0016_01_04_03_202.bmp\r\n0016\\0016_01_04_03_207.bmp\r\n0016\\0016_01_04_03_211.bmp\r\n0016\\0016_01_04_03_216.bmp\r\n0016\\0016_01_04_03_220.bmp\r\n0016\\0016_01_04_03_225.bmp\r\n0016\\0016_01_04_03_23.bmp\r\n0016\\0016_01_04_03_234.bmp\r\n0016\\0016_01_04_03_239.bmp\r\n0016\\0016_01_04_03_243.bmp\r\n0016\\0016_01_04_03_248.bmp\r\n0016\\0016_01_04_03_252.bmp\r\n0016\\0016_01_04_03_257.bmp\r\n0016\\0016_01_04_03_261.bmp\r\n0016\\0016_01_04_03_266.bmp\r\n0016\\0016_01_04_03_270.bmp\r\n0016\\0016_01_04_03_275.bmp\r\n0016\\0016_01_04_03_28.bmp\r\n0016\\0016_01_04_03_284.bmp\r\n0016\\0016_01_04_03_289.bmp\r\n0016\\0016_01_04_03_293.bmp\r\n0016\\0016_01_04_03_298.bmp\r\n0016\\0016_01_04_03_301.bmp\r\n0016\\0016_01_04_03_306.bmp\r\n0016\\0016_01_04_03_310.bmp\r\n0016\\0016_01_04_03_315.bmp\r\n0016\\0016_01_04_03_32.bmp\r\n0016\\0016_01_04_03_324.bmp\r\n0016\\0016_01_04_03_329.bmp\r\n0016\\0016_01_04_03_333.bmp\r\n0016\\0016_01_04_03_338.bmp\r\n0016\\0016_01_04_03_342.bmp\r\n0016\\0016_01_04_03_347.bmp\r\n0016\\0016_01_04_03_351.bmp\r\n0016\\0016_01_04_03_356.bmp\r\n0016\\0016_01_04_03_360.bmp\r\n0016\\0016_01_04_03_365.bmp\r\n0016\\0016_01_04_03_370.bmp\r\n0016\\0016_01_04_03_375.bmp\r\n0016\\0016_01_04_03_38.bmp\r\n0016\\0016_01_04_03_384.bmp\r\n0016\\0016_01_04_03_390.bmp\r\n0016\\0016_01_04_03_395.bmp\r\n0016\\0016_01_04_03_4.bmp\r\n0016\\0016_01_04_03_403.bmp\r\n0016\\0016_01_04_03_408.bmp\r\n0016\\0016_01_04_03_412.bmp\r\n0016\\0016_01_04_03_417.bmp\r\n0016\\0016_01_04_03_421.bmp\r\n0016\\0016_01_04_03_426.bmp\r\n0016\\0016_01_04_03_430.bmp\r\n0016\\0016_01_04_03_435.bmp\r\n0016\\0016_01_04_03_44.bmp\r\n0016\\0016_01_04_03_444.bmp\r\n0016\\0016_01_04_03_449.bmp\r\n0016\\0016_01_04_03_453.bmp\r\n0016\\0016_01_04_03_458.bmp\r\n0016\\0016_01_04_03_462.bmp\r\n0016\\0016_01_04_03_467.bmp\r\n0016\\0016_01_04_03_476.bmp\r\n0016\\0016_01_04_03_480.bmp\r\n0016\\0016_01_04_03_485.bmp\r\n0016\\0016_01_04_03_49.bmp\r\n0016\\0016_01_04_03_494.bmp\r\n0016\\0016_01_04_03_499.bmp\r\n0016\\0016_01_04_03_53.bmp\r\n0016\\0016_01_04_03_58.bmp\r\n0016\\0016_01_04_03_62.bmp\r\n0016\\0016_01_04_03_67.bmp\r\n0016\\0016_01_04_03_71.bmp\r\n0016\\0016_01_04_03_76.bmp\r\n0016\\0016_01_04_03_80.bmp\r\n0016\\0016_01_04_03_85.bmp\r\n0016\\0016_01_04_03_91.bmp\r\n0016\\0016_01_04_03_96.bmp\r\n0016\\0016_01_01_03_100.bmp\r\n0016\\0016_01_01_03_105.bmp\r\n0016\\0016_01_01_03_110.bmp\r\n0016\\0016_01_01_03_115.bmp\r\n0016\\0016_01_01_03_120.bmp\r\n0016\\0016_01_01_03_127.bmp\r\n0016\\0016_01_01_03_131.bmp\r\n0016\\0016_01_01_03_137.bmp\r\n0016\\0016_01_01_03_141.bmp\r\n0016\\0016_01_01_03_149.bmp\r\n0016\\0016_01_01_03_154.bmp\r\n0016\\0016_01_01_03_160.bmp\r\n0016\\0016_01_01_03_166.bmp\r\n0016\\0016_01_01_03_170.bmp\r\n0016\\0016_01_01_03_179.bmp\r\n0016\\0016_01_01_03_183.bmp\r\n0016\\0016_01_01_03_188.bmp\r\n0016\\0016_01_01_03_194.bmp\r\n0016\\0016_01_01_03_2.bmp\r\n0016\\0016_01_01_03_207.bmp\r\n0016\\0016_01_01_03_211.bmp\r\n0016\\0016_01_01_03_216.bmp\r\n0016\\0016_01_01_03_220.bmp\r\n0016\\0016_01_01_03_225.bmp\r\n0016\\0016_01_01_03_231.bmp\r\n0016\\0016_01_01_03_236.bmp\r\n0016\\0016_01_01_03_242.bmp\r\n0016\\0016_01_01_03_247.bmp\r\n0016\\0016_01_01_03_252.bmp\r\n0016\\0016_01_01_03_259.bmp\r\n0016\\0016_01_01_03_263.bmp\r\n0016\\0016_01_01_03_268.bmp\r\n0016\\0016_01_01_03_273.bmp\r\n0016\\0016_01_01_03_279.bmp\r\n0016\\0016_01_01_03_284.bmp\r\n0016\\0016_01_01_03_290.bmp\r\n0016\\0016_01_01_03_297.bmp\r\n0016\\0016_01_01_03_301.bmp\r\n0016\\0016_01_01_03_307.bmp\r\n0016\\0016_01_01_03_311.bmp\r\n0016\\0016_01_01_03_316.bmp\r\n0016\\0016_01_01_03_320.bmp\r\n0016\\0016_01_01_03_325.bmp\r\n0016\\0016_01_01_03_33.bmp\r\n0016\\0016_01_01_03_336.bmp\r\n0016\\0016_01_01_03_340.bmp\r\n0016\\0016_01_01_03_345.bmp\r\n0016\\0016_01_01_03_35.bmp\r\n0016\\0016_01_01_03_354.bmp\r\n0016\\0016_01_01_03_359.bmp\r\n0016\\0016_01_01_03_363.bmp\r\n0016\\0016_01_01_03_368.bmp\r\n0016\\0016_01_01_03_372.bmp\r\n0016\\0016_01_01_03_377.bmp\r\n0016\\0016_01_01_03_381.bmp\r\n0016\\0016_01_01_03_386.bmp\r\n0016\\0016_01_01_03_391.bmp\r\n0016\\0016_01_01_03_396.bmp\r\n0016\\0016_01_01_03_400.bmp\r\n0016\\0016_01_01_03_407.bmp\r\n0016\\0016_01_01_03_412.bmp\r\n0016\\0016_01_01_03_419.bmp\r\n0016\\0016_01_01_03_424.bmp\r\n0016\\0016_01_01_03_429.bmp\r\n0016\\0016_01_01_03_434.bmp\r\n0016\\0016_01_01_03_439.bmp\r\n0016\\0016_01_01_03_443.bmp\r\n0016\\0016_01_01_03_448.bmp\r\n0016\\0016_01_01_03_455.bmp\r\n0016\\0016_01_01_03_46.bmp\r\n0016\\0016_01_01_03_465.bmp\r\n0016\\0016_01_01_03_47.bmp\r\n0016\\0016_01_01_03_474.bmp\r\n0016\\0016_01_01_03_479.bmp\r\n0016\\0016_01_01_03_483.bmp\r\n0016\\0016_01_01_03_488.bmp\r\n0016\\0016_01_01_03_493.bmp\r\n0016\\0016_01_01_03_498.bmp\r\n0016\\0016_01_01_03_52.bmp\r\n0016\\0016_01_01_03_60.bmp\r\n0016\\0016_01_01_03_66.bmp\r\n0016\\0016_01_01_03_71.bmp\r\n0016\\0016_01_01_03_76.bmp\r\n0016\\0016_01_01_03_80.bmp\r\n0016\\0016_01_01_03_85.bmp\r\n0016\\0016_01_01_03_91.bmp\r\n0016\\0016_01_01_03_96.bmp\r\n0016\\0016_01_02_03_0.bmp\r\n0016\\0016_01_02_03_102.bmp\r\n0016\\0016_01_02_03_108.bmp\r\n0016\\0016_01_02_03_112.bmp\r\n0016\\0016_01_02_03_119.bmp\r\n0016\\0016_01_02_03_123.bmp\r\n0016\\0016_01_02_03_128.bmp\r\n0016\\0016_01_02_03_132.bmp\r\n0016\\0016_01_02_03_138.bmp\r\n0016\\0016_01_02_03_142.bmp\r\n0016\\0016_01_02_03_148.bmp\r\n0016\\0016_01_02_03_153.bmp\r\n0016\\0016_01_02_03_161.bmp\r\n0016\\0016_01_02_03_169.bmp\r\n0016\\0016_01_02_03_174.bmp\r\n0016\\0016_01_02_03_179.bmp\r\n0016\\0016_01_02_03_183.bmp\r\n0016\\0016_01_02_03_188.bmp\r\n0016\\0016_01_02_03_192.bmp\r\n0016\\0016_01_02_03_197.bmp\r\n0016\\0016_01_02_03_200.bmp\r\n0016\\0016_01_02_03_207.bmp\r\n0016\\0016_01_02_03_211.bmp\r\n0016\\0016_01_02_03_216.bmp\r\n0016\\0016_01_02_03_220.bmp\r\n0016\\0016_01_02_03_225.bmp\r\n0016\\0016_01_02_03_230.bmp\r\n0016\\0016_01_02_03_235.bmp\r\n0016\\0016_01_02_03_24.bmp\r\n0016\\0016_01_02_03_245.bmp\r\n0016\\0016_01_02_03_25.bmp\r\n0016\\0016_01_02_03_256.bmp\r\n0016\\0016_01_02_03_260.bmp\r\n0016\\0016_01_02_03_265.bmp\r\n0016\\0016_01_02_03_27.bmp\r\n0016\\0016_01_02_03_274.bmp\r\n0016\\0016_01_02_03_279.bmp\r\n0016\\0016_01_02_03_283.bmp\r\n0016\\0016_01_02_03_288.bmp\r\n0016\\0016_01_02_03_292.bmp\r\n0016\\0016_01_02_03_297.bmp\r\n0016\\0016_01_02_03_300.bmp\r\n0016\\0016_01_02_03_305.bmp\r\n0016\\0016_01_02_03_31.bmp\r\n0016\\0016_01_02_03_314.bmp\r\n0016\\0016_01_02_03_320.bmp\r\n0016\\0016_01_02_03_325.bmp\r\n0016\\0016_01_02_03_332.bmp\r\n0016\\0016_01_02_03_34.bmp\r\n0016\\0016_01_02_03_346.bmp\r\n0016\\0016_01_02_03_350.bmp\r\n0016\\0016_01_02_03_358.bmp\r\n0016\\0016_01_02_03_363.bmp\r\n0016\\0016_01_02_03_368.bmp\r\n0016\\0016_01_02_03_375.bmp\r\n0016\\0016_01_02_03_38.bmp\r\n0016\\0016_01_02_03_384.bmp\r\n0016\\0016_01_02_03_389.bmp\r\n0016\\0016_01_02_03_393.bmp\r\n0016\\0016_01_02_03_398.bmp\r\n0016\\0016_01_02_03_401.bmp\r\n0016\\0016_01_02_03_406.bmp\r\n0016\\0016_01_02_03_411.bmp\r\n0016\\0016_01_02_03_416.bmp\r\n0016\\0016_01_02_03_422.bmp\r\n0016\\0016_01_02_03_427.bmp\r\n0016\\0016_01_02_03_434.bmp\r\n0016\\0016_01_02_03_439.bmp\r\n0016\\0016_01_02_03_445.bmp\r\n0016\\0016_01_02_03_450.bmp\r\n0016\\0016_01_02_03_458.bmp\r\n0016\\0016_01_02_03_464.bmp\r\n0016\\0016_01_02_03_474.bmp\r\n0016\\0016_01_02_03_481.bmp\r\n0016\\0016_01_02_03_486.bmp\r\n0016\\0016_01_02_03_492.bmp\r\n0016\\0016_01_02_03_497.bmp\r\n0016\\0016_01_02_03_51.bmp\r\n0016\\0016_01_02_03_56.bmp\r\n0016\\0016_01_02_03_60.bmp\r\n0016\\0016_01_02_03_65.bmp\r\n0016\\0016_01_02_03_7.bmp\r\n0016\\0016_01_02_03_74.bmp\r\n0016\\0016_01_02_03_79.bmp\r\n0016\\0016_01_02_03_84.bmp\r\n0016\\0016_01_02_03_89.bmp\r\n0016\\0016_01_02_03_94.bmp\r\n0016\\0016_01_02_03_99.bmp\r\n0016\\0016_01_08_03_0.bmp\r\n0016\\0016_01_08_03_102.bmp\r\n0016\\0016_01_08_03_107.bmp\r\n0016\\0016_01_08_03_111.bmp\r\n0016\\0016_01_08_03_116.bmp\r\n0016\\0016_01_08_03_120.bmp\r\n0016\\0016_01_08_03_125.bmp\r\n0016\\0016_01_08_03_13.bmp\r\n0016\\0016_01_08_03_134.bmp\r\n0016\\0016_01_08_03_141.bmp\r\n0016\\0016_01_08_03_146.bmp\r\n0016\\0016_01_08_03_150.bmp\r\n0016\\0016_01_08_03_156.bmp\r\n0016\\0016_01_08_03_160.bmp\r\n0016\\0016_01_08_03_165.bmp\r\n0016\\0016_01_08_03_17.bmp\r\n0016\\0016_01_08_03_174.bmp\r\n0016\\0016_01_08_03_179.bmp\r\n0016\\0016_01_08_03_183.bmp\r\n0016\\0016_01_08_03_188.bmp\r\n0016\\0016_01_08_03_192.bmp\r\n0016\\0016_01_08_03_197.bmp\r\n0016\\0016_01_08_03_200.bmp\r\n0016\\0016_01_08_03_205.bmp\r\n0016\\0016_01_08_03_21.bmp\r\n0016\\0016_01_08_03_214.bmp\r\n0016\\0016_01_08_03_219.bmp\r\n0016\\0016_01_08_03_223.bmp\r\n0016\\0016_01_08_03_228.bmp\r\n0016\\0016_01_08_03_232.bmp\r\n0016\\0016_01_08_03_237.bmp\r\n0016\\0016_01_08_03_241.bmp\r\n0016\\0016_01_08_03_246.bmp\r\n0016\\0016_01_08_03_250.bmp\r\n0016\\0016_01_08_03_255.bmp\r\n0016\\0016_01_08_03_26.bmp\r\n0016\\0016_01_08_03_264.bmp\r\n0016\\0016_01_08_03_269.bmp\r\n0016\\0016_01_08_03_273.bmp\r\n0016\\0016_01_08_03_278.bmp\r\n0016\\0016_01_08_03_282.bmp\r\n0016\\0016_01_08_03_287.bmp\r\n0016\\0016_01_08_03_291.bmp\r\n0016\\0016_01_08_03_296.bmp\r\n0016\\0016_01_08_03_30.bmp\r\n0016\\0016_01_08_03_304.bmp\r\n0016\\0016_01_08_03_309.bmp\r\n0016\\0016_01_08_03_313.bmp\r\n0016\\0016_01_08_03_318.bmp\r\n0016\\0016_01_08_03_322.bmp\r\n0016\\0016_01_08_03_327.bmp\r\n0016\\0016_01_08_03_331.bmp\r\n0016\\0016_01_08_03_336.bmp\r\n0016\\0016_01_08_03_340.bmp\r\n0016\\0016_01_08_03_345.bmp\r\n0016\\0016_01_08_03_35.bmp\r\n0016\\0016_01_08_03_354.bmp\r\n0016\\0016_01_08_03_359.bmp\r\n0016\\0016_01_08_03_363.bmp\r\n0016\\0016_01_08_03_368.bmp\r\n0016\\0016_01_08_03_372.bmp\r\n0016\\0016_01_08_03_377.bmp\r\n0016\\0016_01_08_03_381.bmp\r\n0016\\0016_01_08_03_386.bmp\r\n0016\\0016_01_08_03_391.bmp\r\n0016\\0016_01_08_03_396.bmp\r\n0016\\0016_01_08_03_40.bmp\r\n0016\\0016_01_08_03_405.bmp\r\n0016\\0016_01_08_03_414.bmp\r\n0016\\0016_01_08_03_419.bmp\r\n0016\\0016_01_08_03_424.bmp\r\n0016\\0016_01_08_03_429.bmp\r\n0016\\0016_01_08_03_433.bmp\r\n0016\\0016_01_08_03_439.bmp\r\n0016\\0016_01_08_03_443.bmp\r\n0016\\0016_01_08_03_448.bmp\r\n0016\\0016_01_08_03_452.bmp\r\n0016\\0016_01_08_03_457.bmp\r\n0016\\0016_01_08_03_461.bmp\r\n0016\\0016_01_08_03_466.bmp\r\n0016\\0016_01_08_03_470.bmp\r\n0016\\0016_01_08_03_475.bmp\r\n0016\\0016_01_08_03_48.bmp\r\n0016\\0016_01_08_03_484.bmp\r\n0016\\0016_01_08_03_489.bmp\r\n0016\\0016_01_08_03_493.bmp\r\n0016\\0016_01_08_03_498.bmp\r\n0016\\0016_01_08_03_52.bmp\r\n0016\\0016_01_08_03_57.bmp\r\n0016\\0016_01_08_03_61.bmp\r\n0016\\0016_01_08_03_66.bmp\r\n0016\\0016_01_08_03_71.bmp\r\n0016\\0016_01_08_03_77.bmp\r\n0016\\0016_01_08_03_81.bmp\r\n0016\\0016_01_08_03_86.bmp\r\n0016\\0016_01_08_03_90.bmp\r\n0016\\0016_01_08_03_95.bmp\r\n0010\\0010_01_01_03_0.bmp\r\n0010\\0010_01_01_03_102.bmp\r\n0010\\0010_01_01_03_107.bmp\r\n0010\\0010_01_01_03_111.bmp\r\n0010\\0010_01_01_03_116.bmp\r\n0010\\0010_01_01_03_120.bmp\r\n0010\\0010_01_01_03_125.bmp\r\n0010\\0010_01_01_03_13.bmp\r\n0010\\0010_01_01_03_135.bmp\r\n0010\\0010_01_01_03_14.bmp\r\n0010\\0010_01_01_03_144.bmp\r\n0010\\0010_01_01_03_149.bmp\r\n0010\\0010_01_01_03_154.bmp\r\n0010\\0010_01_01_03_159.bmp\r\n0010\\0010_01_01_03_164.bmp\r\n0010\\0010_01_01_03_169.bmp\r\n0010\\0010_01_01_03_174.bmp\r\n0010\\0010_01_01_03_18.bmp\r\n0010\\0010_01_01_03_184.bmp\r\n0010\\0010_01_01_03_189.bmp\r\n0010\\0010_01_01_03_193.bmp\r\n0010\\0010_01_01_03_198.bmp\r\n0010\\0010_01_01_03_201.bmp\r\n0010\\0010_01_01_03_206.bmp\r\n0010\\0010_01_01_03_212.bmp\r\n0010\\0010_01_01_03_217.bmp\r\n0010\\0010_01_01_03_221.bmp\r\n0010\\0010_01_01_03_226.bmp\r\n0010\\0010_01_01_03_230.bmp\r\n0010\\0010_01_01_03_235.bmp\r\n0010\\0010_01_01_03_24.bmp\r\n0010\\0010_01_01_03_245.bmp\r\n0010\\0010_01_01_03_25.bmp\r\n0010\\0010_01_01_03_254.bmp\r\n0010\\0010_01_01_03_259.bmp\r\n0010\\0010_01_01_03_263.bmp\r\n0010\\0010_01_01_03_268.bmp\r\n0010\\0010_01_01_03_272.bmp\r\n0010\\0010_01_01_03_277.bmp\r\n0010\\0010_01_01_03_281.bmp\r\n0010\\0010_01_01_03_288.bmp\r\n0010\\0010_01_01_03_292.bmp\r\n0010\\0010_01_01_03_298.bmp\r\n0010\\0010_01_01_03_301.bmp\r\n0010\\0010_01_01_03_307.bmp\r\n0010\\0010_01_01_03_311.bmp\r\n0010\\0010_01_01_03_316.bmp\r\n0010\\0010_01_01_03_320.bmp\r\n0010\\0010_01_01_03_325.bmp\r\n0010\\0010_01_01_03_33.bmp\r\n0010\\0010_01_01_03_335.bmp\r\n0010\\0010_01_01_03_34.bmp\r\n0010\\0010_01_01_03_344.bmp\r\n0010\\0010_01_01_03_349.bmp\r\n0010\\0010_01_01_03_353.bmp\r\n0010\\0010_01_01_03_358.bmp\r\n0010\\0010_01_01_03_363.bmp\r\n0010\\0010_01_01_03_368.bmp\r\n0010\\0010_01_01_03_372.bmp\r\n0010\\0010_01_01_03_377.bmp\r\n0010\\0010_01_01_03_381.bmp\r\n0010\\0010_01_01_03_388.bmp\r\n0010\\0010_01_01_03_392.bmp\r\n0010\\0010_01_01_03_397.bmp\r\n0010\\0010_01_01_03_400.bmp\r\n0010\\0010_01_01_03_406.bmp\r\n0010\\0010_01_01_03_410.bmp\r\n0010\\0010_01_01_03_416.bmp\r\n0010\\0010_01_01_03_421.bmp\r\n0010\\0010_01_01_03_426.bmp\r\n0010\\0010_01_01_03_430.bmp\r\n0010\\0010_01_01_03_436.bmp\r\n0010\\0010_01_01_03_440.bmp\r\n0010\\0010_01_01_03_445.bmp\r\n0010\\0010_01_01_03_45.bmp\r\n0010\\0010_01_01_03_454.bmp\r\n0010\\0010_01_01_03_459.bmp\r\n0010\\0010_01_01_03_463.bmp\r\n0010\\0010_01_01_03_468.bmp\r\n0010\\0010_01_01_03_472.bmp\r\n0010\\0010_01_01_03_478.bmp\r\n0010\\0010_01_01_03_482.bmp\r\n0010\\0010_01_01_03_487.bmp\r\n0010\\0010_01_01_03_491.bmp\r\n0010\\0010_01_01_03_496.bmp\r\n0010\\0010_01_01_03_50.bmp\r\n0010\\0010_01_01_03_55.bmp\r\n0010\\0010_01_01_03_6.bmp\r\n0010\\0010_01_01_03_64.bmp\r\n0010\\0010_01_01_03_69.bmp\r\n0010\\0010_01_01_03_73.bmp\r\n0010\\0010_01_01_03_78.bmp\r\n0010\\0010_01_01_03_82.bmp\r\n0010\\0010_01_01_03_88.bmp\r\n0010\\0010_01_01_03_93.bmp\r\n0010\\0010_01_01_03_99.bmp\r\n0010\\0010_01_02_03_0.bmp\r\n0010\\0010_01_02_03_102.bmp\r\n0010\\0010_01_02_03_109.bmp\r\n0010\\0010_01_02_03_117.bmp\r\n0010\\0010_01_02_03_126.bmp\r\n0010\\0010_01_02_03_130.bmp\r\n0010\\0010_01_02_03_136.bmp\r\n0010\\0010_01_02_03_141.bmp\r\n0010\\0010_01_02_03_15.bmp\r\n0010\\0010_01_02_03_154.bmp\r\n0010\\0010_01_02_03_159.bmp\r\n0010\\0010_01_02_03_163.bmp\r\n0010\\0010_01_02_03_169.bmp\r\n0010\\0010_01_02_03_176.bmp\r\n0010\\0010_01_02_03_180.bmp\r\n0010\\0010_01_02_03_189.bmp\r\n0010\\0010_01_02_03_198.bmp\r\n0010\\0010_01_02_03_205.bmp\r\n0010\\0010_01_02_03_213.bmp\r\n0010\\0010_01_02_03_222.bmp\r\n0010\\0010_01_02_03_24.bmp\r\n0010\\0010_01_02_03_255.bmp\r\n0010\\0010_01_02_03_266.bmp\r\n0010\\0010_01_02_03_276.bmp\r\n0010\\0010_01_02_03_284.bmp\r\n0010\\0010_01_02_03_293.bmp\r\n0010\\0010_01_02_03_300.bmp\r\n0010\\0010_01_02_03_31.bmp\r\n0010\\0010_01_02_03_32.bmp\r\n0010\\0010_01_02_03_326.bmp\r\n0010\\0010_01_02_03_330.bmp\r\n0010\\0010_01_02_03_339.bmp\r\n0010\\0010_01_02_03_346.bmp\r\n0010\\0010_01_02_03_351.bmp\r\n0010\\0010_01_02_03_365.bmp\r\n0010\\0010_01_02_03_375.bmp\r\n0010\\0010_01_02_03_383.bmp\r\n0010\\0010_01_02_03_39.bmp\r\n0010\\0010_01_02_03_395.bmp\r\n0010\\0010_01_02_03_400.bmp\r\n0010\\0010_01_02_03_408.bmp\r\n0010\\0010_01_02_03_417.bmp\r\n0010\\0010_01_02_03_428.bmp\r\n0010\\0010_01_02_03_441.bmp\r\n0010\\0010_01_02_03_449.bmp\r\n0010\\0010_01_02_03_454.bmp\r\n0010\\0010_01_02_03_461.bmp\r\n0010\\0010_01_02_03_475.bmp\r\n0010\\0010_01_02_03_484.bmp\r\n0010\\0010_01_02_03_497.bmp\r\n0010\\0010_01_02_03_51.bmp\r\n0010\\0010_01_02_03_58.bmp\r\n0010\\0010_01_02_03_63.bmp\r\n0010\\0010_01_02_03_7.bmp\r\n0010\\0010_01_02_03_75.bmp\r\n0010\\0010_01_02_03_83.bmp\r\n0010\\0010_01_02_03_91.bmp\r\n0010\\0010_01_02_03_99.bmp\r\n0010\\0010_01_08_03_0.bmp\r\n0010\\0010_01_08_03_102.bmp\r\n0010\\0010_01_08_03_107.bmp\r\n0010\\0010_01_08_03_112.bmp\r\n0010\\0010_01_08_03_117.bmp\r\n0010\\0010_01_08_03_121.bmp\r\n0010\\0010_01_08_03_128.bmp\r\n0010\\0010_01_08_03_132.bmp\r\n0010\\0010_01_08_03_137.bmp\r\n0010\\0010_01_08_03_141.bmp\r\n0010\\0010_01_08_03_147.bmp\r\n0010\\0010_01_08_03_151.bmp\r\n0010\\0010_01_08_03_156.bmp\r\n0010\\0010_01_08_03_160.bmp\r\n0010\\0010_01_08_03_168.bmp\r\n0010\\0010_01_08_03_172.bmp\r\n0010\\0010_01_08_03_178.bmp\r\n0010\\0010_01_08_03_182.bmp\r\n0010\\0010_01_08_03_187.bmp\r\n0010\\0010_01_08_03_191.bmp\r\n0010\\0010_01_08_03_196.bmp\r\n0010\\0010_01_08_03_20.bmp\r\n0010\\0010_01_08_03_205.bmp\r\n0010\\0010_01_08_03_21.bmp\r\n0010\\0010_01_08_03_214.bmp\r\n0010\\0010_01_08_03_220.bmp\r\n0010\\0010_01_08_03_226.bmp\r\n0010\\0010_01_08_03_232.bmp\r\n0010\\0010_01_08_03_237.bmp\r\n0010\\0010_01_08_03_241.bmp\r\n0010\\0010_01_08_03_246.bmp\r\n0010\\0010_01_08_03_251.bmp\r\n0010\\0010_01_08_03_257.bmp\r\n0010\\0010_01_08_03_261.bmp\r\n0010\\0010_01_08_03_266.bmp\r\n0010\\0010_01_08_03_270.bmp\r\n0010\\0010_01_08_03_276.bmp\r\n0010\\0010_01_08_03_280.bmp\r\n0010\\0010_01_08_03_288.bmp\r\n0010\\0010_01_08_03_292.bmp\r\n0010\\0010_01_08_03_298.bmp\r\n0010\\0010_01_08_03_308.bmp\r\n0010\\0010_01_08_03_314.bmp\r\n0010\\0010_01_08_03_321.bmp\r\n0010\\0010_01_08_03_326.bmp\r\n0010\\0010_01_08_03_338.bmp\r\n0010\\0010_01_08_03_343.bmp\r\n0010\\0010_01_08_03_348.bmp\r\n0010\\0010_01_08_03_352.bmp\r\n0010\\0010_01_08_03_357.bmp\r\n0010\\0010_01_08_03_361.bmp\r\n0010\\0010_01_08_03_366.bmp\r\n0010\\0010_01_08_03_370.bmp\r\n0010\\0010_01_08_03_375.bmp\r\n0010\\0010_01_08_03_38.bmp\r\n0010\\0010_01_08_03_385.bmp\r\n0010\\0010_01_08_03_39.bmp\r\n0010\\0010_01_08_03_394.bmp\r\n0010\\0010_01_08_03_40.bmp\r\n0010\\0010_01_08_03_41.bmp\r\n0010\\0010_01_08_03_414.bmp\r\n0010\\0010_01_08_03_419.bmp\r\n0010\\0010_01_08_03_423.bmp\r\n0010\\0010_01_08_03_428.bmp\r\n0010\\0010_01_08_03_434.bmp\r\n0010\\0010_01_08_03_439.bmp\r\n0010\\0010_01_08_03_443.bmp\r\n0010\\0010_01_08_03_448.bmp\r\n0010\\0010_01_08_03_452.bmp\r\n0010\\0010_01_08_03_457.bmp\r\n0010\\0010_01_08_03_461.bmp\r\n0010\\0010_01_08_03_466.bmp\r\n0010\\0010_01_08_03_473.bmp\r\n0010\\0010_01_08_03_478.bmp\r\n0010\\0010_01_08_03_482.bmp\r\n0010\\0010_01_08_03_487.bmp\r\n0010\\0010_01_08_03_491.bmp\r\n0010\\0010_01_08_03_499.bmp\r\n0010\\0010_01_08_03_53.bmp\r\n0010\\0010_01_08_03_58.bmp\r\n0010\\0010_01_08_03_62.bmp\r\n0010\\0010_01_08_03_67.bmp\r\n0010\\0010_01_08_03_71.bmp\r\n0010\\0010_01_08_03_76.bmp\r\n0010\\0010_01_08_03_80.bmp\r\n0010\\0010_01_08_03_87.bmp\r\n0010\\0010_01_08_03_91.bmp\r\n0010\\0010_01_08_03_96.bmp\r\n0015\\0015_01_03_03_0.bmp\r\n0015\\0015_01_03_03_102.bmp\r\n0015\\0015_01_03_03_107.bmp\r\n0015\\0015_01_03_03_111.bmp\r\n0015\\0015_01_03_03_116.bmp\r\n0015\\0015_01_03_03_120.bmp\r\n0015\\0015_01_03_03_125.bmp\r\n0015\\0015_01_03_03_13.bmp\r\n0015\\0015_01_03_03_134.bmp\r\n0015\\0015_01_03_03_139.bmp\r\n0015\\0015_01_03_03_143.bmp\r\n0015\\0015_01_03_03_149.bmp\r\n0015\\0015_01_03_03_153.bmp\r\n0015\\0015_01_03_03_158.bmp\r\n0015\\0015_01_03_03_162.bmp\r\n0015\\0015_01_03_03_17.bmp\r\n0015\\0015_01_03_03_176.bmp\r\n0015\\0015_01_03_03_180.bmp\r\n0015\\0015_01_03_03_185.bmp\r\n0015\\0015_01_03_03_19.bmp\r\n0015\\0015_01_03_03_194.bmp\r\n0015\\0015_01_03_03_199.bmp\r\n0015\\0015_01_03_03_203.bmp\r\n0015\\0015_01_03_03_208.bmp\r\n0015\\0015_01_03_03_212.bmp\r\n0015\\0015_01_03_03_217.bmp\r\n0015\\0015_01_03_03_221.bmp\r\n0015\\0015_01_03_03_226.bmp\r\n0015\\0015_01_03_03_230.bmp\r\n0015\\0015_01_03_03_235.bmp\r\n0015\\0015_01_03_03_24.bmp\r\n0015\\0015_01_03_03_244.bmp\r\n0015\\0015_01_03_03_249.bmp\r\n0015\\0015_01_03_03_254.bmp\r\n0015\\0015_01_03_03_26.bmp\r\n0015\\0015_01_03_03_264.bmp\r\n0015\\0015_01_03_03_27.bmp\r\n0015\\0015_01_03_03_274.bmp\r\n0015\\0015_01_03_03_279.bmp\r\n0015\\0015_01_03_03_283.bmp\r\n0015\\0015_01_03_03_288.bmp\r\n0015\\0015_01_03_03_292.bmp\r\n0015\\0015_01_03_03_297.bmp\r\n0015\\0015_01_03_03_301.bmp\r\n0015\\0015_01_03_03_306.bmp\r\n0015\\0015_01_03_03_310.bmp\r\n0015\\0015_01_03_03_315.bmp\r\n0015\\0015_01_03_03_32.bmp\r\n0015\\0015_01_03_03_324.bmp\r\n0015\\0015_01_03_03_329.bmp\r\n0015\\0015_01_03_03_333.bmp\r\n0015\\0015_01_03_03_338.bmp\r\n0015\\0015_01_03_03_342.bmp\r\n0015\\0015_01_03_03_347.bmp\r\n0015\\0015_01_03_03_352.bmp\r\n0015\\0015_01_03_03_359.bmp\r\n0015\\0015_01_03_03_364.bmp\r\n0015\\0015_01_03_03_369.bmp\r\n0015\\0015_01_03_03_374.bmp\r\n0015\\0015_01_03_03_379.bmp\r\n0015\\0015_01_03_03_383.bmp\r\n0015\\0015_01_03_03_388.bmp\r\n0015\\0015_01_03_03_392.bmp\r\n0015\\0015_01_03_03_397.bmp\r\n0015\\0015_01_03_03_400.bmp\r\n0015\\0015_01_03_03_405.bmp\r\n0015\\0015_01_03_03_411.bmp\r\n0015\\0015_01_03_03_416.bmp\r\n0015\\0015_01_03_03_420.bmp\r\n0015\\0015_01_03_03_425.bmp\r\n0015\\0015_01_03_03_43.bmp\r\n0015\\0015_01_03_03_434.bmp\r\n0015\\0015_01_03_03_439.bmp\r\n0015\\0015_01_03_03_444.bmp\r\n0015\\0015_01_03_03_449.bmp\r\n0015\\0015_01_03_03_453.bmp\r\n0015\\0015_01_03_03_458.bmp\r\n0015\\0015_01_03_03_462.bmp\r\n0015\\0015_01_03_03_467.bmp\r\n0015\\0015_01_03_03_471.bmp\r\n0015\\0015_01_03_03_476.bmp\r\n0015\\0015_01_03_03_480.bmp\r\n0015\\0015_01_03_03_485.bmp\r\n0015\\0015_01_03_03_49.bmp\r\n0015\\0015_01_03_03_494.bmp\r\n0015\\0015_01_03_03_499.bmp\r\n0015\\0015_01_03_03_54.bmp\r\n0015\\0015_01_03_03_59.bmp\r\n0015\\0015_01_03_03_64.bmp\r\n0015\\0015_01_03_03_7.bmp\r\n0015\\0015_01_03_03_76.bmp\r\n0015\\0015_01_03_03_82.bmp\r\n0015\\0015_01_03_03_87.bmp\r\n0015\\0015_01_03_03_91.bmp\r\n0015\\0015_01_03_03_96.bmp\r\n0015\\0015_01_04_03_1.bmp\r\n0015\\0015_01_04_03_104.bmp\r\n0015\\0015_01_04_03_109.bmp\r\n0015\\0015_01_04_03_113.bmp\r\n0015\\0015_01_04_03_118.bmp\r\n0015\\0015_01_04_03_124.bmp\r\n0015\\0015_01_04_03_129.bmp\r\n0015\\0015_01_04_03_133.bmp\r\n0015\\0015_01_04_03_138.bmp\r\n0015\\0015_01_04_03_143.bmp\r\n0015\\0015_01_04_03_148.bmp\r\n0015\\0015_01_04_03_153.bmp\r\n0015\\0015_01_04_03_158.bmp\r\n0015\\0015_01_04_03_163.bmp\r\n0015\\0015_01_04_03_168.bmp\r\n0015\\0015_01_04_03_172.bmp\r\n0015\\0015_01_04_03_177.bmp\r\n0015\\0015_01_04_03_181.bmp\r\n0015\\0015_01_04_03_19.bmp\r\n0015\\0015_01_04_03_195.bmp\r\n0015\\0015_01_04_03_20.bmp\r\n0015\\0015_01_04_03_206.bmp\r\n0015\\0015_01_04_03_210.bmp\r\n0015\\0015_01_04_03_22.bmp\r\n0015\\0015_01_04_03_224.bmp\r\n0015\\0015_01_04_03_229.bmp\r\n0015\\0015_01_04_03_233.bmp\r\n0015\\0015_01_04_03_238.bmp\r\n0015\\0015_01_04_03_242.bmp\r\n0015\\0015_01_04_03_248.bmp\r\n0015\\0015_01_04_03_252.bmp\r\n0015\\0015_01_04_03_257.bmp\r\n0015\\0015_01_04_03_261.bmp\r\n0015\\0015_01_04_03_267.bmp\r\n0015\\0015_01_04_03_271.bmp\r\n0015\\0015_01_04_03_276.bmp\r\n0015\\0015_01_04_03_281.bmp\r\n0015\\0015_01_04_03_286.bmp\r\n0015\\0015_01_04_03_290.bmp\r\n0015\\0015_01_04_03_295.bmp\r\n0015\\0015_01_04_03_3.bmp\r\n0015\\0015_01_04_03_304.bmp\r\n0015\\0015_01_04_03_309.bmp\r\n0015\\0015_01_04_03_313.bmp\r\n0015\\0015_01_04_03_318.bmp\r\n0015\\0015_01_04_03_322.bmp\r\n0015\\0015_01_04_03_327.bmp\r\n0015\\0015_01_04_03_331.bmp\r\n0015\\0015_01_04_03_336.bmp\r\n0015\\0015_01_04_03_340.bmp\r\n0015\\0015_01_04_03_345.bmp\r\n0015\\0015_01_04_03_35.bmp\r\n0015\\0015_01_04_03_354.bmp\r\n0015\\0015_01_04_03_359.bmp\r\n0015\\0015_01_04_03_363.bmp\r\n0015\\0015_01_04_03_368.bmp\r\n0015\\0015_01_04_03_372.bmp\r\n0015\\0015_01_04_03_377.bmp\r\n0015\\0015_01_04_03_383.bmp\r\n0015\\0015_01_04_03_389.bmp\r\n0015\\0015_01_04_03_393.bmp\r\n0015\\0015_01_04_03_398.bmp\r\n0015\\0015_01_04_03_401.bmp\r\n0015\\0015_01_04_03_411.bmp\r\n0015\\0015_01_04_03_416.bmp\r\n0015\\0015_01_04_03_421.bmp\r\n0015\\0015_01_04_03_426.bmp\r\n0015\\0015_01_04_03_431.bmp\r\n0015\\0015_01_04_03_436.bmp\r\n0015\\0015_01_04_03_441.bmp\r\n0015\\0015_01_04_03_446.bmp\r\n0015\\0015_01_04_03_451.bmp\r\n0015\\0015_01_04_03_456.bmp\r\n0015\\0015_01_04_03_461.bmp\r\n0015\\0015_01_04_03_466.bmp\r\n0015\\0015_01_04_03_470.bmp\r\n0015\\0015_01_04_03_475.bmp\r\n0015\\0015_01_04_03_480.bmp\r\n0015\\0015_01_04_03_485.bmp\r\n0015\\0015_01_04_03_49.bmp\r\n0015\\0015_01_04_03_494.bmp\r\n0015\\0015_01_04_03_499.bmp\r\n0015\\0015_01_04_03_54.bmp\r\n0015\\0015_01_04_03_59.bmp\r\n0015\\0015_01_04_03_64.bmp\r\n0015\\0015_01_04_03_69.bmp\r\n0015\\0015_01_04_03_74.bmp\r\n0015\\0015_01_04_03_79.bmp\r\n0015\\0015_01_04_03_84.bmp\r\n0015\\0015_01_04_03_89.bmp\r\n0015\\0015_01_04_03_93.bmp\r\n0015\\0015_01_04_03_98.bmp\r\n0015\\0015_01_01_03_1.bmp\r\n0015\\0015_01_01_03_103.bmp\r\n0015\\0015_01_01_03_111.bmp\r\n0015\\0015_01_01_03_118.bmp\r\n0015\\0015_01_01_03_126.bmp\r\n0015\\0015_01_01_03_133.bmp\r\n0015\\0015_01_01_03_143.bmp\r\n0015\\0015_01_01_03_149.bmp\r\n0015\\0015_01_01_03_156.bmp\r\n0015\\0015_01_01_03_161.bmp\r\n0015\\0015_01_01_03_168.bmp\r\n0015\\0015_01_01_03_172.bmp\r\n0015\\0015_01_01_03_178.bmp\r\n0015\\0015_01_01_03_182.bmp\r\n0015\\0015_01_01_03_19.bmp\r\n0015\\0015_01_01_03_198.bmp\r\n0015\\0015_01_01_03_203.bmp\r\n0015\\0015_01_01_03_21.bmp\r\n0015\\0015_01_01_03_217.bmp\r\n0015\\0015_01_01_03_224.bmp\r\n0015\\0015_01_01_03_229.bmp\r\n0015\\0015_01_01_03_235.bmp\r\n0015\\0015_01_01_03_240.bmp\r\n0015\\0015_01_01_03_246.bmp\r\n0015\\0015_01_01_03_251.bmp\r\n0015\\0015_01_01_03_259.bmp\r\n0015\\0015_01_01_03_267.bmp\r\n0015\\0015_01_01_03_273.bmp\r\n0015\\0015_01_01_03_279.bmp\r\n0015\\0015_01_01_03_288.bmp\r\n0015\\0015_01_01_03_295.bmp\r\n0015\\0015_01_01_03_301.bmp\r\n0015\\0015_01_01_03_306.bmp\r\n0015\\0015_01_01_03_310.bmp\r\n0015\\0015_01_01_03_316.bmp\r\n0015\\0015_01_01_03_320.bmp\r\n0015\\0015_01_01_03_327.bmp\r\n0015\\0015_01_01_03_332.bmp\r\n0015\\0015_01_01_03_338.bmp\r\n0015\\0015_01_01_03_343.bmp\r\n0015\\0015_01_01_03_349.bmp\r\n0015\\0015_01_01_03_353.bmp\r\n0015\\0015_01_01_03_358.bmp\r\n0015\\0015_01_01_03_363.bmp\r\n0015\\0015_01_01_03_368.bmp\r\n0015\\0015_01_01_03_372.bmp\r\n0015\\0015_01_01_03_377.bmp\r\n0015\\0015_01_01_03_384.bmp\r\n0015\\0015_01_01_03_390.bmp\r\n0015\\0015_01_01_03_395.bmp\r\n0015\\0015_01_01_03_400.bmp\r\n0015\\0015_01_01_03_406.bmp\r\n0015\\0015_01_01_03_418.bmp\r\n0015\\0015_01_01_03_423.bmp\r\n0015\\0015_01_01_03_429.bmp\r\n0015\\0015_01_01_03_434.bmp\r\n0015\\0015_01_01_03_44.bmp\r\n0015\\0015_01_01_03_446.bmp\r\n0015\\0015_01_01_03_450.bmp\r\n0015\\0015_01_01_03_456.bmp\r\n0015\\0015_01_01_03_460.bmp\r\n0015\\0015_01_01_03_465.bmp\r\n0015\\0015_01_01_03_472.bmp\r\n0015\\0015_01_01_03_479.bmp\r\n0015\\0015_01_01_03_484.bmp\r\n0015\\0015_01_01_03_492.bmp\r\n0015\\0015_01_01_03_499.bmp\r\n0015\\0015_01_01_03_55.bmp\r\n0015\\0015_01_01_03_64.bmp\r\n0015\\0015_01_01_03_7.bmp\r\n0015\\0015_01_01_03_77.bmp\r\n0015\\0015_01_01_03_83.bmp\r\n0015\\0015_01_01_03_89.bmp\r\n0015\\0015_01_01_03_93.bmp\r\n0015\\0015_01_02_03_10.bmp\r\n0015\\0015_01_02_03_107.bmp\r\n0015\\0015_01_02_03_12.bmp\r\n0015\\0015_01_02_03_129.bmp\r\n0015\\0015_01_02_03_134.bmp\r\n0015\\0015_01_02_03_139.bmp\r\n0015\\0015_01_02_03_157.bmp\r\n0015\\0015_01_02_03_168.bmp\r\n0015\\0015_01_02_03_173.bmp\r\n0015\\0015_01_02_03_183.bmp\r\n0015\\0015_01_02_03_191.bmp\r\n0015\\0015_01_02_03_197.bmp\r\n0015\\0015_01_02_03_203.bmp\r\n0015\\0015_01_02_03_211.bmp\r\n0015\\0015_01_02_03_222.bmp\r\n0015\\0015_01_02_03_241.bmp\r\n0015\\0015_01_02_03_252.bmp\r\n0015\\0015_01_02_03_269.bmp\r\n0015\\0015_01_02_03_274.bmp\r\n0015\\0015_01_02_03_284.bmp\r\n0015\\0015_01_02_03_294.bmp\r\n0015\\0015_01_02_03_309.bmp\r\n0015\\0015_01_02_03_321.bmp\r\n0015\\0015_01_02_03_340.bmp\r\n0015\\0015_01_02_03_357.bmp\r\n0015\\0015_01_02_03_366.bmp\r\n0015\\0015_01_02_03_377.bmp\r\n0015\\0015_01_02_03_387.bmp\r\n0015\\0015_01_02_03_396.bmp\r\n0015\\0015_01_02_03_406.bmp\r\n0015\\0015_01_02_03_415.bmp\r\n0015\\0015_01_02_03_43.bmp\r\n0015\\0015_01_02_03_442.bmp\r\n0015\\0015_01_02_03_451.bmp\r\n0015\\0015_01_02_03_469.bmp\r\n0015\\0015_01_02_03_481.bmp\r\n0015\\0015_01_02_03_54.bmp\r\n0015\\0015_01_02_03_73.bmp\r\n0015\\0015_01_02_03_78.bmp\r\n0015\\0015_01_02_03_86.bmp\r\n0015\\0015_01_02_03_96.bmp\r\n0015\\0015_01_08_03_0.bmp\r\n0015\\0015_01_08_03_106.bmp\r\n0015\\0015_01_08_03_112.bmp\r\n0015\\0015_01_08_03_120.bmp\r\n0015\\0015_01_08_03_130.bmp\r\n0015\\0015_01_08_03_135.bmp\r\n0015\\0015_01_08_03_14.bmp\r\n0015\\0015_01_08_03_144.bmp\r\n0015\\0015_01_08_03_15.bmp\r\n0015\\0015_01_08_03_161.bmp\r\n0015\\0015_01_08_03_166.bmp\r\n0015\\0015_01_08_03_170.bmp\r\n0015\\0015_01_08_03_175.bmp\r\n0015\\0015_01_08_03_189.bmp\r\n0015\\0015_01_08_03_196.bmp\r\n0015\\0015_01_08_03_20.bmp\r\n0015\\0015_01_08_03_204.bmp\r\n0015\\0015_01_08_03_214.bmp\r\n0015\\0015_01_08_03_224.bmp\r\n0015\\0015_01_08_03_229.bmp\r\n0015\\0015_01_08_03_234.bmp\r\n0015\\0015_01_08_03_239.bmp\r\n0015\\0015_01_08_03_243.bmp\r\n0015\\0015_01_08_03_25.bmp\r\n0015\\0015_01_08_03_257.bmp\r\n0015\\0015_01_08_03_263.bmp\r\n0015\\0015_01_08_03_268.bmp\r\n0015\\0015_01_08_03_272.bmp\r\n0015\\0015_01_08_03_278.bmp\r\n0015\\0015_01_08_03_285.bmp\r\n0015\\0015_01_08_03_29.bmp\r\n0015\\0015_01_08_03_294.bmp\r\n0015\\0015_01_08_03_299.bmp\r\n0015\\0015_01_08_03_302.bmp\r\n0015\\0015_01_08_03_307.bmp\r\n0015\\0015_01_08_03_311.bmp\r\n0015\\0015_01_08_03_316.bmp\r\n0015\\0015_01_08_03_321.bmp\r\n0015\\0015_01_08_03_326.bmp\r\n0015\\0015_01_08_03_330.bmp\r\n0015\\0015_01_08_03_335.bmp\r\n0015\\0015_01_08_03_34.bmp\r\n0015\\0015_01_08_03_344.bmp\r\n0015\\0015_01_08_03_349.bmp\r\n0015\\0015_01_08_03_353.bmp\r\n0015\\0015_01_08_03_358.bmp\r\n0015\\0015_01_08_03_362.bmp\r\n0015\\0015_01_08_03_367.bmp\r\n0015\\0015_01_08_03_375.bmp\r\n0015\\0015_01_08_03_38.bmp\r\n0015\\0015_01_08_03_39.bmp\r\n0015\\0015_01_08_03_396.bmp\r\n0015\\0015_01_08_03_40.bmp\r\n0015\\0015_01_08_03_407.bmp\r\n0015\\0015_01_08_03_416.bmp\r\n0015\\0015_01_08_03_420.bmp\r\n0015\\0015_01_08_03_425.bmp\r\n0015\\0015_01_08_03_43.bmp\r\n0015\\0015_01_08_03_434.bmp\r\n0015\\0015_01_08_03_44.bmp\r\n0015\\0015_01_08_03_446.bmp\r\n0015\\0015_01_08_03_456.bmp\r\n0015\\0015_01_08_03_461.bmp\r\n0015\\0015_01_08_03_474.bmp\r\n0015\\0015_01_08_03_479.bmp\r\n0015\\0015_01_08_03_483.bmp\r\n0015\\0015_01_08_03_488.bmp\r\n0015\\0015_01_08_03_492.bmp\r\n0015\\0015_01_08_03_5.bmp\r\n0015\\0015_01_08_03_54.bmp\r\n0015\\0015_01_08_03_59.bmp\r\n0015\\0015_01_08_03_63.bmp\r\n0015\\0015_01_08_03_68.bmp\r\n0015\\0015_01_08_03_73.bmp\r\n0015\\0015_01_08_03_80.bmp\r\n0015\\0015_01_08_03_85.bmp\r\n0015\\0015_01_08_03_9.bmp\r\n0015\\0015_01_08_03_94.bmp\r\n0012\\0012_01_03_03_10.bmp\r\n0012\\0012_01_03_03_105.bmp\r\n0012\\0012_01_03_03_11.bmp\r\n0012\\0012_01_03_03_114.bmp\r\n0012\\0012_01_03_03_12.bmp\r\n0012\\0012_01_03_03_124.bmp\r\n0012\\0012_01_03_03_129.bmp\r\n0012\\0012_01_03_03_133.bmp\r\n0012\\0012_01_03_03_138.bmp\r\n0012\\0012_01_03_03_142.bmp\r\n0012\\0012_01_03_03_147.bmp\r\n0012\\0012_01_03_03_151.bmp\r\n0012\\0012_01_03_03_156.bmp\r\n0012\\0012_01_03_03_160.bmp\r\n0012\\0012_01_03_03_165.bmp\r\n0012\\0012_01_03_03_17.bmp\r\n0012\\0012_01_03_03_174.bmp\r\n0012\\0012_01_03_03_179.bmp\r\n0012\\0012_01_03_03_183.bmp\r\n0012\\0012_01_03_03_188.bmp\r\n0012\\0012_01_03_03_192.bmp\r\n0012\\0012_01_03_03_197.bmp\r\n0012\\0012_01_03_03_201.bmp\r\n0012\\0012_01_03_03_206.bmp\r\n0012\\0012_01_03_03_211.bmp\r\n0012\\0012_01_03_03_216.bmp\r\n0012\\0012_01_03_03_220.bmp\r\n0012\\0012_01_03_03_225.bmp\r\n0012\\0012_01_03_03_230.bmp\r\n0012\\0012_01_03_03_235.bmp\r\n0012\\0012_01_03_03_24.bmp\r\n0012\\0012_01_03_03_245.bmp\r\n0012\\0012_01_03_03_25.bmp\r\n0012\\0012_01_03_03_254.bmp\r\n0012\\0012_01_03_03_26.bmp\r\n0012\\0012_01_03_03_264.bmp\r\n0012\\0012_01_03_03_269.bmp\r\n0012\\0012_01_03_03_273.bmp\r\n0012\\0012_01_03_03_278.bmp\r\n0012\\0012_01_03_03_282.bmp\r\n0012\\0012_01_03_03_287.bmp\r\n0012\\0012_01_03_03_292.bmp\r\n0012\\0012_01_03_03_297.bmp\r\n0012\\0012_01_03_03_301.bmp\r\n0012\\0012_01_03_03_306.bmp\r\n0012\\0012_01_03_03_310.bmp\r\n0012\\0012_01_03_03_315.bmp\r\n0012\\0012_01_03_03_32.bmp\r\n0012\\0012_01_03_03_324.bmp\r\n0012\\0012_01_03_03_329.bmp\r\n0012\\0012_01_03_03_333.bmp\r\n0012\\0012_01_03_03_338.bmp\r\n0012\\0012_01_03_03_343.bmp\r\n0012\\0012_01_03_03_348.bmp\r\n0012\\0012_01_03_03_353.bmp\r\n0012\\0012_01_03_03_358.bmp\r\n0012\\0012_01_03_03_362.bmp\r\n0012\\0012_01_03_03_368.bmp\r\n0012\\0012_01_03_03_374.bmp\r\n0012\\0012_01_03_03_38.bmp\r\n0012\\0012_01_03_03_384.bmp\r\n0012\\0012_01_03_03_389.bmp\r\n0012\\0012_01_03_03_393.bmp\r\n0012\\0012_01_03_03_399.bmp\r\n0012\\0012_01_03_03_402.bmp\r\n0012\\0012_01_03_03_407.bmp\r\n0012\\0012_01_03_03_411.bmp\r\n0012\\0012_01_03_03_416.bmp\r\n0012\\0012_01_03_03_421.bmp\r\n0012\\0012_01_03_03_426.bmp\r\n0012\\0012_01_03_03_431.bmp\r\n0012\\0012_01_03_03_437.bmp\r\n0012\\0012_01_03_03_441.bmp\r\n0012\\0012_01_03_03_446.bmp\r\n0012\\0012_01_03_03_450.bmp\r\n0012\\0012_01_03_03_456.bmp\r\n0012\\0012_01_03_03_460.bmp\r\n0012\\0012_01_03_03_465.bmp\r\n0012\\0012_01_03_03_47.bmp\r\n0012\\0012_01_03_03_475.bmp\r\n0012\\0012_01_03_03_480.bmp\r\n0012\\0012_01_03_03_485.bmp\r\n0012\\0012_01_03_03_490.bmp\r\n0012\\0012_01_03_03_495.bmp\r\n0012\\0012_01_03_03_5.bmp\r\n0012\\0012_01_03_03_54.bmp\r\n0012\\0012_01_03_03_59.bmp\r\n0012\\0012_01_03_03_63.bmp\r\n0012\\0012_01_03_03_68.bmp\r\n0012\\0012_01_03_03_72.bmp\r\n0012\\0012_01_03_03_77.bmp\r\n0012\\0012_01_03_03_82.bmp\r\n0012\\0012_01_03_03_87.bmp\r\n0012\\0012_01_03_03_91.bmp\r\n0012\\0012_01_03_03_96.bmp\r\n0012\\0012_01_04_03_0.bmp\r\n0012\\0012_01_04_03_103.bmp\r\n0012\\0012_01_04_03_108.bmp\r\n0012\\0012_01_04_03_112.bmp\r\n0012\\0012_01_04_03_120.bmp\r\n0012\\0012_01_04_03_125.bmp\r\n0012\\0012_01_04_03_13.bmp\r\n0012\\0012_01_04_03_134.bmp\r\n0012\\0012_01_04_03_139.bmp\r\n0012\\0012_01_04_03_143.bmp\r\n0012\\0012_01_04_03_149.bmp\r\n0012\\0012_01_04_03_153.bmp\r\n0012\\0012_01_04_03_158.bmp\r\n0012\\0012_01_04_03_163.bmp\r\n0012\\0012_01_04_03_168.bmp\r\n0012\\0012_01_04_03_172.bmp\r\n0012\\0012_01_04_03_178.bmp\r\n0012\\0012_01_04_03_183.bmp\r\n0012\\0012_01_04_03_188.bmp\r\n0012\\0012_01_04_03_192.bmp\r\n0012\\0012_01_04_03_197.bmp\r\n0012\\0012_01_04_03_203.bmp\r\n0012\\0012_01_04_03_21.bmp\r\n0012\\0012_01_04_03_214.bmp\r\n0012\\0012_01_04_03_222.bmp\r\n0012\\0012_01_04_03_228.bmp\r\n0012\\0012_01_04_03_232.bmp\r\n0012\\0012_01_04_03_237.bmp\r\n0012\\0012_01_04_03_247.bmp\r\n0012\\0012_01_04_03_258.bmp\r\n0012\\0012_01_04_03_263.bmp\r\n0012\\0012_01_04_03_268.bmp\r\n0012\\0012_01_04_03_272.bmp\r\n0012\\0012_01_04_03_277.bmp\r\n0012\\0012_01_04_03_281.bmp\r\n0012\\0012_01_04_03_287.bmp\r\n0012\\0012_01_04_03_291.bmp\r\n0012\\0012_01_04_03_296.bmp\r\n0012\\0012_01_04_03_30.bmp\r\n0012\\0012_01_04_03_304.bmp\r\n0012\\0012_01_04_03_309.bmp\r\n0012\\0012_01_04_03_313.bmp\r\n0012\\0012_01_04_03_318.bmp\r\n0012\\0012_01_04_03_322.bmp\r\n0012\\0012_01_04_03_327.bmp\r\n0012\\0012_01_04_03_331.bmp\r\n0012\\0012_01_04_03_336.bmp\r\n0012\\0012_01_04_03_340.bmp\r\n0012\\0012_01_04_03_347.bmp\r\n0012\\0012_01_04_03_351.bmp\r\n0012\\0012_01_04_03_357.bmp\r\n0012\\0012_01_04_03_361.bmp\r\n0012\\0012_01_04_03_368.bmp\r\n0012\\0012_01_04_03_375.bmp\r\n0012\\0012_01_04_03_38.bmp\r\n0012\\0012_01_04_03_384.bmp\r\n0012\\0012_01_04_03_389.bmp\r\n0012\\0012_01_04_03_393.bmp\r\n0012\\0012_01_04_03_398.bmp\r\n0012\\0012_01_04_03_401.bmp\r\n0012\\0012_01_04_03_406.bmp\r\n0012\\0012_01_04_03_410.bmp\r\n0012\\0012_01_04_03_415.bmp\r\n0012\\0012_01_04_03_420.bmp\r\n0012\\0012_01_04_03_425.bmp\r\n0012\\0012_01_04_03_430.bmp\r\n0012\\0012_01_04_03_435.bmp\r\n0012\\0012_01_04_03_44.bmp\r\n0012\\0012_01_04_03_444.bmp\r\n0012\\0012_01_04_03_449.bmp\r\n0012\\0012_01_04_03_453.bmp\r\n0012\\0012_01_04_03_459.bmp\r\n0012\\0012_01_04_03_463.bmp\r\n0012\\0012_01_04_03_468.bmp\r\n0012\\0012_01_04_03_472.bmp\r\n0012\\0012_01_04_03_477.bmp\r\n0012\\0012_01_04_03_481.bmp\r\n0012\\0012_01_04_03_486.bmp\r\n0012\\0012_01_04_03_490.bmp\r\n0012\\0012_01_04_03_495.bmp\r\n0012\\0012_01_04_03_5.bmp\r\n0012\\0012_01_04_03_55.bmp\r\n0012\\0012_01_04_03_60.bmp\r\n0012\\0012_01_04_03_65.bmp\r\n0012\\0012_01_04_03_70.bmp\r\n0012\\0012_01_04_03_75.bmp\r\n0012\\0012_01_04_03_80.bmp\r\n0012\\0012_01_04_03_85.bmp\r\n0012\\0012_01_04_03_9.bmp\r\n0012\\0012_01_04_03_95.bmp\r\n0012\\0012_01_01_03_0.bmp\r\n0012\\0012_01_01_03_104.bmp\r\n0012\\0012_01_01_03_11.bmp\r\n0012\\0012_01_01_03_114.bmp\r\n0012\\0012_01_01_03_120.bmp\r\n0012\\0012_01_01_03_127.bmp\r\n0012\\0012_01_01_03_131.bmp\r\n0012\\0012_01_01_03_138.bmp\r\n0012\\0012_01_01_03_143.bmp\r\n0012\\0012_01_01_03_149.bmp\r\n0012\\0012_01_01_03_155.bmp\r\n0012\\0012_01_01_03_163.bmp\r\n0012\\0012_01_01_03_168.bmp\r\n0012\\0012_01_01_03_173.bmp\r\n0012\\0012_01_01_03_18.bmp\r\n0012\\0012_01_01_03_185.bmp\r\n0012\\0012_01_01_03_190.bmp\r\n0012\\0012_01_01_03_195.bmp\r\n0012\\0012_01_01_03_20.bmp\r\n0012\\0012_01_01_03_205.bmp\r\n0012\\0012_01_01_03_212.bmp\r\n0012\\0012_01_01_03_217.bmp\r\n0012\\0012_01_01_03_221.bmp\r\n0012\\0012_01_01_03_226.bmp\r\n0012\\0012_01_01_03_231.bmp\r\n0012\\0012_01_01_03_236.bmp\r\n0012\\0012_01_01_03_243.bmp\r\n0012\\0012_01_01_03_248.bmp\r\n0012\\0012_01_01_03_253.bmp\r\n0012\\0012_01_01_03_258.bmp\r\n0012\\0012_01_01_03_263.bmp\r\n0012\\0012_01_01_03_27.bmp\r\n0012\\0012_01_01_03_274.bmp\r\n0012\\0012_01_01_03_28.bmp\r\n0012\\0012_01_01_03_286.bmp\r\n0012\\0012_01_01_03_291.bmp\r\n0012\\0012_01_01_03_30.bmp\r\n0012\\0012_01_01_03_304.bmp\r\n0012\\0012_01_01_03_310.bmp\r\n0012\\0012_01_01_03_316.bmp\r\n0012\\0012_01_01_03_320.bmp\r\n0012\\0012_01_01_03_327.bmp\r\n0012\\0012_01_01_03_331.bmp\r\n0012\\0012_01_01_03_336.bmp\r\n0012\\0012_01_01_03_341.bmp\r\n0012\\0012_01_01_03_346.bmp\r\n0012\\0012_01_01_03_350.bmp\r\n0012\\0012_01_01_03_357.bmp\r\n0012\\0012_01_01_03_363.bmp\r\n0012\\0012_01_01_03_368.bmp\r\n0012\\0012_01_01_03_372.bmp\r\n0012\\0012_01_01_03_377.bmp\r\n0012\\0012_01_01_03_381.bmp\r\n0012\\0012_01_01_03_387.bmp\r\n0012\\0012_01_01_03_391.bmp\r\n0012\\0012_01_01_03_397.bmp\r\n0012\\0012_01_01_03_400.bmp\r\n0012\\0012_01_01_03_406.bmp\r\n0012\\0012_01_01_03_410.bmp\r\n0012\\0012_01_01_03_415.bmp\r\n0012\\0012_01_01_03_42.bmp\r\n0012\\0012_01_01_03_425.bmp\r\n0012\\0012_01_01_03_432.bmp\r\n0012\\0012_01_01_03_437.bmp\r\n0012\\0012_01_01_03_445.bmp\r\n0012\\0012_01_01_03_451.bmp\r\n0012\\0012_01_01_03_456.bmp\r\n0012\\0012_01_01_03_461.bmp\r\n0012\\0012_01_01_03_468.bmp\r\n0012\\0012_01_01_03_473.bmp\r\n0012\\0012_01_01_03_479.bmp\r\n0012\\0012_01_01_03_484.bmp\r\n0012\\0012_01_01_03_489.bmp\r\n0012\\0012_01_01_03_496.bmp\r\n0012\\0012_01_01_03_50.bmp\r\n0012\\0012_01_01_03_56.bmp\r\n0012\\0012_01_01_03_60.bmp\r\n0012\\0012_01_01_03_69.bmp\r\n0012\\0012_01_01_03_73.bmp\r\n0012\\0012_01_01_03_78.bmp\r\n0012\\0012_01_01_03_84.bmp\r\n0012\\0012_01_01_03_9.bmp\r\n0012\\0012_01_01_03_95.bmp\r\n0012\\0012_01_02_03_10.bmp\r\n0012\\0012_01_02_03_104.bmp\r\n0012\\0012_01_02_03_112.bmp\r\n0012\\0012_01_02_03_121.bmp\r\n0012\\0012_01_02_03_132.bmp\r\n0012\\0012_01_02_03_140.bmp\r\n0012\\0012_01_02_03_15.bmp\r\n0012\\0012_01_02_03_160.bmp\r\n0012\\0012_01_02_03_171.bmp\r\n0012\\0012_01_02_03_182.bmp\r\n0012\\0012_01_02_03_194.bmp\r\n0012\\0012_01_02_03_202.bmp\r\n0012\\0012_01_02_03_213.bmp\r\n0012\\0012_01_02_03_228.bmp\r\n0012\\0012_01_02_03_238.bmp\r\n0012\\0012_01_02_03_243.bmp\r\n0012\\0012_01_02_03_259.bmp\r\n0012\\0012_01_02_03_267.bmp\r\n0012\\0012_01_02_03_281.bmp\r\n0012\\0012_01_02_03_298.bmp\r\n0012\\0012_01_02_03_309.bmp\r\n0012\\0012_01_02_03_319.bmp\r\n0012\\0012_01_02_03_328.bmp\r\n0012\\0012_01_02_03_333.bmp\r\n0012\\0012_01_02_03_340.bmp\r\n0012\\0012_01_02_03_350.bmp\r\n0012\\0012_01_02_03_355.bmp\r\n0012\\0012_01_02_03_363.bmp\r\n0012\\0012_01_02_03_373.bmp\r\n0012\\0012_01_02_03_384.bmp\r\n0012\\0012_01_02_03_396.bmp\r\n0012\\0012_01_02_03_406.bmp\r\n0012\\0012_01_02_03_416.bmp\r\n0012\\0012_01_02_03_421.bmp\r\n0012\\0012_01_02_03_430.bmp\r\n0012\\0012_01_02_03_438.bmp\r\n0012\\0012_01_02_03_447.bmp\r\n0012\\0012_01_02_03_457.bmp\r\n0012\\0012_01_02_03_462.bmp\r\n0012\\0012_01_02_03_471.bmp\r\n0012\\0012_01_02_03_482.bmp\r\n0012\\0012_01_02_03_494.bmp\r\n0012\\0012_01_02_03_6.bmp\r\n0012\\0012_01_02_03_74.bmp\r\n0012\\0012_01_02_03_84.bmp\r\n0012\\0012_01_02_03_94.bmp\r\n0012\\0012_01_08_03_0.bmp\r\n0012\\0012_01_08_03_102.bmp\r\n0012\\0012_01_08_03_107.bmp\r\n0012\\0012_01_08_03_117.bmp\r\n0012\\0012_01_08_03_121.bmp\r\n0012\\0012_01_08_03_129.bmp\r\n0012\\0012_01_08_03_133.bmp\r\n0012\\0012_01_08_03_147.bmp\r\n0012\\0012_01_08_03_151.bmp\r\n0012\\0012_01_08_03_156.bmp\r\n0012\\0012_01_08_03_160.bmp\r\n0012\\0012_01_08_03_165.bmp\r\n0012\\0012_01_08_03_17.bmp\r\n0012\\0012_01_08_03_174.bmp\r\n0012\\0012_01_08_03_179.bmp\r\n0012\\0012_01_08_03_183.bmp\r\n0012\\0012_01_08_03_188.bmp\r\n0012\\0012_01_08_03_196.bmp\r\n0012\\0012_01_08_03_200.bmp\r\n0012\\0012_01_08_03_205.bmp\r\n0012\\0012_01_08_03_21.bmp\r\n0012\\0012_01_08_03_214.bmp\r\n0012\\0012_01_08_03_219.bmp\r\n0012\\0012_01_08_03_227.bmp\r\n0012\\0012_01_08_03_232.bmp\r\n0012\\0012_01_08_03_237.bmp\r\n0012\\0012_01_08_03_247.bmp\r\n0012\\0012_01_08_03_254.bmp\r\n0012\\0012_01_08_03_26.bmp\r\n0012\\0012_01_08_03_267.bmp\r\n0012\\0012_01_08_03_276.bmp\r\n0012\\0012_01_08_03_297.bmp\r\n0012\\0012_01_08_03_300.bmp\r\n0012\\0012_01_08_03_305.bmp\r\n0012\\0012_01_08_03_319.bmp\r\n0012\\0012_01_08_03_324.bmp\r\n0012\\0012_01_08_03_331.bmp\r\n0012\\0012_01_08_03_340.bmp\r\n0012\\0012_01_08_03_345.bmp\r\n0012\\0012_01_08_03_35.bmp\r\n0012\\0012_01_08_03_363.bmp\r\n0012\\0012_01_08_03_368.bmp\r\n0012\\0012_01_08_03_372.bmp\r\n0012\\0012_01_08_03_377.bmp\r\n0012\\0012_01_08_03_387.bmp\r\n0012\\0012_01_08_03_391.bmp\r\n0012\\0012_01_08_03_396.bmp\r\n0012\\0012_01_08_03_40.bmp\r\n0012\\0012_01_08_03_414.bmp\r\n0012\\0012_01_08_03_421.bmp\r\n0012\\0012_01_08_03_426.bmp\r\n0012\\0012_01_08_03_432.bmp\r\n0012\\0012_01_08_03_444.bmp\r\n0012\\0012_01_08_03_449.bmp\r\n0012\\0012_01_08_03_457.bmp\r\n0012\\0012_01_08_03_462.bmp\r\n0012\\0012_01_08_03_467.bmp\r\n0012\\0012_01_08_03_471.bmp\r\n0012\\0012_01_08_03_480.bmp\r\n0012\\0012_01_08_03_485.bmp\r\n0012\\0012_01_08_03_49.bmp\r\n0012\\0012_01_08_03_494.bmp\r\n0012\\0012_01_08_03_5.bmp\r\n0012\\0012_01_08_03_54.bmp\r\n0012\\0012_01_08_03_59.bmp\r\n0012\\0012_01_08_03_63.bmp\r\n0012\\0012_01_08_03_78.bmp\r\n0012\\0012_01_08_03_85.bmp\r\n0012\\0012_01_08_03_9.bmp\r\n0012\\0012_01_08_03_94.bmp\r\n0011\\0011_01_03_03_0.bmp\r\n0011\\0011_01_03_03_103.bmp\r\n0011\\0011_01_03_03_112.bmp\r\n0011\\0011_01_03_03_118.bmp\r\n0011\\0011_01_03_03_125.bmp\r\n0011\\0011_01_03_03_131.bmp\r\n0011\\0011_01_03_03_137.bmp\r\n0011\\0011_01_03_03_143.bmp\r\n0011\\0011_01_03_03_151.bmp\r\n0011\\0011_01_03_03_156.bmp\r\n0011\\0011_01_03_03_161.bmp\r\n0011\\0011_01_03_03_168.bmp\r\n0011\\0011_01_03_03_173.bmp\r\n0011\\0011_01_03_03_179.bmp\r\n0011\\0011_01_03_03_183.bmp\r\n0011\\0011_01_03_03_19.bmp\r\n0011\\0011_01_03_03_196.bmp\r\n0011\\0011_01_03_03_202.bmp\r\n0011\\0011_01_03_03_207.bmp\r\n0011\\0011_01_03_03_212.bmp\r\n0011\\0011_01_03_03_221.bmp\r\n0011\\0011_01_03_03_227.bmp\r\n0011\\0011_01_03_03_231.bmp\r\n0011\\0011_01_03_03_236.bmp\r\n0011\\0011_01_03_03_241.bmp\r\n0011\\0011_01_03_03_246.bmp\r\n0011\\0011_01_03_03_250.bmp\r\n0011\\0011_01_03_03_255.bmp\r\n0011\\0011_01_03_03_260.bmp\r\n0011\\0011_01_03_03_268.bmp\r\n0011\\0011_01_03_03_275.bmp\r\n0011\\0011_01_03_03_28.bmp\r\n0011\\0011_01_03_03_287.bmp\r\n0011\\0011_01_03_03_292.bmp\r\n0011\\0011_01_03_03_297.bmp\r\n0011\\0011_01_03_03_300.bmp\r\n0011\\0011_01_03_03_305.bmp\r\n0011\\0011_01_03_03_310.bmp\r\n0011\\0011_01_03_03_317.bmp\r\n0011\\0011_01_03_03_321.bmp\r\n0011\\0011_01_03_03_327.bmp\r\n0011\\0011_01_03_03_331.bmp\r\n0011\\0011_01_03_03_336.bmp\r\n0011\\0011_01_03_03_341.bmp\r\n0011\\0011_01_03_03_346.bmp\r\n0011\\0011_01_03_03_353.bmp\r\n0011\\0011_01_03_03_358.bmp\r\n0011\\0011_01_03_03_362.bmp\r\n0011\\0011_01_03_03_367.bmp\r\n0011\\0011_01_03_03_372.bmp\r\n0011\\0011_01_03_03_382.bmp\r\n0011\\0011_01_03_03_390.bmp\r\n0011\\0011_01_03_03_395.bmp\r\n0011\\0011_01_03_03_4.bmp\r\n0011\\0011_01_03_03_404.bmp\r\n0011\\0011_01_03_03_409.bmp\r\n0011\\0011_01_03_03_414.bmp\r\n0011\\0011_01_03_03_419.bmp\r\n0011\\0011_01_03_03_423.bmp\r\n0011\\0011_01_03_03_428.bmp\r\n0011\\0011_01_03_03_432.bmp\r\n0011\\0011_01_03_03_437.bmp\r\n0011\\0011_01_03_03_441.bmp\r\n0011\\0011_01_03_03_446.bmp\r\n0011\\0011_01_03_03_451.bmp\r\n0011\\0011_01_03_03_456.bmp\r\n0011\\0011_01_03_03_460.bmp\r\n0011\\0011_01_03_03_468.bmp\r\n0011\\0011_01_03_03_475.bmp\r\n0011\\0011_01_03_03_480.bmp\r\n0011\\0011_01_03_03_486.bmp\r\n0011\\0011_01_03_03_491.bmp\r\n0011\\0011_01_03_03_496.bmp\r\n0011\\0011_01_03_03_51.bmp\r\n0011\\0011_01_03_03_6.bmp\r\n0011\\0011_01_03_03_67.bmp\r\n0011\\0011_01_03_03_71.bmp\r\n0011\\0011_01_03_03_77.bmp\r\n0011\\0011_01_03_03_82.bmp\r\n0011\\0011_01_03_03_89.bmp\r\n0011\\0011_01_03_03_94.bmp\r\n0011\\0011_01_04_03_0.bmp\r\n0011\\0011_01_04_03_105.bmp\r\n0011\\0011_01_04_03_11.bmp\r\n0011\\0011_01_04_03_121.bmp\r\n0011\\0011_01_04_03_127.bmp\r\n0011\\0011_01_04_03_137.bmp\r\n0011\\0011_01_04_03_146.bmp\r\n0011\\0011_01_04_03_151.bmp\r\n0011\\0011_01_04_03_156.bmp\r\n0011\\0011_01_04_03_161.bmp\r\n0011\\0011_01_04_03_167.bmp\r\n0011\\0011_01_04_03_171.bmp\r\n0011\\0011_01_04_03_176.bmp\r\n0011\\0011_01_04_03_180.bmp\r\n0011\\0011_01_04_03_185.bmp\r\n0011\\0011_01_04_03_190.bmp\r\n0011\\0011_01_04_03_195.bmp\r\n0011\\0011_01_04_03_20.bmp\r\n0011\\0011_01_04_03_205.bmp\r\n0011\\0011_01_04_03_210.bmp\r\n0011\\0011_01_04_03_215.bmp\r\n0011\\0011_01_04_03_226.bmp\r\n0011\\0011_01_04_03_235.bmp\r\n0011\\0011_01_04_03_24.bmp\r\n0011\\0011_01_04_03_245.bmp\r\n0011\\0011_01_04_03_25.bmp\r\n0011\\0011_01_04_03_255.bmp\r\n0011\\0011_01_04_03_26.bmp\r\n0011\\0011_01_04_03_264.bmp\r\n0011\\0011_01_04_03_27.bmp\r\n0011\\0011_01_04_03_275.bmp\r\n0011\\0011_01_04_03_28.bmp\r\n0011\\0011_01_04_03_288.bmp\r\n0011\\0011_01_04_03_296.bmp\r\n0011\\0011_01_04_03_301.bmp\r\n0011\\0011_01_04_03_307.bmp\r\n0011\\0011_01_04_03_311.bmp\r\n0011\\0011_01_04_03_317.bmp\r\n0011\\0011_01_04_03_322.bmp\r\n0011\\0011_01_04_03_327.bmp\r\n0011\\0011_01_04_03_340.bmp\r\n0011\\0011_01_04_03_346.bmp\r\n0011\\0011_01_04_03_350.bmp\r\n0011\\0011_01_04_03_357.bmp\r\n0011\\0011_01_04_03_362.bmp\r\n0011\\0011_01_04_03_372.bmp\r\n0011\\0011_01_04_03_378.bmp\r\n0011\\0011_01_04_03_384.bmp\r\n0011\\0011_01_04_03_390.bmp\r\n0011\\0011_01_04_03_396.bmp\r\n0011\\0011_01_04_03_403.bmp\r\n0011\\0011_01_04_03_408.bmp\r\n0011\\0011_01_04_03_413.bmp\r\n0011\\0011_01_04_03_418.bmp\r\n0011\\0011_01_04_03_422.bmp\r\n0011\\0011_01_04_03_427.bmp\r\n0011\\0011_01_04_03_432.bmp\r\n0011\\0011_01_04_03_438.bmp\r\n0011\\0011_01_04_03_443.bmp\r\n0011\\0011_01_04_03_448.bmp\r\n0011\\0011_01_04_03_452.bmp\r\n0011\\0011_01_04_03_457.bmp\r\n0011\\0011_01_04_03_461.bmp\r\n0011\\0011_01_04_03_468.bmp\r\n0011\\0011_01_04_03_476.bmp\r\n0011\\0011_01_04_03_480.bmp\r\n0011\\0011_01_04_03_486.bmp\r\n0011\\0011_01_04_03_491.bmp\r\n0011\\0011_01_04_03_496.bmp\r\n0011\\0011_01_04_03_51.bmp\r\n0011\\0011_01_04_03_61.bmp\r\n0011\\0011_01_04_03_67.bmp\r\n0011\\0011_01_04_03_72.bmp\r\n0011\\0011_01_04_03_78.bmp\r\n0011\\0011_01_04_03_84.bmp\r\n0011\\0011_01_04_03_9.bmp\r\n0011\\0011_01_04_03_98.bmp\r\n0011\\0011_01_01_03_0.bmp\r\n0011\\0011_01_01_03_105.bmp\r\n0011\\0011_01_01_03_114.bmp\r\n0011\\0011_01_01_03_120.bmp\r\n0011\\0011_01_01_03_132.bmp\r\n0011\\0011_01_01_03_138.bmp\r\n0011\\0011_01_01_03_149.bmp\r\n0011\\0011_01_01_03_157.bmp\r\n0011\\0011_01_01_03_168.bmp\r\n0011\\0011_01_01_03_176.bmp\r\n0011\\0011_01_01_03_185.bmp\r\n0011\\0011_01_01_03_191.bmp\r\n0011\\0011_01_01_03_20.bmp\r\n0011\\0011_01_01_03_208.bmp\r\n0011\\0011_01_01_03_217.bmp\r\n0011\\0011_01_01_03_221.bmp\r\n0011\\0011_01_01_03_23.bmp\r\n0011\\0011_01_01_03_234.bmp\r\n0011\\0011_01_01_03_243.bmp\r\n0011\\0011_01_01_03_25.bmp\r\n0011\\0011_01_01_03_257.bmp\r\n0011\\0011_01_01_03_262.bmp\r\n0011\\0011_01_01_03_269.bmp\r\n0011\\0011_01_01_03_276.bmp\r\n0011\\0011_01_01_03_281.bmp\r\n0011\\0011_01_01_03_290.bmp\r\n0011\\0011_01_01_03_300.bmp\r\n0011\\0011_01_01_03_310.bmp\r\n0011\\0011_01_01_03_316.bmp\r\n0011\\0011_01_01_03_321.bmp\r\n0011\\0011_01_01_03_328.bmp\r\n0011\\0011_01_01_03_333.bmp\r\n0011\\0011_01_01_03_340.bmp\r\n0011\\0011_01_01_03_346.bmp\r\n0011\\0011_01_01_03_356.bmp\r\n0011\\0011_01_01_03_360.bmp\r\n0011\\0011_01_01_03_367.bmp\r\n0011\\0011_01_01_03_375.bmp\r\n0011\\0011_01_01_03_380.bmp\r\n0011\\0011_01_01_03_389.bmp\r\n0011\\0011_01_01_03_397.bmp\r\n0011\\0011_01_01_03_404.bmp\r\n0011\\0011_01_01_03_411.bmp\r\n0011\\0011_01_01_03_417.bmp\r\n0011\\0011_01_01_03_423.bmp\r\n0011\\0011_01_01_03_431.bmp\r\n0011\\0011_01_01_03_436.bmp\r\n0011\\0011_01_01_03_442.bmp\r\n0011\\0011_01_01_03_447.bmp\r\n0011\\0011_01_01_03_453.bmp\r\n0011\\0011_01_01_03_460.bmp\r\n0011\\0011_01_01_03_472.bmp\r\n0011\\0011_01_01_03_481.bmp\r\n0011\\0011_01_01_03_489.bmp\r\n0011\\0011_01_01_03_498.bmp\r\n0011\\0011_01_01_03_60.bmp\r\n0011\\0011_01_01_03_67.bmp\r\n0011\\0011_01_01_03_74.bmp\r\n0011\\0011_01_01_03_83.bmp\r\n0011\\0011_01_01_03_89.bmp\r\n0011\\0011_01_01_03_96.bmp\r\n0011\\0011_01_02_03_106.bmp\r\n0011\\0011_01_02_03_119.bmp\r\n0011\\0011_01_02_03_137.bmp\r\n0011\\0011_01_02_03_165.bmp\r\n0011\\0011_01_02_03_174.bmp\r\n0011\\0011_01_02_03_184.bmp\r\n0011\\0011_01_02_03_193.bmp\r\n0011\\0011_01_02_03_203.bmp\r\n0011\\0011_01_02_03_214.bmp\r\n0011\\0011_01_02_03_236.bmp\r\n0011\\0011_01_02_03_248.bmp\r\n0011\\0011_01_02_03_260.bmp\r\n0011\\0011_01_02_03_27.bmp\r\n0011\\0011_01_02_03_287.bmp\r\n0011\\0011_01_02_03_30.bmp\r\n0011\\0011_01_02_03_310.bmp\r\n0011\\0011_01_02_03_331.bmp\r\n0011\\0011_01_02_03_337.bmp\r\n0011\\0011_01_02_03_360.bmp\r\n0011\\0011_01_02_03_374.bmp\r\n0011\\0011_01_02_03_386.bmp\r\n0011\\0011_01_02_03_395.bmp\r\n0011\\0011_01_02_03_407.bmp\r\n0011\\0011_01_02_03_418.bmp\r\n0011\\0011_01_02_03_429.bmp\r\n0011\\0011_01_02_03_441.bmp\r\n0011\\0011_01_02_03_455.bmp\r\n0011\\0011_01_02_03_47.bmp\r\n0011\\0011_01_02_03_49.bmp\r\n0011\\0011_01_02_03_57.bmp\r\n0011\\0011_01_02_03_66.bmp\r\n0011\\0011_01_02_03_77.bmp\r\n0011\\0011_01_02_03_89.bmp\r\n0011\\0011_01_02_03_99.bmp\r\n0011\\0011_01_08_03_0.bmp\r\n0011\\0011_01_08_03_102.bmp\r\n0011\\0011_01_08_03_108.bmp\r\n0011\\0011_01_08_03_112.bmp\r\n0011\\0011_01_08_03_119.bmp\r\n0011\\0011_01_08_03_136.bmp\r\n0011\\0011_01_08_03_143.bmp\r\n0011\\0011_01_08_03_152.bmp\r\n0011\\0011_01_08_03_159.bmp\r\n0011\\0011_01_08_03_174.bmp\r\n0011\\0011_01_08_03_179.bmp\r\n0011\\0011_01_08_03_187.bmp\r\n0011\\0011_01_08_03_22.bmp\r\n0011\\0011_01_08_03_239.bmp\r\n0011\\0011_01_08_03_244.bmp\r\n0011\\0011_01_08_03_25.bmp\r\n0011\\0011_01_08_03_256.bmp\r\n0011\\0011_01_08_03_260.bmp\r\n0011\\0011_01_08_03_266.bmp\r\n0011\\0011_01_08_03_270.bmp\r\n0011\\0011_01_08_03_279.bmp\r\n0011\\0011_01_08_03_283.bmp\r\n0011\\0011_01_08_03_288.bmp\r\n0011\\0011_01_08_03_293.bmp\r\n0011\\0011_01_08_03_307.bmp\r\n0011\\0011_01_08_03_311.bmp\r\n0011\\0011_01_08_03_326.bmp\r\n0011\\0011_01_08_03_345.bmp\r\n0011\\0011_01_08_03_354.bmp\r\n0011\\0011_01_08_03_369.bmp\r\n0011\\0011_01_08_03_380.bmp\r\n0011\\0011_01_08_03_386.bmp\r\n0011\\0011_01_08_03_390.bmp\r\n0011\\0011_01_08_03_423.bmp\r\n0011\\0011_01_08_03_428.bmp\r\n0011\\0011_01_08_03_434.bmp\r\n0011\\0011_01_08_03_44.bmp\r\n0011\\0011_01_08_03_447.bmp\r\n0011\\0011_01_08_03_453.bmp\r\n0011\\0011_01_08_03_458.bmp\r\n0011\\0011_01_08_03_463.bmp\r\n0011\\0011_01_08_03_476.bmp\r\n0011\\0011_01_08_03_482.bmp\r\n0011\\0011_01_08_03_495.bmp\r\n0011\\0011_01_08_03_51.bmp\r\n0011\\0011_01_08_03_58.bmp\r\n0011\\0011_01_08_03_67.bmp\r\n0011\\0011_01_08_03_79.bmp\r\n0011\\0011_01_08_03_91.bmp\r\n0011\\0011_01_08_03_96.bmp\r\n"
  },
  {
    "path": "Matlab/NUAA/imposter_train_normalized.txt",
    "content": "0001\\0001_00_00_01_0.bmp\r\n0001\\0001_00_00_01_102.bmp\r\n0001\\0001_00_00_01_107.bmp\r\n0001\\0001_00_00_01_111.bmp\r\n0001\\0001_00_00_01_116.bmp\r\n0001\\0001_00_00_01_120.bmp\r\n0001\\0001_00_00_01_125.bmp\r\n0001\\0001_00_00_01_13.bmp\r\n0001\\0001_00_00_01_134.bmp\r\n0001\\0001_00_00_01_139.bmp\r\n0001\\0001_00_00_01_143.bmp\r\n0001\\0001_00_00_01_148.bmp\r\n0001\\0001_00_00_01_152.bmp\r\n0001\\0001_00_00_01_157.bmp\r\n0001\\0001_00_00_01_161.bmp\r\n0001\\0001_00_00_01_166.bmp\r\n0001\\0001_00_00_01_170.bmp\r\n0001\\0001_00_00_01_175.bmp\r\n0001\\0001_00_00_01_18.bmp\r\n0001\\0001_00_00_01_184.bmp\r\n0001\\0001_00_00_01_189.bmp\r\n0001\\0001_00_00_01_193.bmp\r\n0001\\0001_00_00_01_198.bmp\r\n0001\\0001_00_00_01_201.bmp\r\n0001\\0001_00_00_01_206.bmp\r\n0001\\0001_00_00_01_210.bmp\r\n0001\\0001_00_00_01_215.bmp\r\n0001\\0001_00_00_01_22.bmp\r\n0001\\0001_00_00_01_224.bmp\r\n0001\\0001_00_00_01_229.bmp\r\n0001\\0001_00_00_01_233.bmp\r\n0001\\0001_00_00_01_238.bmp\r\n0001\\0001_00_00_01_242.bmp\r\n0001\\0001_00_00_01_247.bmp\r\n0001\\0001_00_00_01_251.bmp\r\n0001\\0001_00_00_01_256.bmp\r\n0001\\0001_00_00_01_260.bmp\r\n0001\\0001_00_00_01_265.bmp\r\n0001\\0001_00_00_01_27.bmp\r\n0001\\0001_00_00_01_274.bmp\r\n0001\\0001_00_00_01_279.bmp\r\n0001\\0001_00_00_01_283.bmp\r\n0001\\0001_00_00_01_288.bmp\r\n0001\\0001_00_00_01_292.bmp\r\n0001\\0001_00_00_01_297.bmp\r\n0001\\0001_00_00_01_300.bmp\r\n0001\\0001_00_00_01_305.bmp\r\n0001\\0001_00_00_01_31.bmp\r\n0001\\0001_00_00_01_314.bmp\r\n0001\\0001_00_00_01_319.bmp\r\n0001\\0001_00_00_01_323.bmp\r\n0001\\0001_00_00_01_328.bmp\r\n0001\\0001_00_00_01_332.bmp\r\n0001\\0001_00_00_01_337.bmp\r\n0001\\0001_00_00_01_341.bmp\r\n0001\\0001_00_00_01_346.bmp\r\n0001\\0001_00_00_01_350.bmp\r\n0001\\0001_00_00_01_355.bmp\r\n0001\\0001_00_00_01_36.bmp\r\n0001\\0001_00_00_01_364.bmp\r\n0001\\0001_00_00_01_369.bmp\r\n0001\\0001_00_00_01_373.bmp\r\n0001\\0001_00_00_01_378.bmp\r\n0001\\0001_00_00_01_382.bmp\r\n0001\\0001_00_00_01_387.bmp\r\n0001\\0001_00_00_01_391.bmp\r\n0001\\0001_00_00_01_396.bmp\r\n0001\\0001_00_00_01_40.bmp\r\n0001\\0001_00_00_01_404.bmp\r\n0001\\0001_00_00_01_409.bmp\r\n0001\\0001_00_00_01_413.bmp\r\n0001\\0001_00_00_01_418.bmp\r\n0001\\0001_00_00_01_422.bmp\r\n0001\\0001_00_00_01_427.bmp\r\n0001\\0001_00_00_01_431.bmp\r\n0001\\0001_00_00_01_436.bmp\r\n0001\\0001_00_00_01_440.bmp\r\n0001\\0001_00_00_01_445.bmp\r\n0001\\0001_00_00_01_45.bmp\r\n0001\\0001_00_00_01_454.bmp\r\n0001\\0001_00_00_01_459.bmp\r\n0001\\0001_00_00_01_463.bmp\r\n0001\\0001_00_00_01_468.bmp\r\n0001\\0001_00_00_01_472.bmp\r\n0001\\0001_00_00_01_477.bmp\r\n0001\\0001_00_00_01_481.bmp\r\n0001\\0001_00_00_01_486.bmp\r\n0001\\0001_00_00_01_490.bmp\r\n0001\\0001_00_00_01_495.bmp\r\n0001\\0001_00_00_01_5.bmp\r\n0001\\0001_00_00_01_54.bmp\r\n0001\\0001_00_00_01_59.bmp\r\n0001\\0001_00_00_01_63.bmp\r\n0001\\0001_00_00_01_68.bmp\r\n0001\\0001_00_00_01_72.bmp\r\n0001\\0001_00_00_01_77.bmp\r\n0001\\0001_00_00_01_81.bmp\r\n0001\\0001_00_00_01_86.bmp\r\n0001\\0001_00_00_01_90.bmp\r\n0001\\0001_00_00_01_95.bmp\r\n0002\\0002_01_00_01_0.bmp\r\n0002\\0002_01_00_01_102.bmp\r\n0002\\0002_01_00_01_107.bmp\r\n0002\\0002_01_00_01_111.bmp\r\n0002\\0002_01_00_01_116.bmp\r\n0002\\0002_01_00_01_120.bmp\r\n0002\\0002_01_00_01_125.bmp\r\n0002\\0002_01_00_01_13.bmp\r\n0002\\0002_01_00_01_134.bmp\r\n0002\\0002_01_00_01_139.bmp\r\n0002\\0002_01_00_01_143.bmp\r\n0002\\0002_01_00_01_148.bmp\r\n0002\\0002_01_00_01_152.bmp\r\n0002\\0002_01_00_01_157.bmp\r\n0002\\0002_01_00_01_161.bmp\r\n0002\\0002_01_00_01_166.bmp\r\n0002\\0002_01_00_01_170.bmp\r\n0002\\0002_01_00_01_175.bmp\r\n0002\\0002_01_00_01_18.bmp\r\n0002\\0002_01_00_01_184.bmp\r\n0002\\0002_01_00_01_189.bmp\r\n0002\\0002_01_00_01_193.bmp\r\n0002\\0002_01_00_01_198.bmp\r\n0002\\0002_01_00_01_201.bmp\r\n0002\\0002_01_00_01_206.bmp\r\n0002\\0002_01_00_01_210.bmp\r\n0002\\0002_01_00_01_215.bmp\r\n0002\\0002_01_00_01_22.bmp\r\n0002\\0002_01_00_01_224.bmp\r\n0002\\0002_01_00_01_229.bmp\r\n0002\\0002_01_00_01_233.bmp\r\n0002\\0002_01_00_01_238.bmp\r\n0002\\0002_01_00_01_242.bmp\r\n0002\\0002_01_00_01_247.bmp\r\n0002\\0002_01_00_01_251.bmp\r\n0002\\0002_01_00_01_256.bmp\r\n0002\\0002_01_00_01_260.bmp\r\n0002\\0002_01_00_01_265.bmp\r\n0002\\0002_01_00_01_27.bmp\r\n0002\\0002_01_00_01_274.bmp\r\n0002\\0002_01_00_01_279.bmp\r\n0002\\0002_01_00_01_283.bmp\r\n0002\\0002_01_00_01_288.bmp\r\n0002\\0002_01_00_01_292.bmp\r\n0002\\0002_01_00_01_297.bmp\r\n0002\\0002_01_00_01_300.bmp\r\n0002\\0002_01_00_01_305.bmp\r\n0002\\0002_01_00_01_31.bmp\r\n0002\\0002_01_00_01_314.bmp\r\n0002\\0002_01_00_01_319.bmp\r\n0002\\0002_01_00_01_323.bmp\r\n0002\\0002_01_00_01_328.bmp\r\n0002\\0002_01_00_01_332.bmp\r\n0002\\0002_01_00_01_337.bmp\r\n0002\\0002_01_00_01_341.bmp\r\n0002\\0002_01_00_01_346.bmp\r\n0002\\0002_01_00_01_350.bmp\r\n0002\\0002_01_00_01_355.bmp\r\n0002\\0002_01_00_01_36.bmp\r\n0002\\0002_01_00_01_364.bmp\r\n0002\\0002_01_00_01_369.bmp\r\n0002\\0002_01_00_01_373.bmp\r\n0002\\0002_01_00_01_378.bmp\r\n0002\\0002_01_00_01_382.bmp\r\n0002\\0002_01_00_01_387.bmp\r\n0002\\0002_01_00_01_391.bmp\r\n0002\\0002_01_00_01_396.bmp\r\n0002\\0002_01_00_01_40.bmp\r\n0002\\0002_01_00_01_404.bmp\r\n0002\\0002_01_00_01_409.bmp\r\n0002\\0002_01_00_01_413.bmp\r\n0002\\0002_01_00_01_418.bmp\r\n0002\\0002_01_00_01_422.bmp\r\n0002\\0002_01_00_01_427.bmp\r\n0002\\0002_01_00_01_431.bmp\r\n0002\\0002_01_00_01_436.bmp\r\n0002\\0002_01_00_01_440.bmp\r\n0002\\0002_01_00_01_445.bmp\r\n0002\\0002_01_00_01_45.bmp\r\n0002\\0002_01_00_01_454.bmp\r\n0002\\0002_01_00_01_459.bmp\r\n0002\\0002_01_00_01_463.bmp\r\n0002\\0002_01_00_01_468.bmp\r\n0002\\0002_01_00_01_472.bmp\r\n0002\\0002_01_00_01_477.bmp\r\n0002\\0002_01_00_01_481.bmp\r\n0002\\0002_01_00_01_486.bmp\r\n0002\\0002_01_00_01_490.bmp\r\n0002\\0002_01_00_01_495.bmp\r\n0002\\0002_01_00_01_50.bmp\r\n0002\\0002_01_00_01_55.bmp\r\n0002\\0002_01_00_01_6.bmp\r\n0002\\0002_01_00_01_64.bmp\r\n0002\\0002_01_00_01_69.bmp\r\n0002\\0002_01_00_01_73.bmp\r\n0002\\0002_01_00_01_78.bmp\r\n0002\\0002_01_00_01_82.bmp\r\n0002\\0002_01_00_01_87.bmp\r\n0002\\0002_01_00_01_91.bmp\r\n0002\\0002_01_00_01_96.bmp\r\n0003\\0003_01_00_01_10.bmp\r\n0003\\0003_01_00_01_104.bmp\r\n0003\\0003_01_00_01_109.bmp\r\n0003\\0003_01_00_01_113.bmp\r\n0003\\0003_01_00_01_118.bmp\r\n0003\\0003_01_00_01_122.bmp\r\n0003\\0003_01_00_01_127.bmp\r\n0003\\0003_01_00_01_131.bmp\r\n0003\\0003_01_00_01_136.bmp\r\n0003\\0003_01_00_01_140.bmp\r\n0003\\0003_01_00_01_145.bmp\r\n0003\\0003_01_00_01_15.bmp\r\n0003\\0003_01_00_01_154.bmp\r\n0003\\0003_01_00_01_159.bmp\r\n0003\\0003_01_00_01_163.bmp\r\n0003\\0003_01_00_01_168.bmp\r\n0003\\0003_01_00_01_172.bmp\r\n0003\\0003_01_00_01_177.bmp\r\n0003\\0003_01_00_01_181.bmp\r\n0003\\0003_01_00_01_186.bmp\r\n0003\\0003_01_00_01_190.bmp\r\n0003\\0003_01_00_01_195.bmp\r\n0003\\0003_01_00_01_20.bmp\r\n0003\\0003_01_00_01_204.bmp\r\n0003\\0003_01_00_01_209.bmp\r\n0003\\0003_01_00_01_213.bmp\r\n0003\\0003_01_00_01_218.bmp\r\n0003\\0003_01_00_01_222.bmp\r\n0003\\0003_01_00_01_227.bmp\r\n0003\\0003_01_00_01_231.bmp\r\n0003\\0003_01_00_01_236.bmp\r\n0003\\0003_01_00_01_240.bmp\r\n0003\\0003_01_00_01_245.bmp\r\n0003\\0003_01_00_01_25.bmp\r\n0003\\0003_01_00_01_254.bmp\r\n0003\\0003_01_00_01_259.bmp\r\n0003\\0003_01_00_01_263.bmp\r\n0003\\0003_01_00_01_268.bmp\r\n0003\\0003_01_00_01_272.bmp\r\n0003\\0003_01_00_01_277.bmp\r\n0003\\0003_01_00_01_281.bmp\r\n0003\\0003_01_00_01_286.bmp\r\n0003\\0003_01_00_01_290.bmp\r\n0003\\0003_01_00_01_295.bmp\r\n0003\\0003_01_00_01_30.bmp\r\n0003\\0003_01_00_01_304.bmp\r\n0003\\0003_01_00_01_309.bmp\r\n0003\\0003_01_00_01_313.bmp\r\n0003\\0003_01_00_01_318.bmp\r\n0003\\0003_01_00_01_322.bmp\r\n0003\\0003_01_00_01_327.bmp\r\n0003\\0003_01_00_01_331.bmp\r\n0003\\0003_01_00_01_336.bmp\r\n0003\\0003_01_00_01_340.bmp\r\n0003\\0003_01_00_01_345.bmp\r\n0003\\0003_01_00_01_35.bmp\r\n0003\\0003_01_00_01_354.bmp\r\n0003\\0003_01_00_01_359.bmp\r\n0003\\0003_01_00_01_363.bmp\r\n0003\\0003_01_00_01_368.bmp\r\n0003\\0003_01_00_01_372.bmp\r\n0003\\0003_01_00_01_377.bmp\r\n0003\\0003_01_00_01_381.bmp\r\n0003\\0003_01_00_01_386.bmp\r\n0003\\0003_01_00_01_390.bmp\r\n0003\\0003_01_00_01_395.bmp\r\n0003\\0003_01_00_01_40.bmp\r\n0003\\0003_01_00_01_404.bmp\r\n0003\\0003_01_00_01_409.bmp\r\n0003\\0003_01_00_01_413.bmp\r\n0003\\0003_01_00_01_418.bmp\r\n0003\\0003_01_00_01_422.bmp\r\n0003\\0003_01_00_01_427.bmp\r\n0003\\0003_01_00_01_431.bmp\r\n0003\\0003_01_00_01_436.bmp\r\n0003\\0003_01_00_01_440.bmp\r\n0003\\0003_01_00_01_445.bmp\r\n0003\\0003_01_00_01_45.bmp\r\n0003\\0003_01_00_01_454.bmp\r\n0003\\0003_01_00_01_459.bmp\r\n0003\\0003_01_00_01_463.bmp\r\n0003\\0003_01_00_01_468.bmp\r\n0003\\0003_01_00_01_472.bmp\r\n0003\\0003_01_00_01_477.bmp\r\n0003\\0003_01_00_01_481.bmp\r\n0003\\0003_01_00_01_486.bmp\r\n0003\\0003_01_00_01_490.bmp\r\n0003\\0003_01_00_01_495.bmp\r\n0003\\0003_01_00_01_50.bmp\r\n0003\\0003_01_00_01_55.bmp\r\n0003\\0003_01_00_01_6.bmp\r\n0003\\0003_01_00_01_64.bmp\r\n0003\\0003_01_00_01_69.bmp\r\n0003\\0003_01_00_01_73.bmp\r\n0003\\0003_01_00_01_78.bmp\r\n0003\\0003_01_00_01_82.bmp\r\n0003\\0003_01_00_01_87.bmp\r\n0003\\0003_01_00_01_91.bmp\r\n0003\\0003_01_00_01_96.bmp\r\n0004\\0004_01_00_01_0.bmp\r\n0004\\0004_01_00_01_102.bmp\r\n0004\\0004_01_00_01_107.bmp\r\n0004\\0004_01_00_01_111.bmp\r\n0004\\0004_01_00_01_116.bmp\r\n0004\\0004_01_00_01_120.bmp\r\n0004\\0004_01_00_01_125.bmp\r\n0004\\0004_01_00_01_13.bmp\r\n0004\\0004_01_00_01_134.bmp\r\n0004\\0004_01_00_01_139.bmp\r\n0004\\0004_01_00_01_143.bmp\r\n0004\\0004_01_00_01_148.bmp\r\n0004\\0004_01_00_01_154.bmp\r\n0004\\0004_01_00_01_16.bmp\r\n0004\\0004_01_00_01_164.bmp\r\n0004\\0004_01_00_01_169.bmp\r\n0004\\0004_01_00_01_173.bmp\r\n0004\\0004_01_00_01_178.bmp\r\n0004\\0004_01_00_01_182.bmp\r\n0004\\0004_01_00_01_187.bmp\r\n0004\\0004_01_00_01_191.bmp\r\n0004\\0004_01_00_01_196.bmp\r\n0004\\0004_01_00_01_20.bmp\r\n0004\\0004_01_00_01_204.bmp\r\n0004\\0004_01_00_01_209.bmp\r\n0004\\0004_01_00_01_213.bmp\r\n0004\\0004_01_00_01_218.bmp\r\n0004\\0004_01_00_01_222.bmp\r\n0004\\0004_01_00_01_227.bmp\r\n0004\\0004_01_00_01_231.bmp\r\n0004\\0004_01_00_01_236.bmp\r\n0004\\0004_01_00_01_240.bmp\r\n0004\\0004_01_00_01_245.bmp\r\n0004\\0004_01_00_01_25.bmp\r\n0004\\0004_01_00_01_254.bmp\r\n0004\\0004_01_00_01_259.bmp\r\n0004\\0004_01_00_01_263.bmp\r\n0004\\0004_01_00_01_268.bmp\r\n0004\\0004_01_00_01_272.bmp\r\n0004\\0004_01_00_01_277.bmp\r\n0004\\0004_01_00_01_281.bmp\r\n0004\\0004_01_00_01_286.bmp\r\n0004\\0004_01_00_01_290.bmp\r\n0004\\0004_01_00_01_295.bmp\r\n0004\\0004_01_00_01_3.bmp\r\n0004\\0004_01_00_01_303.bmp\r\n0004\\0004_01_00_01_308.bmp\r\n0004\\0004_01_00_01_312.bmp\r\n0004\\0004_01_00_01_317.bmp\r\n0004\\0004_01_00_01_321.bmp\r\n0004\\0004_01_00_01_326.bmp\r\n0004\\0004_01_00_01_330.bmp\r\n0004\\0004_01_00_01_335.bmp\r\n0004\\0004_01_00_01_34.bmp\r\n0004\\0004_01_00_01_344.bmp\r\n0004\\0004_01_00_01_349.bmp\r\n0004\\0004_01_00_01_353.bmp\r\n0004\\0004_01_00_01_358.bmp\r\n0004\\0004_01_00_01_362.bmp\r\n0004\\0004_01_00_01_367.bmp\r\n0004\\0004_01_00_01_371.bmp\r\n0004\\0004_01_00_01_376.bmp\r\n0004\\0004_01_00_01_380.bmp\r\n0004\\0004_01_00_01_385.bmp\r\n0004\\0004_01_00_01_39.bmp\r\n0004\\0004_01_00_01_394.bmp\r\n0004\\0004_01_00_01_399.bmp\r\n0004\\0004_01_00_01_402.bmp\r\n0004\\0004_01_00_01_407.bmp\r\n0004\\0004_01_00_01_411.bmp\r\n0004\\0004_01_00_01_416.bmp\r\n0004\\0004_01_00_01_420.bmp\r\n0004\\0004_01_00_01_425.bmp\r\n0004\\0004_01_00_01_43.bmp\r\n0004\\0004_01_00_01_434.bmp\r\n0004\\0004_01_00_01_439.bmp\r\n0004\\0004_01_00_01_443.bmp\r\n0004\\0004_01_00_01_448.bmp\r\n0004\\0004_01_00_01_452.bmp\r\n0004\\0004_01_00_01_457.bmp\r\n0004\\0004_01_00_01_461.bmp\r\n0004\\0004_01_00_01_466.bmp\r\n0004\\0004_01_00_01_470.bmp\r\n0004\\0004_01_00_01_475.bmp\r\n0004\\0004_01_00_01_48.bmp\r\n0004\\0004_01_00_01_484.bmp\r\n0004\\0004_01_00_01_489.bmp\r\n0004\\0004_01_00_01_493.bmp\r\n0004\\0004_01_00_01_498.bmp\r\n0004\\0004_01_00_01_53.bmp\r\n0004\\0004_01_00_01_58.bmp\r\n0004\\0004_01_00_01_63.bmp\r\n0004\\0004_01_00_01_68.bmp\r\n0004\\0004_01_00_01_72.bmp\r\n0004\\0004_01_00_01_77.bmp\r\n0004\\0004_01_00_01_82.bmp\r\n0004\\0004_01_00_01_87.bmp\r\n0004\\0004_01_00_01_91.bmp\r\n0004\\0004_01_00_01_96.bmp\r\n0005\\0005_00_00_01_10.bmp\r\n0005\\0005_00_00_01_104.bmp\r\n0005\\0005_00_00_01_109.bmp\r\n0005\\0005_00_00_01_113.bmp\r\n0005\\0005_00_00_01_118.bmp\r\n0005\\0005_00_00_01_122.bmp\r\n0005\\0005_00_00_01_127.bmp\r\n0005\\0005_00_00_01_131.bmp\r\n0005\\0005_00_00_01_136.bmp\r\n0005\\0005_00_00_01_140.bmp\r\n0005\\0005_00_00_01_145.bmp\r\n0005\\0005_00_00_01_151.bmp\r\n0005\\0005_00_00_01_156.bmp\r\n0005\\0005_00_00_01_160.bmp\r\n0005\\0005_00_00_01_165.bmp\r\n0005\\0005_00_00_01_17.bmp\r\n0005\\0005_00_00_01_174.bmp\r\n0005\\0005_00_00_01_179.bmp\r\n0005\\0005_00_00_01_183.bmp\r\n0005\\0005_00_00_01_188.bmp\r\n0005\\0005_00_00_01_192.bmp\r\n0005\\0005_00_00_01_197.bmp\r\n0005\\0005_00_00_01_201.bmp\r\n0005\\0005_00_00_01_206.bmp\r\n0005\\0005_00_00_01_210.bmp\r\n0005\\0005_00_00_01_215.bmp\r\n0005\\0005_00_00_01_22.bmp\r\n0005\\0005_00_00_01_224.bmp\r\n0005\\0005_00_00_01_229.bmp\r\n0005\\0005_00_00_01_233.bmp\r\n0005\\0005_00_00_01_238.bmp\r\n0005\\0005_00_00_01_242.bmp\r\n0005\\0005_00_00_01_247.bmp\r\n0005\\0005_00_00_01_251.bmp\r\n0005\\0005_00_00_01_256.bmp\r\n0005\\0005_00_00_01_260.bmp\r\n0005\\0005_00_00_01_265.bmp\r\n0005\\0005_00_00_01_27.bmp\r\n0005\\0005_00_00_01_274.bmp\r\n0005\\0005_00_00_01_279.bmp\r\n0005\\0005_00_00_01_283.bmp\r\n0005\\0005_00_00_01_30.bmp\r\n0005\\0005_00_00_01_328.bmp\r\n0005\\0005_00_00_01_332.bmp\r\n0005\\0005_00_00_01_337.bmp\r\n0005\\0005_00_00_01_341.bmp\r\n0005\\0005_00_00_01_346.bmp\r\n0005\\0005_00_00_01_356.bmp\r\n0005\\0005_00_00_01_360.bmp\r\n0005\\0005_00_00_01_365.bmp\r\n0005\\0005_00_00_01_37.bmp\r\n0005\\0005_00_00_01_374.bmp\r\n0005\\0005_00_00_01_379.bmp\r\n0005\\0005_00_00_01_383.bmp\r\n0005\\0005_00_00_01_388.bmp\r\n0005\\0005_00_00_01_392.bmp\r\n0005\\0005_00_00_01_397.bmp\r\n0005\\0005_00_00_01_401.bmp\r\n0005\\0005_00_00_01_406.bmp\r\n0005\\0005_00_00_01_410.bmp\r\n0005\\0005_00_00_01_415.bmp\r\n0005\\0005_00_00_01_42.bmp\r\n0005\\0005_00_00_01_425.bmp\r\n0005\\0005_00_00_01_43.bmp\r\n0005\\0005_00_00_01_434.bmp\r\n0005\\0005_00_00_01_439.bmp\r\n0005\\0005_00_00_01_443.bmp\r\n0005\\0005_00_00_01_448.bmp\r\n0005\\0005_00_00_01_452.bmp\r\n0005\\0005_00_00_01_457.bmp\r\n0005\\0005_00_00_01_461.bmp\r\n0005\\0005_00_00_01_466.bmp\r\n0005\\0005_00_00_01_470.bmp\r\n0005\\0005_00_00_01_475.bmp\r\n0005\\0005_00_00_01_48.bmp\r\n0005\\0005_00_00_01_484.bmp\r\n0005\\0005_00_00_01_489.bmp\r\n0005\\0005_00_00_01_493.bmp\r\n0005\\0005_00_00_01_498.bmp\r\n0005\\0005_00_00_01_52.bmp\r\n0005\\0005_00_00_01_57.bmp\r\n0005\\0005_00_00_01_61.bmp\r\n0005\\0005_00_00_01_66.bmp\r\n0005\\0005_00_00_01_70.bmp\r\n0005\\0005_00_00_01_75.bmp\r\n0005\\0005_00_00_01_8.bmp\r\n0005\\0005_00_00_01_84.bmp\r\n0005\\0005_00_00_01_89.bmp\r\n0005\\0005_00_00_01_93.bmp\r\n0005\\0005_00_00_01_98.bmp\r\n0006\\0006_00_00_01_100.bmp\r\n0006\\0006_00_00_01_105.bmp\r\n0006\\0006_00_00_01_110.bmp\r\n0006\\0006_00_00_01_115.bmp\r\n0006\\0006_00_00_01_13.bmp\r\n0006\\0006_00_00_01_136.bmp\r\n0006\\0006_00_00_01_140.bmp\r\n0006\\0006_00_00_01_145.bmp\r\n0006\\0006_00_00_01_15.bmp\r\n0006\\0006_00_00_01_154.bmp\r\n0006\\0006_00_00_01_159.bmp\r\n0006\\0006_00_00_01_164.bmp\r\n0006\\0006_00_00_01_170.bmp\r\n0006\\0006_00_00_01_175.bmp\r\n0006\\0006_00_00_01_180.bmp\r\n0006\\0006_00_00_01_185.bmp\r\n0006\\0006_00_00_01_190.bmp\r\n0006\\0006_00_00_01_195.bmp\r\n0006\\0006_00_00_01_2.bmp\r\n0006\\0006_00_00_01_205.bmp\r\n0006\\0006_00_00_01_211.bmp\r\n0006\\0006_00_00_01_224.bmp\r\n0006\\0006_00_00_01_229.bmp\r\n0006\\0006_00_00_01_233.bmp\r\n0006\\0006_00_00_01_239.bmp\r\n0006\\0006_00_00_01_243.bmp\r\n0006\\0006_00_00_01_248.bmp\r\n0006\\0006_00_00_01_252.bmp\r\n0006\\0006_00_00_01_257.bmp\r\n0006\\0006_00_00_01_263.bmp\r\n0006\\0006_00_00_01_270.bmp\r\n0006\\0006_00_00_01_281.bmp\r\n0006\\0006_00_00_01_286.bmp\r\n0006\\0006_00_00_01_290.bmp\r\n0006\\0006_00_00_01_295.bmp\r\n0006\\0006_00_00_01_30.bmp\r\n0006\\0006_00_00_01_304.bmp\r\n0006\\0006_00_00_01_309.bmp\r\n0006\\0006_00_00_01_313.bmp\r\n0006\\0006_00_00_01_318.bmp\r\n0006\\0006_00_00_01_326.bmp\r\n0006\\0006_00_00_01_330.bmp\r\n0006\\0006_00_00_01_335.bmp\r\n0006\\0006_00_00_01_34.bmp\r\n0006\\0006_00_00_01_344.bmp\r\n0006\\0006_00_00_01_349.bmp\r\n0006\\0006_00_00_01_354.bmp\r\n0006\\0006_00_00_01_359.bmp\r\n0006\\0006_00_00_01_363.bmp\r\n0006\\0006_00_00_01_368.bmp\r\n0006\\0006_00_00_01_372.bmp\r\n0006\\0006_00_00_01_377.bmp\r\n0006\\0006_00_00_01_381.bmp\r\n0006\\0006_00_00_01_386.bmp\r\n0006\\0006_00_00_01_390.bmp\r\n0006\\0006_00_00_01_395.bmp\r\n0006\\0006_00_00_01_40.bmp\r\n0006\\0006_00_00_01_404.bmp\r\n0006\\0006_00_00_01_409.bmp\r\n0006\\0006_00_00_01_413.bmp\r\n0006\\0006_00_00_01_418.bmp\r\n0006\\0006_00_00_01_422.bmp\r\n0006\\0006_00_00_01_427.bmp\r\n0006\\0006_00_00_01_431.bmp\r\n0006\\0006_00_00_01_436.bmp\r\n0006\\0006_00_00_01_440.bmp\r\n0006\\0006_00_00_01_445.bmp\r\n0006\\0006_00_00_01_45.bmp\r\n0006\\0006_00_00_01_454.bmp\r\n0006\\0006_00_00_01_46.bmp\r\n0006\\0006_00_00_01_465.bmp\r\n0006\\0006_00_00_01_47.bmp\r\n0006\\0006_00_00_01_474.bmp\r\n0006\\0006_00_00_01_479.bmp\r\n0006\\0006_00_00_01_483.bmp\r\n0006\\0006_00_00_01_488.bmp\r\n0006\\0006_00_00_01_492.bmp\r\n0006\\0006_00_00_01_497.bmp\r\n0006\\0006_00_00_01_52.bmp\r\n0006\\0006_00_00_01_57.bmp\r\n0006\\0006_00_00_01_62.bmp\r\n0006\\0006_00_00_01_67.bmp\r\n0006\\0006_00_00_01_72.bmp\r\n0006\\0006_00_00_01_78.bmp\r\n0006\\0006_00_00_01_83.bmp\r\n0006\\0006_00_00_01_88.bmp\r\n0006\\0006_00_00_01_93.bmp\r\n0006\\0006_00_00_01_98.bmp\r\n0007\\0007_01_00_01_0.bmp\r\n0007\\0007_01_00_01_102.bmp\r\n0007\\0007_01_00_01_107.bmp\r\n0007\\0007_01_00_01_111.bmp\r\n0007\\0007_01_00_01_116.bmp\r\n0007\\0007_01_00_01_120.bmp\r\n0007\\0007_01_00_01_125.bmp\r\n0007\\0007_01_00_01_13.bmp\r\n0007\\0007_01_00_01_134.bmp\r\n0007\\0007_01_00_01_139.bmp\r\n0007\\0007_01_00_01_144.bmp\r\n0007\\0007_01_00_01_149.bmp\r\n0007\\0007_01_00_01_154.bmp\r\n0007\\0007_01_00_01_159.bmp\r\n0007\\0007_01_00_01_164.bmp\r\n0007\\0007_01_00_01_171.bmp\r\n0007\\0007_01_00_01_176.bmp\r\n0007\\0007_01_00_01_180.bmp\r\n0007\\0007_01_00_01_185.bmp\r\n0007\\0007_01_00_01_19.bmp\r\n0007\\0007_01_00_01_194.bmp\r\n0007\\0007_01_00_01_199.bmp\r\n0007\\0007_01_00_01_204.bmp\r\n0007\\0007_01_00_01_209.bmp\r\n0007\\0007_01_00_01_214.bmp\r\n0007\\0007_01_00_01_219.bmp\r\n0007\\0007_01_00_01_223.bmp\r\n0007\\0007_01_00_01_228.bmp\r\n0007\\0007_01_00_01_233.bmp\r\n0007\\0007_01_00_01_238.bmp\r\n0007\\0007_01_00_01_242.bmp\r\n0007\\0007_01_00_01_247.bmp\r\n0007\\0007_01_00_01_251.bmp\r\n0007\\0007_01_00_01_256.bmp\r\n0007\\0007_01_00_01_260.bmp\r\n0007\\0007_01_00_01_265.bmp\r\n0007\\0007_01_00_01_27.bmp\r\n0007\\0007_01_00_01_274.bmp\r\n0007\\0007_01_00_01_279.bmp\r\n0007\\0007_01_00_01_283.bmp\r\n0007\\0007_01_00_01_288.bmp\r\n0007\\0007_01_00_01_292.bmp\r\n0007\\0007_01_00_01_297.bmp\r\n0007\\0007_01_00_01_301.bmp\r\n0007\\0007_01_00_01_306.bmp\r\n0007\\0007_01_00_01_311.bmp\r\n0007\\0007_01_00_01_316.bmp\r\n0007\\0007_01_00_01_320.bmp\r\n0007\\0007_01_00_01_325.bmp\r\n0007\\0007_01_00_01_33.bmp\r\n0007\\0007_01_00_01_334.bmp\r\n0007\\0007_01_00_01_339.bmp\r\n0007\\0007_01_00_01_343.bmp\r\n0007\\0007_01_00_01_348.bmp\r\n0007\\0007_01_00_01_352.bmp\r\n0007\\0007_01_00_01_358.bmp\r\n0007\\0007_01_00_01_362.bmp\r\n0007\\0007_01_00_01_367.bmp\r\n0007\\0007_01_00_01_371.bmp\r\n0007\\0007_01_00_01_376.bmp\r\n0007\\0007_01_00_01_380.bmp\r\n0007\\0007_01_00_01_385.bmp\r\n0007\\0007_01_00_01_39.bmp\r\n0007\\0007_01_00_01_394.bmp\r\n0007\\0007_01_00_01_399.bmp\r\n0007\\0007_01_00_01_403.bmp\r\n0007\\0007_01_00_01_41.bmp\r\n0007\\0007_01_00_01_414.bmp\r\n0007\\0007_01_00_01_419.bmp\r\n0007\\0007_01_00_01_423.bmp\r\n0007\\0007_01_00_01_428.bmp\r\n0007\\0007_01_00_01_432.bmp\r\n0007\\0007_01_00_01_437.bmp\r\n0007\\0007_01_00_01_441.bmp\r\n0007\\0007_01_00_01_446.bmp\r\n0007\\0007_01_00_01_450.bmp\r\n0007\\0007_01_00_01_455.bmp\r\n0007\\0007_01_00_01_46.bmp\r\n0007\\0007_01_00_01_464.bmp\r\n0007\\0007_01_00_01_469.bmp\r\n0007\\0007_01_00_01_473.bmp\r\n0007\\0007_01_00_01_478.bmp\r\n0007\\0007_01_00_01_482.bmp\r\n0007\\0007_01_00_01_487.bmp\r\n0007\\0007_01_00_01_491.bmp\r\n0007\\0007_01_00_01_496.bmp\r\n0007\\0007_01_00_01_51.bmp\r\n0007\\0007_01_00_01_56.bmp\r\n0007\\0007_01_00_01_61.bmp\r\n0007\\0007_01_00_01_66.bmp\r\n0007\\0007_01_00_01_70.bmp\r\n0007\\0007_01_00_01_75.bmp\r\n0007\\0007_01_00_01_8.bmp\r\n0007\\0007_01_00_01_84.bmp\r\n0007\\0007_01_00_01_89.bmp\r\n0007\\0007_01_00_01_93.bmp\r\n0007\\0007_01_00_01_98.bmp\r\n0009\\0009_01_00_01_100.bmp\r\n0009\\0009_01_00_01_105.bmp\r\n0009\\0009_01_00_01_11.bmp\r\n0009\\0009_01_00_01_114.bmp\r\n0009\\0009_01_00_01_119.bmp\r\n0009\\0009_01_00_01_123.bmp\r\n0009\\0009_01_00_01_128.bmp\r\n0009\\0009_01_00_01_132.bmp\r\n0009\\0009_01_00_01_137.bmp\r\n0009\\0009_01_00_01_141.bmp\r\n0009\\0009_01_00_01_146.bmp\r\n0009\\0009_01_00_01_150.bmp\r\n0009\\0009_01_00_01_155.bmp\r\n0009\\0009_01_00_01_16.bmp\r\n0009\\0009_01_00_01_164.bmp\r\n0009\\0009_01_00_01_169.bmp\r\n0009\\0009_01_00_01_173.bmp\r\n0009\\0009_01_00_01_18.bmp\r\n0009\\0009_01_00_01_184.bmp\r\n0009\\0009_01_00_01_189.bmp\r\n0009\\0009_01_00_01_193.bmp\r\n0009\\0009_01_00_01_198.bmp\r\n0009\\0009_01_00_01_202.bmp\r\n0009\\0009_01_00_01_207.bmp\r\n0009\\0009_01_00_01_211.bmp\r\n0009\\0009_01_00_01_216.bmp\r\n0009\\0009_01_00_01_220.bmp\r\n0009\\0009_01_00_01_225.bmp\r\n0009\\0009_01_00_01_23.bmp\r\n0009\\0009_01_00_01_234.bmp\r\n0009\\0009_01_00_01_239.bmp\r\n0009\\0009_01_00_01_244.bmp\r\n0009\\0009_01_00_01_249.bmp\r\n0009\\0009_01_00_01_253.bmp\r\n0009\\0009_01_00_01_258.bmp\r\n0009\\0009_01_00_01_262.bmp\r\n0009\\0009_01_00_01_267.bmp\r\n0009\\0009_01_00_01_271.bmp\r\n0009\\0009_01_00_01_276.bmp\r\n0009\\0009_01_00_01_280.bmp\r\n0009\\0009_01_00_01_285.bmp\r\n0009\\0009_01_00_01_29.bmp\r\n0009\\0009_01_00_01_294.bmp\r\n0009\\0009_01_00_01_299.bmp\r\n0009\\0009_01_00_01_310.bmp\r\n0009\\0009_01_00_01_317.bmp\r\n0009\\0009_01_00_01_321.bmp\r\n0009\\0009_01_00_01_326.bmp\r\n0009\\0009_01_00_01_330.bmp\r\n0009\\0009_01_00_01_341.bmp\r\n0009\\0009_01_00_01_346.bmp\r\n0009\\0009_01_00_01_350.bmp\r\n0009\\0009_01_00_01_355.bmp\r\n0009\\0009_01_00_01_36.bmp\r\n0009\\0009_01_00_01_364.bmp\r\n0009\\0009_01_00_01_369.bmp\r\n0009\\0009_01_00_01_374.bmp\r\n0009\\0009_01_00_01_379.bmp\r\n0009\\0009_01_00_01_383.bmp\r\n0009\\0009_01_00_01_388.bmp\r\n0009\\0009_01_00_01_392.bmp\r\n0009\\0009_01_00_01_397.bmp\r\n0009\\0009_01_00_01_401.bmp\r\n0009\\0009_01_00_01_408.bmp\r\n0009\\0009_01_00_01_415.bmp\r\n0009\\0009_01_00_01_422.bmp\r\n0009\\0009_01_00_01_427.bmp\r\n0009\\0009_01_00_01_431.bmp\r\n0009\\0009_01_00_01_436.bmp\r\n0009\\0009_01_00_01_441.bmp\r\n0009\\0009_01_00_01_446.bmp\r\n0009\\0009_01_00_01_450.bmp\r\n0009\\0009_01_00_01_455.bmp\r\n0009\\0009_01_00_01_460.bmp\r\n0009\\0009_01_00_01_465.bmp\r\n0009\\0009_01_00_01_470.bmp\r\n0009\\0009_01_00_01_475.bmp\r\n0009\\0009_01_00_01_481.bmp\r\n0009\\0009_01_00_01_486.bmp\r\n0009\\0009_01_00_01_490.bmp\r\n0009\\0009_01_00_01_495.bmp\r\n0009\\0009_01_00_01_60.bmp\r\n0009\\0009_01_00_01_65.bmp\r\n0009\\0009_01_00_01_70.bmp\r\n0009\\0009_01_00_01_75.bmp\r\n0009\\0009_01_00_01_80.bmp\r\n0009\\0009_01_00_01_85.bmp\r\n0009\\0009_01_00_01_99.bmp\r\n0008\\0008_00_00_01_10.bmp\r\n0008\\0008_00_00_01_104.bmp\r\n0008\\0008_00_00_01_109.bmp\r\n0008\\0008_00_00_01_113.bmp\r\n0008\\0008_00_00_01_118.bmp\r\n0008\\0008_00_00_01_122.bmp\r\n0008\\0008_00_00_01_127.bmp\r\n0008\\0008_00_00_01_131.bmp\r\n0008\\0008_00_00_01_136.bmp\r\n0008\\0008_00_00_01_140.bmp\r\n0008\\0008_00_00_01_145.bmp\r\n0008\\0008_00_00_01_15.bmp\r\n0008\\0008_00_00_01_154.bmp\r\n0008\\0008_00_00_01_159.bmp\r\n0008\\0008_00_00_01_163.bmp\r\n0008\\0008_00_00_01_168.bmp\r\n0008\\0008_00_00_01_172.bmp\r\n0008\\0008_00_00_01_18.bmp\r\n0008\\0008_00_00_01_191.bmp\r\n0008\\0008_00_00_01_196.bmp\r\n0008\\0008_00_00_01_200.bmp\r\n0008\\0008_00_00_01_205.bmp\r\n0008\\0008_00_00_01_21.bmp\r\n0008\\0008_00_00_01_214.bmp\r\n0008\\0008_00_00_01_219.bmp\r\n0008\\0008_00_00_01_223.bmp\r\n0008\\0008_00_00_01_228.bmp\r\n0008\\0008_00_00_01_233.bmp\r\n0008\\0008_00_00_01_238.bmp\r\n0008\\0008_00_00_01_243.bmp\r\n0008\\0008_00_00_01_248.bmp\r\n0008\\0008_00_00_01_252.bmp\r\n0008\\0008_00_00_01_257.bmp\r\n0008\\0008_00_00_01_261.bmp\r\n0008\\0008_00_00_01_266.bmp\r\n0008\\0008_00_00_01_270.bmp\r\n0008\\0008_00_00_01_275.bmp\r\n0008\\0008_00_00_01_280.bmp\r\n0008\\0008_00_00_01_285.bmp\r\n0008\\0008_00_00_01_290.bmp\r\n0008\\0008_00_00_01_295.bmp\r\n0008\\0008_00_00_01_300.bmp\r\n0008\\0008_00_00_01_305.bmp\r\n0008\\0008_00_00_01_310.bmp\r\n0008\\0008_00_00_01_315.bmp\r\n0008\\0008_00_00_01_32.bmp\r\n0008\\0008_00_00_01_324.bmp\r\n0008\\0008_00_00_01_329.bmp\r\n0008\\0008_00_00_01_333.bmp\r\n0008\\0008_00_00_01_338.bmp\r\n0008\\0008_00_00_01_342.bmp\r\n0008\\0008_00_00_01_347.bmp\r\n0008\\0008_00_00_01_352.bmp\r\n0008\\0008_00_00_01_357.bmp\r\n0008\\0008_00_00_01_362.bmp\r\n0008\\0008_00_00_01_367.bmp\r\n0008\\0008_00_00_01_372.bmp\r\n0008\\0008_00_00_01_377.bmp\r\n0008\\0008_00_00_01_382.bmp\r\n0008\\0008_00_00_01_387.bmp\r\n0008\\0008_00_00_01_392.bmp\r\n0008\\0008_00_00_01_397.bmp\r\n0008\\0008_00_00_01_402.bmp\r\n0008\\0008_00_00_01_407.bmp\r\n0008\\0008_00_00_01_412.bmp\r\n0008\\0008_00_00_01_417.bmp\r\n0008\\0008_00_00_01_421.bmp\r\n0008\\0008_00_00_01_426.bmp\r\n0008\\0008_00_00_01_430.bmp\r\n0008\\0008_00_00_01_435.bmp\r\n0008\\0008_00_00_01_44.bmp\r\n0008\\0008_00_00_01_444.bmp\r\n0008\\0008_00_00_01_449.bmp\r\n0008\\0008_00_00_01_453.bmp\r\n0008\\0008_00_00_01_458.bmp\r\n0008\\0008_00_00_01_462.bmp\r\n0008\\0008_00_00_01_467.bmp\r\n0008\\0008_00_00_01_471.bmp\r\n0008\\0008_00_00_01_476.bmp\r\n0008\\0008_00_00_01_480.bmp\r\n0008\\0008_00_00_01_485.bmp\r\n0008\\0008_00_00_01_49.bmp\r\n0008\\0008_00_00_01_494.bmp\r\n0008\\0008_00_00_01_499.bmp\r\n0008\\0008_00_00_01_54.bmp\r\n0008\\0008_00_00_01_59.bmp\r\n0008\\0008_00_00_01_64.bmp\r\n0008\\0008_00_00_01_69.bmp\r\n0008\\0008_00_00_01_74.bmp\r\n0008\\0008_00_00_01_79.bmp\r\n0008\\0008_00_00_01_83.bmp\r\n0008\\0008_00_00_01_88.bmp\r\n0008\\0008_00_00_01_92.bmp\r\n0008\\0008_00_00_01_97.bmp\r\n0001\\0001_00_01_02_0.bmp\r\n0001\\0001_00_01_02_116.bmp\r\n0001\\0001_00_01_02_134.bmp\r\n0001\\0001_00_01_02_152.bmp\r\n0001\\0001_00_01_02_170.bmp\r\n0001\\0001_00_01_02_189.bmp\r\n0001\\0001_00_01_02_206.bmp\r\n0001\\0001_00_01_02_224.bmp\r\n0001\\0001_00_01_02_242.bmp\r\n0001\\0001_00_01_02_260.bmp\r\n0001\\0001_00_01_02_279.bmp\r\n0001\\0001_00_01_02_297.bmp\r\n0001\\0001_00_01_02_315.bmp\r\n0001\\0001_00_01_02_333.bmp\r\n0001\\0001_00_01_02_351.bmp\r\n0001\\0001_00_01_02_37.bmp\r\n0001\\0001_00_01_02_388.bmp\r\n0001\\0001_00_01_02_405.bmp\r\n0001\\0001_00_01_02_423.bmp\r\n0001\\0001_00_01_02_441.bmp\r\n0001\\0001_00_01_02_46.bmp\r\n0001\\0001_00_01_02_478.bmp\r\n0001\\0001_00_01_02_496.bmp\r\n0001\\0001_00_01_02_64.bmp\r\n0001\\0001_00_01_02_82.bmp\r\n0001\\0001_00_02_02_0.bmp\r\n0001\\0001_00_02_02_116.bmp\r\n0001\\0001_00_02_02_134.bmp\r\n0001\\0001_00_02_02_152.bmp\r\n0001\\0001_00_02_02_170.bmp\r\n0001\\0001_00_02_02_189.bmp\r\n0001\\0001_00_02_02_206.bmp\r\n0001\\0001_00_02_02_224.bmp\r\n0001\\0001_00_02_02_242.bmp\r\n0001\\0001_00_02_02_260.bmp\r\n0001\\0001_00_02_02_279.bmp\r\n0001\\0001_00_02_02_297.bmp\r\n0001\\0001_00_02_02_314.bmp\r\n0001\\0001_00_02_02_332.bmp\r\n0001\\0001_00_02_02_350.bmp\r\n0001\\0001_00_02_02_369.bmp\r\n0001\\0001_00_02_02_387.bmp\r\n0001\\0001_00_02_02_404.bmp\r\n0001\\0001_00_02_02_422.bmp\r\n0001\\0001_00_02_02_440.bmp\r\n0001\\0001_00_02_02_459.bmp\r\n0001\\0001_00_02_02_477.bmp\r\n0001\\0001_00_02_02_495.bmp\r\n0001\\0001_00_02_02_63.bmp\r\n0001\\0001_00_02_02_81.bmp\r\n0001\\0001_00_03_02_0.bmp\r\n0001\\0001_00_03_02_116.bmp\r\n0001\\0001_00_03_02_134.bmp\r\n0001\\0001_00_03_02_152.bmp\r\n0001\\0001_00_03_02_170.bmp\r\n0001\\0001_00_03_02_189.bmp\r\n0001\\0001_00_03_02_206.bmp\r\n0001\\0001_00_03_02_224.bmp\r\n0001\\0001_00_03_02_242.bmp\r\n0001\\0001_00_03_02_260.bmp\r\n0001\\0001_00_03_02_280.bmp\r\n0001\\0001_00_03_02_3.bmp\r\n0001\\0001_00_03_02_320.bmp\r\n0001\\0001_00_03_02_339.bmp\r\n0001\\0001_00_03_02_357.bmp\r\n0001\\0001_00_03_02_376.bmp\r\n0001\\0001_00_03_02_394.bmp\r\n0001\\0001_00_03_02_411.bmp\r\n0001\\0001_00_03_02_431.bmp\r\n0001\\0001_00_03_02_45.bmp\r\n0001\\0001_00_03_02_468.bmp\r\n0001\\0001_00_03_02_486.bmp\r\n0001\\0001_00_03_02_54.bmp\r\n0001\\0001_00_03_02_72.bmp\r\n0001\\0001_00_03_02_90.bmp\r\n0001\\0001_00_04_02_0.bmp\r\n0001\\0001_00_04_02_116.bmp\r\n0001\\0001_00_04_02_134.bmp\r\n0001\\0001_00_04_02_152.bmp\r\n0001\\0001_00_04_02_170.bmp\r\n0001\\0001_00_04_02_189.bmp\r\n0001\\0001_00_04_02_206.bmp\r\n0001\\0001_00_04_02_224.bmp\r\n0001\\0001_00_04_02_242.bmp\r\n0001\\0001_00_04_02_260.bmp\r\n0001\\0001_00_04_02_279.bmp\r\n0001\\0001_00_04_02_297.bmp\r\n0001\\0001_00_04_02_314.bmp\r\n0001\\0001_00_04_02_332.bmp\r\n0001\\0001_00_04_02_350.bmp\r\n0001\\0001_00_04_02_369.bmp\r\n0001\\0001_00_04_02_387.bmp\r\n0001\\0001_00_04_02_404.bmp\r\n0001\\0001_00_04_02_422.bmp\r\n0001\\0001_00_04_02_440.bmp\r\n0001\\0001_00_04_02_459.bmp\r\n0001\\0001_00_04_02_477.bmp\r\n0001\\0001_00_04_02_495.bmp\r\n0001\\0001_00_04_02_63.bmp\r\n0001\\0001_00_04_02_81.bmp\r\n0002\\0002_01_01_02_0.bmp\r\n0002\\0002_01_01_02_116.bmp\r\n0002\\0002_01_01_02_134.bmp\r\n0002\\0002_01_01_02_152.bmp\r\n0002\\0002_01_01_02_170.bmp\r\n0002\\0002_01_01_02_189.bmp\r\n0002\\0002_01_01_02_206.bmp\r\n0002\\0002_01_01_02_224.bmp\r\n0002\\0002_01_01_02_242.bmp\r\n0002\\0002_01_01_02_260.bmp\r\n0002\\0002_01_01_02_279.bmp\r\n0002\\0002_01_01_02_297.bmp\r\n0002\\0002_01_01_02_314.bmp\r\n0002\\0002_01_01_02_332.bmp\r\n0002\\0002_01_01_02_350.bmp\r\n0002\\0002_01_01_02_369.bmp\r\n0002\\0002_01_01_02_387.bmp\r\n0002\\0002_01_01_02_404.bmp\r\n0002\\0002_01_01_02_422.bmp\r\n0002\\0002_01_01_02_440.bmp\r\n0002\\0002_01_01_02_459.bmp\r\n0002\\0002_01_01_02_477.bmp\r\n0002\\0002_01_01_02_495.bmp\r\n0002\\0002_01_01_02_63.bmp\r\n0002\\0002_01_01_02_81.bmp\r\n0002\\0002_01_02_02_0.bmp\r\n0002\\0002_01_02_02_117.bmp\r\n0002\\0002_01_02_02_136.bmp\r\n0002\\0002_01_02_02_154.bmp\r\n0002\\0002_01_02_02_172.bmp\r\n0002\\0002_01_02_02_190.bmp\r\n0002\\0002_01_02_02_208.bmp\r\n0002\\0002_01_02_02_226.bmp\r\n0002\\0002_01_02_02_244.bmp\r\n0002\\0002_01_02_02_262.bmp\r\n0002\\0002_01_02_02_280.bmp\r\n0002\\0002_01_02_02_299.bmp\r\n0002\\0002_01_02_02_316.bmp\r\n0002\\0002_01_02_02_334.bmp\r\n0002\\0002_01_02_02_352.bmp\r\n0002\\0002_01_02_02_370.bmp\r\n0002\\0002_01_02_02_389.bmp\r\n0002\\0002_01_02_02_406.bmp\r\n0002\\0002_01_02_02_424.bmp\r\n0002\\0002_01_02_02_442.bmp\r\n0002\\0002_01_02_02_460.bmp\r\n0002\\0002_01_02_02_479.bmp\r\n0002\\0002_01_02_02_497.bmp\r\n0002\\0002_01_02_02_66.bmp\r\n0002\\0002_01_02_02_84.bmp\r\n0002\\0002_01_03_02_0.bmp\r\n0002\\0002_01_03_02_116.bmp\r\n0002\\0002_01_03_02_134.bmp\r\n0002\\0002_01_03_02_152.bmp\r\n0002\\0002_01_03_02_170.bmp\r\n0002\\0002_01_03_02_189.bmp\r\n0002\\0002_01_03_02_206.bmp\r\n0002\\0002_01_03_02_224.bmp\r\n0002\\0002_01_03_02_242.bmp\r\n0002\\0002_01_03_02_260.bmp\r\n0002\\0002_01_03_02_279.bmp\r\n0002\\0002_01_03_02_297.bmp\r\n0002\\0002_01_03_02_314.bmp\r\n0002\\0002_01_03_02_332.bmp\r\n0002\\0002_01_03_02_350.bmp\r\n0002\\0002_01_03_02_369.bmp\r\n0002\\0002_01_03_02_387.bmp\r\n0002\\0002_01_03_02_404.bmp\r\n0002\\0002_01_03_02_422.bmp\r\n0002\\0002_01_03_02_440.bmp\r\n0002\\0002_01_03_02_459.bmp\r\n0002\\0002_01_03_02_477.bmp\r\n0002\\0002_01_03_02_495.bmp\r\n0002\\0002_01_03_02_63.bmp\r\n0002\\0002_01_03_02_81.bmp\r\n0002\\0002_01_04_02_0.bmp\r\n0002\\0002_01_04_02_116.bmp\r\n0002\\0002_01_04_02_134.bmp\r\n0002\\0002_01_04_02_152.bmp\r\n0002\\0002_01_04_02_170.bmp\r\n0002\\0002_01_04_02_189.bmp\r\n0002\\0002_01_04_02_206.bmp\r\n0002\\0002_01_04_02_224.bmp\r\n0002\\0002_01_04_02_242.bmp\r\n0002\\0002_01_04_02_260.bmp\r\n0002\\0002_01_04_02_279.bmp\r\n0002\\0002_01_04_02_297.bmp\r\n0002\\0002_01_04_02_314.bmp\r\n0002\\0002_01_04_02_332.bmp\r\n0002\\0002_01_04_02_350.bmp\r\n0002\\0002_01_04_02_369.bmp\r\n0002\\0002_01_04_02_387.bmp\r\n0002\\0002_01_04_02_404.bmp\r\n0002\\0002_01_04_02_422.bmp\r\n0002\\0002_01_04_02_440.bmp\r\n0002\\0002_01_04_02_459.bmp\r\n0002\\0002_01_04_02_477.bmp\r\n0002\\0002_01_04_02_495.bmp\r\n0002\\0002_01_04_02_63.bmp\r\n0002\\0002_01_04_02_81.bmp\r\n0003\\0003_01_01_02_10.bmp\r\n0003\\0003_01_01_02_118.bmp\r\n0003\\0003_01_01_02_136.bmp\r\n0003\\0003_01_01_02_154.bmp\r\n0003\\0003_01_01_02_172.bmp\r\n0003\\0003_01_01_02_190.bmp\r\n0003\\0003_01_01_02_209.bmp\r\n0003\\0003_01_01_02_227.bmp\r\n0003\\0003_01_01_02_245.bmp\r\n0003\\0003_01_01_02_263.bmp\r\n0003\\0003_01_01_02_281.bmp\r\n0003\\0003_01_01_02_30.bmp\r\n0003\\0003_01_01_02_318.bmp\r\n0003\\0003_01_01_02_336.bmp\r\n0003\\0003_01_01_02_354.bmp\r\n0003\\0003_01_01_02_372.bmp\r\n0003\\0003_01_01_02_390.bmp\r\n0003\\0003_01_01_02_409.bmp\r\n0003\\0003_01_01_02_427.bmp\r\n0003\\0003_01_01_02_445.bmp\r\n0003\\0003_01_01_02_463.bmp\r\n0003\\0003_01_01_02_481.bmp\r\n0003\\0003_01_01_02_50.bmp\r\n0003\\0003_01_01_02_7.bmp\r\n0003\\0003_01_01_02_88.bmp\r\n0003\\0003_01_02_02_0.bmp\r\n0003\\0003_01_02_02_117.bmp\r\n0003\\0003_01_02_02_137.bmp\r\n0003\\0003_01_02_02_155.bmp\r\n0003\\0003_01_02_02_173.bmp\r\n0003\\0003_01_02_02_191.bmp\r\n0003\\0003_01_02_02_210.bmp\r\n0003\\0003_01_02_02_230.bmp\r\n0003\\0003_01_02_02_249.bmp\r\n0003\\0003_01_02_02_267.bmp\r\n0003\\0003_01_02_02_285.bmp\r\n0003\\0003_01_02_02_302.bmp\r\n0003\\0003_01_02_02_320.bmp\r\n0003\\0003_01_02_02_339.bmp\r\n0003\\0003_01_02_02_357.bmp\r\n0003\\0003_01_02_02_375.bmp\r\n0003\\0003_01_02_02_393.bmp\r\n0003\\0003_01_02_02_410.bmp\r\n0003\\0003_01_02_02_429.bmp\r\n0003\\0003_01_02_02_447.bmp\r\n0003\\0003_01_02_02_465.bmp\r\n0003\\0003_01_02_02_483.bmp\r\n0003\\0003_01_02_02_51.bmp\r\n0003\\0003_01_02_02_7.bmp\r\n0003\\0003_01_02_02_88.bmp\r\n0003\\0003_01_03_02_10.bmp\r\n0003\\0003_01_03_02_118.bmp\r\n0003\\0003_01_03_02_136.bmp\r\n0003\\0003_01_03_02_154.bmp\r\n0003\\0003_01_03_02_172.bmp\r\n0003\\0003_01_03_02_190.bmp\r\n0003\\0003_01_03_02_209.bmp\r\n0003\\0003_01_03_02_227.bmp\r\n0003\\0003_01_03_02_245.bmp\r\n0003\\0003_01_03_02_263.bmp\r\n0003\\0003_01_03_02_281.bmp\r\n0003\\0003_01_03_02_30.bmp\r\n0003\\0003_01_03_02_318.bmp\r\n0003\\0003_01_03_02_336.bmp\r\n0003\\0003_01_03_02_354.bmp\r\n0003\\0003_01_03_02_372.bmp\r\n0003\\0003_01_03_02_390.bmp\r\n0003\\0003_01_03_02_409.bmp\r\n0003\\0003_01_03_02_427.bmp\r\n0003\\0003_01_03_02_445.bmp\r\n0003\\0003_01_03_02_463.bmp\r\n0003\\0003_01_03_02_481.bmp\r\n0003\\0003_01_03_02_5.bmp\r\n0003\\0003_01_03_02_68.bmp\r\n0003\\0003_01_03_02_86.bmp\r\n0003\\0003_01_04_02_0.bmp\r\n0003\\0003_01_04_02_117.bmp\r\n0003\\0003_01_04_02_137.bmp\r\n0003\\0003_01_04_02_157.bmp\r\n0003\\0003_01_04_02_175.bmp\r\n0003\\0003_01_04_02_193.bmp\r\n0003\\0003_01_04_02_211.bmp\r\n0003\\0003_01_04_02_23.bmp\r\n0003\\0003_01_04_02_248.bmp\r\n0003\\0003_01_04_02_266.bmp\r\n0003\\0003_01_04_02_284.bmp\r\n0003\\0003_01_04_02_302.bmp\r\n0003\\0003_01_04_02_327.bmp\r\n0003\\0003_01_04_02_345.bmp\r\n0003\\0003_01_04_02_363.bmp\r\n0003\\0003_01_04_02_381.bmp\r\n0003\\0003_01_04_02_40.bmp\r\n0003\\0003_01_04_02_418.bmp\r\n0003\\0003_01_04_02_436.bmp\r\n0003\\0003_01_04_02_454.bmp\r\n0003\\0003_01_04_02_472.bmp\r\n0003\\0003_01_04_02_490.bmp\r\n0003\\0003_01_04_02_60.bmp\r\n0003\\0003_01_04_02_8.bmp\r\n0003\\0003_01_04_02_98.bmp\r\n0004\\0004_01_01_02_0.bmp\r\n0004\\0004_01_01_02_116.bmp\r\n0004\\0004_01_01_02_134.bmp\r\n0004\\0004_01_01_02_152.bmp\r\n0004\\0004_01_01_02_170.bmp\r\n0004\\0004_01_01_02_189.bmp\r\n0004\\0004_01_01_02_207.bmp\r\n0004\\0004_01_01_02_225.bmp\r\n0004\\0004_01_01_02_243.bmp\r\n0004\\0004_01_01_02_269.bmp\r\n0004\\0004_01_01_02_287.bmp\r\n0004\\0004_01_01_02_304.bmp\r\n0004\\0004_01_01_02_322.bmp\r\n0004\\0004_01_01_02_341.bmp\r\n0004\\0004_01_01_02_360.bmp\r\n0004\\0004_01_01_02_379.bmp\r\n0004\\0004_01_01_02_397.bmp\r\n0004\\0004_01_01_02_414.bmp\r\n0004\\0004_01_01_02_432.bmp\r\n0004\\0004_01_01_02_450.bmp\r\n0004\\0004_01_01_02_469.bmp\r\n0004\\0004_01_01_02_487.bmp\r\n0004\\0004_01_01_02_56.bmp\r\n0004\\0004_01_01_02_74.bmp\r\n0004\\0004_01_01_02_92.bmp\r\n0004\\0004_01_02_02_0.bmp\r\n0004\\0004_01_02_02_116.bmp\r\n0004\\0004_01_02_02_134.bmp\r\n0004\\0004_01_02_02_152.bmp\r\n0004\\0004_01_02_02_170.bmp\r\n0004\\0004_01_02_02_189.bmp\r\n0004\\0004_01_02_02_206.bmp\r\n0004\\0004_01_02_02_224.bmp\r\n0004\\0004_01_02_02_243.bmp\r\n0004\\0004_01_02_02_261.bmp\r\n0004\\0004_01_02_02_28.bmp\r\n0004\\0004_01_02_02_298.bmp\r\n0004\\0004_01_02_02_316.bmp\r\n0004\\0004_01_02_02_334.bmp\r\n0004\\0004_01_02_02_352.bmp\r\n0004\\0004_01_02_02_370.bmp\r\n0004\\0004_01_02_02_389.bmp\r\n0004\\0004_01_02_02_406.bmp\r\n0004\\0004_01_02_02_424.bmp\r\n0004\\0004_01_02_02_442.bmp\r\n0004\\0004_01_02_02_460.bmp\r\n0004\\0004_01_02_02_479.bmp\r\n0004\\0004_01_02_02_497.bmp\r\n0004\\0004_01_02_02_66.bmp\r\n0004\\0004_01_02_02_84.bmp\r\n0004\\0004_01_03_02_0.bmp\r\n0004\\0004_01_03_02_118.bmp\r\n0004\\0004_01_03_02_136.bmp\r\n0004\\0004_01_03_02_159.bmp\r\n0004\\0004_01_03_02_177.bmp\r\n0004\\0004_01_03_02_195.bmp\r\n0004\\0004_01_03_02_212.bmp\r\n0004\\0004_01_03_02_230.bmp\r\n0004\\0004_01_03_02_249.bmp\r\n0004\\0004_01_03_02_267.bmp\r\n0004\\0004_01_03_02_285.bmp\r\n0004\\0004_01_03_02_303.bmp\r\n0004\\0004_01_03_02_322.bmp\r\n0004\\0004_01_03_02_340.bmp\r\n0004\\0004_01_03_02_359.bmp\r\n0004\\0004_01_03_02_377.bmp\r\n0004\\0004_01_03_02_395.bmp\r\n0004\\0004_01_03_02_412.bmp\r\n0004\\0004_01_03_02_430.bmp\r\n0004\\0004_01_03_02_449.bmp\r\n0004\\0004_01_03_02_467.bmp\r\n0004\\0004_01_03_02_485.bmp\r\n0004\\0004_01_03_02_53.bmp\r\n0004\\0004_01_03_02_71.bmp\r\n0004\\0004_01_03_02_9.bmp\r\n0004\\0004_01_04_02_0.bmp\r\n0004\\0004_01_04_02_116.bmp\r\n0004\\0004_01_04_02_134.bmp\r\n0004\\0004_01_04_02_152.bmp\r\n0004\\0004_01_04_02_170.bmp\r\n0004\\0004_01_04_02_189.bmp\r\n0004\\0004_01_04_02_206.bmp\r\n0004\\0004_01_04_02_225.bmp\r\n0004\\0004_01_04_02_243.bmp\r\n0004\\0004_01_04_02_261.bmp\r\n0004\\0004_01_04_02_280.bmp\r\n0004\\0004_01_04_02_30.bmp\r\n0004\\0004_01_04_02_32.bmp\r\n0004\\0004_01_04_02_339.bmp\r\n0004\\0004_01_04_02_357.bmp\r\n0004\\0004_01_04_02_375.bmp\r\n0004\\0004_01_04_02_394.bmp\r\n0004\\0004_01_04_02_411.bmp\r\n0004\\0004_01_04_02_43.bmp\r\n0004\\0004_01_04_02_449.bmp\r\n0004\\0004_01_04_02_467.bmp\r\n0004\\0004_01_04_02_485.bmp\r\n0004\\0004_01_04_02_54.bmp\r\n0004\\0004_01_04_02_73.bmp\r\n0004\\0004_01_04_02_91.bmp\r\n0005\\0005_00_01_02_0.bmp\r\n0005\\0005_00_01_02_116.bmp\r\n0005\\0005_00_01_02_134.bmp\r\n0005\\0005_00_01_02_152.bmp\r\n0005\\0005_00_01_02_170.bmp\r\n0005\\0005_00_01_02_189.bmp\r\n0005\\0005_00_01_02_206.bmp\r\n0005\\0005_00_01_02_224.bmp\r\n0005\\0005_00_01_02_246.bmp\r\n0005\\0005_00_01_02_264.bmp\r\n0005\\0005_00_01_02_283.bmp\r\n0005\\0005_00_01_02_300.bmp\r\n0005\\0005_00_01_02_319.bmp\r\n0005\\0005_00_01_02_337.bmp\r\n0005\\0005_00_01_02_355.bmp\r\n0005\\0005_00_01_02_373.bmp\r\n0005\\0005_00_01_02_391.bmp\r\n0005\\0005_00_01_02_41.bmp\r\n0005\\0005_00_01_02_428.bmp\r\n0005\\0005_00_01_02_446.bmp\r\n0005\\0005_00_01_02_464.bmp\r\n0005\\0005_00_01_02_482.bmp\r\n0005\\0005_00_01_02_50.bmp\r\n0005\\0005_00_01_02_69.bmp\r\n0005\\0005_00_01_02_87.bmp\r\n0005\\0005_00_02_02_0.bmp\r\n0005\\0005_00_02_02_116.bmp\r\n0005\\0005_00_02_02_134.bmp\r\n0005\\0005_00_02_02_152.bmp\r\n0005\\0005_00_02_02_170.bmp\r\n0005\\0005_00_02_02_189.bmp\r\n0005\\0005_00_02_02_206.bmp\r\n0005\\0005_00_02_02_225.bmp\r\n0005\\0005_00_02_02_243.bmp\r\n0005\\0005_00_02_02_261.bmp\r\n0005\\0005_00_02_02_28.bmp\r\n0005\\0005_00_02_02_298.bmp\r\n0005\\0005_00_02_02_318.bmp\r\n0005\\0005_00_02_02_336.bmp\r\n0005\\0005_00_02_02_355.bmp\r\n0005\\0005_00_02_02_373.bmp\r\n0005\\0005_00_02_02_394.bmp\r\n0005\\0005_00_02_02_411.bmp\r\n0005\\0005_00_02_02_430.bmp\r\n0005\\0005_00_02_02_449.bmp\r\n0005\\0005_00_02_02_467.bmp\r\n0005\\0005_00_02_02_485.bmp\r\n0005\\0005_00_02_02_53.bmp\r\n0005\\0005_00_02_02_71.bmp\r\n0005\\0005_00_02_02_91.bmp\r\n0005\\0005_00_03_02_0.bmp\r\n0005\\0005_00_03_02_116.bmp\r\n0005\\0005_00_03_02_135.bmp\r\n0005\\0005_00_03_02_153.bmp\r\n0005\\0005_00_03_02_171.bmp\r\n0005\\0005_00_03_02_19.bmp\r\n0005\\0005_00_03_02_207.bmp\r\n0005\\0005_00_03_02_225.bmp\r\n0005\\0005_00_03_02_248.bmp\r\n0005\\0005_00_03_02_270.bmp\r\n0005\\0005_00_03_02_289.bmp\r\n0005\\0005_00_03_02_306.bmp\r\n0005\\0005_00_03_02_324.bmp\r\n0005\\0005_00_03_02_342.bmp\r\n0005\\0005_00_03_02_361.bmp\r\n0005\\0005_00_03_02_38.bmp\r\n0005\\0005_00_03_02_399.bmp\r\n0005\\0005_00_03_02_416.bmp\r\n0005\\0005_00_03_02_434.bmp\r\n0005\\0005_00_03_02_452.bmp\r\n0005\\0005_00_03_02_470.bmp\r\n0005\\0005_00_03_02_489.bmp\r\n0005\\0005_00_03_02_57.bmp\r\n0005\\0005_00_03_02_75.bmp\r\n0005\\0005_00_03_02_93.bmp\r\n0005\\0005_00_04_02_0.bmp\r\n0005\\0005_00_04_02_116.bmp\r\n0005\\0005_00_04_02_135.bmp\r\n0005\\0005_00_04_02_153.bmp\r\n0005\\0005_00_04_02_171.bmp\r\n0005\\0005_00_04_02_190.bmp\r\n0005\\0005_00_04_02_208.bmp\r\n0005\\0005_00_04_02_226.bmp\r\n0005\\0005_00_04_02_244.bmp\r\n0005\\0005_00_04_02_262.bmp\r\n0005\\0005_00_04_02_281.bmp\r\n0005\\0005_00_04_02_3.bmp\r\n0005\\0005_00_04_02_317.bmp\r\n0005\\0005_00_04_02_335.bmp\r\n0005\\0005_00_04_02_353.bmp\r\n0005\\0005_00_04_02_371.bmp\r\n0005\\0005_00_04_02_39.bmp\r\n0005\\0005_00_04_02_407.bmp\r\n0005\\0005_00_04_02_425.bmp\r\n0005\\0005_00_04_02_444.bmp\r\n0005\\0005_00_04_02_462.bmp\r\n0005\\0005_00_04_02_480.bmp\r\n0005\\0005_00_04_02_499.bmp\r\n0005\\0005_00_04_02_67.bmp\r\n0005\\0005_00_04_02_85.bmp\r\n0006\\0006_00_01_02_0.bmp\r\n0006\\0006_00_01_02_118.bmp\r\n0006\\0006_00_01_02_140.bmp\r\n0006\\0006_00_01_02_160.bmp\r\n0006\\0006_00_01_02_180.bmp\r\n0006\\0006_00_01_02_2.bmp\r\n0006\\0006_00_01_02_218.bmp\r\n0006\\0006_00_01_02_236.bmp\r\n0006\\0006_00_01_02_256.bmp\r\n0006\\0006_00_01_02_277.bmp\r\n0006\\0006_00_01_02_296.bmp\r\n0006\\0006_00_01_02_314.bmp\r\n0006\\0006_00_01_02_334.bmp\r\n0006\\0006_00_01_02_352.bmp\r\n0006\\0006_00_01_02_370.bmp\r\n0006\\0006_00_01_02_389.bmp\r\n0006\\0006_00_01_02_409.bmp\r\n0006\\0006_00_01_02_429.bmp\r\n0006\\0006_00_01_02_45.bmp\r\n0006\\0006_00_01_02_472.bmp\r\n0006\\0006_00_01_02_494.bmp\r\n0006\\0006_00_01_02_62.bmp\r\n0006\\0006_00_01_02_81.bmp\r\n0006\\0006_00_02_02_0.bmp\r\n0006\\0006_00_02_02_117.bmp\r\n0006\\0006_00_02_02_136.bmp\r\n0006\\0006_00_02_02_155.bmp\r\n0006\\0006_00_02_02_174.bmp\r\n0006\\0006_00_02_02_195.bmp\r\n0006\\0006_00_02_02_213.bmp\r\n0006\\0006_00_02_02_231.bmp\r\n0006\\0006_00_02_02_252.bmp\r\n0006\\0006_00_02_02_272.bmp\r\n0006\\0006_00_02_02_291.bmp\r\n0006\\0006_00_02_02_313.bmp\r\n0006\\0006_00_02_02_339.bmp\r\n0006\\0006_00_02_02_359.bmp\r\n0006\\0006_00_02_02_380.bmp\r\n0006\\0006_00_02_02_399.bmp\r\n0006\\0006_00_02_02_416.bmp\r\n0006\\0006_00_02_02_436.bmp\r\n0006\\0006_00_02_02_454.bmp\r\n0006\\0006_00_02_02_472.bmp\r\n0006\\0006_00_02_02_492.bmp\r\n0006\\0006_00_02_02_64.bmp\r\n0006\\0006_00_02_02_84.bmp\r\n0006\\0006_00_03_02_0.bmp\r\n0006\\0006_00_03_02_119.bmp\r\n0006\\0006_00_03_02_137.bmp\r\n0006\\0006_00_03_02_158.bmp\r\n0006\\0006_00_03_02_178.bmp\r\n0006\\0006_00_03_02_198.bmp\r\n0006\\0006_00_03_02_215.bmp\r\n0006\\0006_00_03_02_235.bmp\r\n0006\\0006_00_03_02_258.bmp\r\n0006\\0006_00_03_02_278.bmp\r\n0006\\0006_00_03_02_300.bmp\r\n0006\\0006_00_03_02_321.bmp\r\n0006\\0006_00_03_02_340.bmp\r\n0006\\0006_00_03_02_363.bmp\r\n0006\\0006_00_03_02_384.bmp\r\n0006\\0006_00_03_02_405.bmp\r\n0006\\0006_00_03_02_426.bmp\r\n0006\\0006_00_03_02_449.bmp\r\n0006\\0006_00_03_02_468.bmp\r\n0006\\0006_00_03_02_486.bmp\r\n0006\\0006_00_03_02_54.bmp\r\n0006\\0006_00_03_02_72.bmp\r\n0006\\0006_00_03_02_91.bmp\r\n0006\\0006_00_04_02_1.bmp\r\n0006\\0006_00_04_02_121.bmp\r\n0006\\0006_00_04_02_140.bmp\r\n0006\\0006_00_04_02_160.bmp\r\n0006\\0006_00_04_02_180.bmp\r\n0006\\0006_00_04_02_2.bmp\r\n0006\\0006_00_04_02_217.bmp\r\n0006\\0006_00_04_02_236.bmp\r\n0006\\0006_00_04_02_255.bmp\r\n0006\\0006_00_04_02_274.bmp\r\n0006\\0006_00_04_02_296.bmp\r\n0006\\0006_00_04_02_313.bmp\r\n0006\\0006_00_04_02_335.bmp\r\n0006\\0006_00_04_02_354.bmp\r\n0006\\0006_00_04_02_373.bmp\r\n0006\\0006_00_04_02_391.bmp\r\n0006\\0006_00_04_02_411.bmp\r\n0006\\0006_00_04_02_43.bmp\r\n0006\\0006_00_04_02_448.bmp\r\n0006\\0006_00_04_02_467.bmp\r\n0006\\0006_00_04_02_49.bmp\r\n0006\\0006_00_04_02_58.bmp\r\n0006\\0006_00_04_02_77.bmp\r\n0006\\0006_00_04_02_99.bmp\r\n0007\\0007_01_01_02_0.bmp\r\n0007\\0007_01_01_02_116.bmp\r\n0007\\0007_01_01_02_134.bmp\r\n0007\\0007_01_01_02_152.bmp\r\n0007\\0007_01_01_02_170.bmp\r\n0007\\0007_01_01_02_189.bmp\r\n0007\\0007_01_01_02_206.bmp\r\n0007\\0007_01_01_02_224.bmp\r\n0007\\0007_01_01_02_242.bmp\r\n0007\\0007_01_01_02_260.bmp\r\n0007\\0007_01_01_02_279.bmp\r\n0007\\0007_01_01_02_297.bmp\r\n0007\\0007_01_01_02_314.bmp\r\n0007\\0007_01_01_02_332.bmp\r\n0007\\0007_01_01_02_350.bmp\r\n0007\\0007_01_01_02_369.bmp\r\n0007\\0007_01_01_02_387.bmp\r\n0007\\0007_01_01_02_405.bmp\r\n0007\\0007_01_01_02_423.bmp\r\n0007\\0007_01_01_02_445.bmp\r\n0007\\0007_01_01_02_463.bmp\r\n0007\\0007_01_01_02_481.bmp\r\n0007\\0007_01_01_02_50.bmp\r\n0007\\0007_01_01_02_69.bmp\r\n0007\\0007_01_01_02_87.bmp\r\n0007\\0007_01_02_02_0.bmp\r\n0007\\0007_01_02_02_116.bmp\r\n0007\\0007_01_02_02_134.bmp\r\n0007\\0007_01_02_02_152.bmp\r\n0007\\0007_01_02_02_171.bmp\r\n0007\\0007_01_02_02_19.bmp\r\n0007\\0007_01_02_02_207.bmp\r\n0007\\0007_01_02_02_225.bmp\r\n0007\\0007_01_02_02_243.bmp\r\n0007\\0007_01_02_02_261.bmp\r\n0007\\0007_01_02_02_280.bmp\r\n0007\\0007_01_02_02_3.bmp\r\n0007\\0007_01_02_02_317.bmp\r\n0007\\0007_01_02_02_335.bmp\r\n0007\\0007_01_02_02_353.bmp\r\n0007\\0007_01_02_02_372.bmp\r\n0007\\0007_01_02_02_390.bmp\r\n0007\\0007_01_02_02_408.bmp\r\n0007\\0007_01_02_02_427.bmp\r\n0007\\0007_01_02_02_445.bmp\r\n0007\\0007_01_02_02_464.bmp\r\n0007\\0007_01_02_02_482.bmp\r\n0007\\0007_01_02_02_50.bmp\r\n0007\\0007_01_02_02_69.bmp\r\n0007\\0007_01_02_02_88.bmp\r\n0007\\0007_01_03_02_0.bmp\r\n0007\\0007_01_03_02_116.bmp\r\n0007\\0007_01_03_02_134.bmp\r\n0007\\0007_01_03_02_152.bmp\r\n0007\\0007_01_03_02_170.bmp\r\n0007\\0007_01_03_02_189.bmp\r\n0007\\0007_01_03_02_206.bmp\r\n0007\\0007_01_03_02_224.bmp\r\n0007\\0007_01_03_02_242.bmp\r\n0007\\0007_01_03_02_260.bmp\r\n0007\\0007_01_03_02_279.bmp\r\n0007\\0007_01_03_02_297.bmp\r\n0007\\0007_01_03_02_314.bmp\r\n0007\\0007_01_03_02_332.bmp\r\n0007\\0007_01_03_02_350.bmp\r\n0007\\0007_01_03_02_369.bmp\r\n0007\\0007_01_03_02_387.bmp\r\n0007\\0007_01_03_02_404.bmp\r\n0007\\0007_01_03_02_422.bmp\r\n0007\\0007_01_03_02_443.bmp\r\n0007\\0007_01_03_02_461.bmp\r\n0007\\0007_01_03_02_48.bmp\r\n0007\\0007_01_03_02_498.bmp\r\n0007\\0007_01_03_02_66.bmp\r\n0007\\0007_01_03_02_84.bmp\r\n0007\\0007_01_04_02_0.bmp\r\n0007\\0007_01_04_02_116.bmp\r\n0007\\0007_01_04_02_134.bmp\r\n0007\\0007_01_04_02_152.bmp\r\n0007\\0007_01_04_02_170.bmp\r\n0007\\0007_01_04_02_189.bmp\r\n0007\\0007_01_04_02_206.bmp\r\n0007\\0007_01_04_02_224.bmp\r\n0007\\0007_01_04_02_242.bmp\r\n0007\\0007_01_04_02_260.bmp\r\n0007\\0007_01_04_02_279.bmp\r\n0007\\0007_01_04_02_297.bmp\r\n0007\\0007_01_04_02_314.bmp\r\n0007\\0007_01_04_02_332.bmp\r\n0007\\0007_01_04_02_350.bmp\r\n0007\\0007_01_04_02_369.bmp\r\n0007\\0007_01_04_02_387.bmp\r\n0007\\0007_01_04_02_404.bmp\r\n0007\\0007_01_04_02_422.bmp\r\n0007\\0007_01_04_02_440.bmp\r\n0007\\0007_01_04_02_459.bmp\r\n0007\\0007_01_04_02_477.bmp\r\n0007\\0007_01_04_02_495.bmp\r\n0007\\0007_01_04_02_63.bmp\r\n0007\\0007_01_04_02_81.bmp\r\n0009\\0009_01_01_02_0.bmp\r\n0009\\0009_01_01_02_116.bmp\r\n0009\\0009_01_01_02_134.bmp\r\n0009\\0009_01_01_02_152.bmp\r\n0009\\0009_01_01_02_170.bmp\r\n0009\\0009_01_01_02_189.bmp\r\n0009\\0009_01_01_02_206.bmp\r\n0009\\0009_01_01_02_224.bmp\r\n0009\\0009_01_01_02_242.bmp\r\n0009\\0009_01_01_02_260.bmp\r\n0009\\0009_01_01_02_279.bmp\r\n0009\\0009_01_01_02_297.bmp\r\n0009\\0009_01_01_02_314.bmp\r\n0009\\0009_01_01_02_332.bmp\r\n0009\\0009_01_01_02_350.bmp\r\n0009\\0009_01_01_02_369.bmp\r\n0009\\0009_01_01_02_387.bmp\r\n0009\\0009_01_01_02_404.bmp\r\n0009\\0009_01_01_02_422.bmp\r\n0009\\0009_01_01_02_440.bmp\r\n0009\\0009_01_01_02_459.bmp\r\n0009\\0009_01_01_02_477.bmp\r\n0009\\0009_01_01_02_495.bmp\r\n0009\\0009_01_01_02_63.bmp\r\n0009\\0009_01_01_02_81.bmp\r\n0009\\0009_01_02_02_10.bmp\r\n0009\\0009_01_02_02_118.bmp\r\n0009\\0009_01_02_02_136.bmp\r\n0009\\0009_01_02_02_154.bmp\r\n0009\\0009_01_02_02_172.bmp\r\n0009\\0009_01_02_02_190.bmp\r\n0009\\0009_01_02_02_209.bmp\r\n0009\\0009_01_02_02_227.bmp\r\n0009\\0009_01_02_02_245.bmp\r\n0009\\0009_01_02_02_265.bmp\r\n0009\\0009_01_02_02_283.bmp\r\n0009\\0009_01_02_02_300.bmp\r\n0009\\0009_01_02_02_319.bmp\r\n0009\\0009_01_02_02_337.bmp\r\n0009\\0009_01_02_02_355.bmp\r\n0009\\0009_01_02_02_373.bmp\r\n0009\\0009_01_02_02_391.bmp\r\n0009\\0009_01_02_02_409.bmp\r\n0009\\0009_01_02_02_427.bmp\r\n0009\\0009_01_02_02_445.bmp\r\n0009\\0009_01_02_02_463.bmp\r\n0009\\0009_01_02_02_481.bmp\r\n0009\\0009_01_02_02_5.bmp\r\n0009\\0009_01_02_02_68.bmp\r\n0009\\0009_01_02_02_86.bmp\r\n0009\\0009_01_03_02_0.bmp\r\n0009\\0009_01_03_02_116.bmp\r\n0009\\0009_01_03_02_134.bmp\r\n0009\\0009_01_03_02_152.bmp\r\n0009\\0009_01_03_02_170.bmp\r\n0009\\0009_01_03_02_189.bmp\r\n0009\\0009_01_03_02_206.bmp\r\n0009\\0009_01_03_02_224.bmp\r\n0009\\0009_01_03_02_242.bmp\r\n0009\\0009_01_03_02_260.bmp\r\n0009\\0009_01_03_02_279.bmp\r\n0009\\0009_01_03_02_297.bmp\r\n0009\\0009_01_03_02_314.bmp\r\n0009\\0009_01_03_02_332.bmp\r\n0009\\0009_01_03_02_350.bmp\r\n0009\\0009_01_03_02_369.bmp\r\n0009\\0009_01_03_02_387.bmp\r\n0009\\0009_01_03_02_404.bmp\r\n0009\\0009_01_03_02_422.bmp\r\n0009\\0009_01_03_02_440.bmp\r\n0009\\0009_01_03_02_459.bmp\r\n0009\\0009_01_03_02_477.bmp\r\n0009\\0009_01_03_02_495.bmp\r\n0009\\0009_01_03_02_63.bmp\r\n0009\\0009_01_03_02_81.bmp\r\n0009\\0009_01_04_02_0.bmp\r\n0009\\0009_01_04_02_116.bmp\r\n0009\\0009_01_04_02_134.bmp\r\n0009\\0009_01_04_02_152.bmp\r\n0009\\0009_01_04_02_170.bmp\r\n0009\\0009_01_04_02_189.bmp\r\n0009\\0009_01_04_02_206.bmp\r\n0009\\0009_01_04_02_224.bmp\r\n0009\\0009_01_04_02_242.bmp\r\n0009\\0009_01_04_02_260.bmp\r\n0009\\0009_01_04_02_279.bmp\r\n0009\\0009_01_04_02_297.bmp\r\n0009\\0009_01_04_02_314.bmp\r\n0009\\0009_01_04_02_332.bmp\r\n0009\\0009_01_04_02_350.bmp\r\n0009\\0009_01_04_02_369.bmp\r\n0009\\0009_01_04_02_387.bmp\r\n0009\\0009_01_04_02_404.bmp\r\n0009\\0009_01_04_02_422.bmp\r\n0009\\0009_01_04_02_440.bmp\r\n0009\\0009_01_04_02_459.bmp\r\n0009\\0009_01_04_02_477.bmp\r\n0009\\0009_01_04_02_495.bmp\r\n0009\\0009_01_04_02_63.bmp\r\n0009\\0009_01_04_02_81.bmp\r\n0008\\0008_00_01_02_0.bmp\r\n0008\\0008_00_01_02_116.bmp\r\n0008\\0008_00_01_02_134.bmp\r\n0008\\0008_00_01_02_152.bmp\r\n0008\\0008_00_01_02_170.bmp\r\n0008\\0008_00_01_02_189.bmp\r\n0008\\0008_00_01_02_206.bmp\r\n0008\\0008_00_01_02_224.bmp\r\n0008\\0008_00_01_02_242.bmp\r\n0008\\0008_00_01_02_260.bmp\r\n0008\\0008_00_01_02_279.bmp\r\n0008\\0008_00_01_02_297.bmp\r\n0008\\0008_00_01_02_314.bmp\r\n0008\\0008_00_01_02_332.bmp\r\n0008\\0008_00_01_02_350.bmp\r\n0008\\0008_00_01_02_369.bmp\r\n0008\\0008_00_01_02_387.bmp\r\n0008\\0008_00_01_02_404.bmp\r\n0008\\0008_00_01_02_422.bmp\r\n0008\\0008_00_01_02_440.bmp\r\n0008\\0008_00_01_02_463.bmp\r\n0008\\0008_00_01_02_486.bmp\r\n0008\\0008_00_01_02_54.bmp\r\n0008\\0008_00_01_02_72.bmp\r\n0008\\0008_00_01_02_90.bmp\r\n0008\\0008_00_02_02_0.bmp\r\n0008\\0008_00_02_02_116.bmp\r\n0008\\0008_00_02_02_135.bmp\r\n0008\\0008_00_02_02_153.bmp\r\n0008\\0008_00_02_02_171.bmp\r\n0008\\0008_00_02_02_19.bmp\r\n0008\\0008_00_02_02_207.bmp\r\n0008\\0008_00_02_02_225.bmp\r\n0008\\0008_00_02_02_243.bmp\r\n0008\\0008_00_02_02_261.bmp\r\n0008\\0008_00_02_02_28.bmp\r\n0008\\0008_00_02_02_298.bmp\r\n0008\\0008_00_02_02_315.bmp\r\n0008\\0008_00_02_02_333.bmp\r\n0008\\0008_00_02_02_351.bmp\r\n0008\\0008_00_02_02_37.bmp\r\n0008\\0008_00_02_02_388.bmp\r\n0008\\0008_00_02_02_405.bmp\r\n0008\\0008_00_02_02_423.bmp\r\n0008\\0008_00_02_02_441.bmp\r\n0008\\0008_00_02_02_46.bmp\r\n0008\\0008_00_02_02_478.bmp\r\n0008\\0008_00_02_02_496.bmp\r\n0008\\0008_00_02_02_64.bmp\r\n0008\\0008_00_02_02_82.bmp\r\n0008\\0008_00_03_02_1.bmp\r\n0008\\0008_00_03_02_117.bmp\r\n0008\\0008_00_03_02_135.bmp\r\n0008\\0008_00_03_02_153.bmp\r\n0008\\0008_00_03_02_171.bmp\r\n0008\\0008_00_03_02_19.bmp\r\n0008\\0008_00_03_02_207.bmp\r\n0008\\0008_00_03_02_225.bmp\r\n0008\\0008_00_03_02_243.bmp\r\n0008\\0008_00_03_02_261.bmp\r\n0008\\0008_00_03_02_28.bmp\r\n0008\\0008_00_03_02_298.bmp\r\n0008\\0008_00_03_02_315.bmp\r\n0008\\0008_00_03_02_333.bmp\r\n0008\\0008_00_03_02_351.bmp\r\n0008\\0008_00_03_02_37.bmp\r\n0008\\0008_00_03_02_388.bmp\r\n0008\\0008_00_03_02_405.bmp\r\n0008\\0008_00_03_02_423.bmp\r\n0008\\0008_00_03_02_441.bmp\r\n0008\\0008_00_03_02_46.bmp\r\n0008\\0008_00_03_02_478.bmp\r\n0008\\0008_00_03_02_496.bmp\r\n0008\\0008_00_03_02_64.bmp\r\n0008\\0008_00_03_02_82.bmp\r\n0008\\0008_00_04_02_0.bmp\r\n0008\\0008_00_04_02_116.bmp\r\n0008\\0008_00_04_02_134.bmp\r\n0008\\0008_00_04_02_152.bmp\r\n0008\\0008_00_04_02_170.bmp\r\n0008\\0008_00_04_02_189.bmp\r\n0008\\0008_00_04_02_206.bmp\r\n0008\\0008_00_04_02_224.bmp\r\n0008\\0008_00_04_02_242.bmp\r\n0008\\0008_00_04_02_260.bmp\r\n0008\\0008_00_04_02_279.bmp\r\n0008\\0008_00_04_02_297.bmp\r\n0008\\0008_00_04_02_314.bmp\r\n0008\\0008_00_04_02_333.bmp\r\n0008\\0008_00_04_02_351.bmp\r\n0008\\0008_00_04_02_370.bmp\r\n0008\\0008_00_04_02_389.bmp\r\n0008\\0008_00_04_02_406.bmp\r\n0008\\0008_00_04_02_424.bmp\r\n0008\\0008_00_04_02_444.bmp\r\n0008\\0008_00_04_02_462.bmp\r\n0008\\0008_00_04_02_485.bmp\r\n0008\\0008_00_04_02_55.bmp\r\n0008\\0008_00_04_02_73.bmp\r\n0008\\0008_00_04_02_91.bmp\r\n"
  },
  {
    "path": "Matlab/NUAA/readme.txt",
    "content": "short description\r\n\r\nThis directory contains the geometrically normalized face images based on the two eyes' coordinates. There are 5105 client images and 7509 imposter images in total. Images from each subject are stored in a separate directory.\r\n\r\n1. for evaluation\r\ntraining set:\r\nclient   images: stored in the ClientNormalized directory and indexed in client_train_Normalized.txt\r\nimposter images: stored in the ImposterNormalized directory and indexed in imposter_train_Normalized.txt\r\n\r\ntesting set:\r\nclient   images: stored in the ClientNormalized directory and indexed in client_test_Normalized.txt\r\nimposter images: stored in the ImposterNormalized directory and indexed in imposter_test_Normalized.txt\r\n\r\n\r\n2. The file name format of the indexed images: \r\n\r\nID_galss_pos_session_picNo \r\n\r\nE.g. 0010_01_05_03_115.jpg\r\nID0001~0016 picture number\r\nGlasses00~01\r\n \t00with glasses\r\n\t01no glasses\r\nPos   01~08 the location and light conditions of images\r\n\t01: up-down-rotate\r\n        02: up-down-twist\r\n        03: left-right-rotate\r\n        04: left-right-twist\r\n        05: close--window-open-lights\r\n        07: open-window-open-lights\r\n        08: open-widow-shut-lights\r\n        08: still\r\nSession01~03\r\npicNopicture number\r\n\r\n\r\n\r\n"
  },
  {
    "path": "Matlab/OF_All_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% load libsvm\r\naddpath('./libsvm-3.19/matlab');\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\n\r\n%% PRINT-ATTACK\r\nload OF_SVM_PRINT_ATTACK_raw.mat\r\nfor IdxSubject = 1 : 15\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 4\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\n\r\n%% CASIA\r\nload OF_SVM_CASIA_raw.mat\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 2\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\n\r\n%% Training\r\nlength = size(TrainTruth, 1);\r\nTrainFeatureAll(isnan(TrainFeatureAll)) = 0;\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave OF_SVM_All.mat model"
  },
  {
    "path": "Matlab/OF_CASIA_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./HOOF');\r\n% % load OF_SVM_CASIA.mat\r\n% % load OF_SVM_PRINT_ATTACK.mat\r\n% load OF_SVM_All.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\n% flagSet = cell(30, 8);\r\n% bins = 9;\r\n% blocks = 10;\r\n% for IdxSubject = 1 : 30\r\n%     for IdxData = 1 : 8\r\n%         if IdxData <= 8\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n%         else\r\n%             Name = ['./CASIA/test_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n%         end\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         opticalFlow = vision.OpticalFlow('ReferenceFrameSource', 'Input Port', 'OutputValue', 'Horizontal and vertical components in complex form', 'Method', 'Lucas-Kanade');\r\n%         flag = [];\r\n%         frame_now = rgb2gray(read(Mov, 1));\r\n%         for IdxFrame = 2 : NumFrame\r\n%             frame_pre = frame_now;\r\n%             frame_now = rgb2gray(read(Mov, IdxFrame));\r\n%             box = step(detector, frame_now);\r\n%             if size(box, 1) == 1\r\n%                 OF = step(opticalFlow, double(frame_now), double(frame_pre));\r\n%                 Feature = [];\r\n%                 for iBlock = 1 : blocks\r\n%                     for jBlock = 1 : blocks\r\n%                         Feature = [Feature, gradientHistogram(...\r\n%                             real(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n%                             imag(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n%                             bins)'];\r\n%                     end\r\n%                 end\r\n%                 Feature(isnan(Feature)) = 0;\r\n%                 TestFeature = Feature;\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag, TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData) ', ' num2str(mean(flag))])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% % save OF_SVM_CASIA_testfeature.mat flagSet\r\n\r\n%% testing\r\nload OF_SVM_CASIA_testfeature.mat flagSet\r\nDataCorrectRate = zeros(3, 1001);\r\nCorrectRate = zeros(3, 1001);\r\nfor Bias = -5:0.01:5;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 30\r\n        for IdxData = 1 : 8\r\n            if IdxData <= 2\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+5.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 240; DataCorrectNoReal / 60; DataCorrectNoFake / 180];\r\n    CorrectRate(:, round((Bias+5.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend      "
  },
  {
    "path": "Matlab/OF_CASIA_Train.m",
    "content": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./HOOF');\r\n\r\n%% extract features\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\nTrainFeatureSet = cell(20, 8);\r\nNumFrame = zeros(20, 8);\r\nbins = 9;\r\nblocks = 10;\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        if IdxData <= 8\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n        else\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n        end\r\n        Mov = VideoReader(Name);\r\n        NumFrame(IdxSubject, IdxData) = Mov.NumberOfFrames;\r\n        opticalFlow = vision.OpticalFlow('ReferenceFrameSource', 'Input Port', 'OutputValue', 'Horizontal and vertical components in complex form', 'Method', 'Lucas-Kanade');\r\n        TrainFeature = [];\r\n        frame_now = rgb2gray(read(Mov, 1));\r\n        for IdxFrame = 2 : NumFrame(IdxSubject, IdxData)\r\n            frame_pre = frame_now;\r\n            frame_now = rgb2gray(read(Mov, IdxFrame));\r\n            box = step(detector, frame_now);\r\n            if size(box, 1) == 1\r\n                OF = step(opticalFlow, double(frame_now), double(frame_pre));\r\n                Feature = [];\r\n                for iBlock = 1 : blocks\r\n                    for jBlock = 1 : blocks\r\n                        Feature = [Feature, gradientHistogram(...\r\n                            real(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n                            imag(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n                            bins)'];\r\n                    end\r\n                end\r\n                TrainFeature = [TrainFeature;Feature];\r\n            end\r\n        end\r\n        TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend\r\nsave OF_SVM_CASIA_raw.mat TrainFeatureSet\r\n\r\n%% training\r\nload OF_SVM_CASIA_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 2\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nTrainFeatureAll(isnan(TrainFeatureAll)) = 0;\r\n% MinMax = minmax(TrainFeatureAll')';\r\n% TrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\n% save OF_SVM_CASIA.mat model MinMax\r\nsave OF_SVM_CASIA.mat model"
  },
  {
    "path": "Matlab/OF_PRINT_ATTACK_Test.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./HOOF');\r\n% % load OF_SVM_PRINT_ATTACK.mat\r\n% % load OF_SVM_CASIA.mat\r\n% load OF_SVM_All.mat\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\n% fileIndex = {'009', '011', '013', '014', '019', '020', '021', '023', '024', '026', '028', '031', '102', '104', '106', '107', '109', '112', '115', '117'};\r\n% fileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n%     'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\n% fileNo = size(fileIndex, 2);\r\n% flagSet = cell(fileNo, 8);\r\n% bins = 9;\r\n% blocks = 10;\r\n% for IdxSubject = 1 : fileNo\r\n%     for IdxData = 1 : 8\r\n%         Name = ['./PRINT-ATTACK/test/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame = Mov.NumberOfFrames;\r\n%         opticalFlow = vision.OpticalFlow('ReferenceFrameSource', 'Input Port', 'OutputValue', 'Horizontal and vertical components in complex form', 'Method', 'Lucas-Kanade');\r\n%         flag = [];\r\n%         frame_now = rgb2gray(read(Mov, 1));\r\n%         for IdxFrame = 2 : NumFrame\r\n%             frame_pre = frame_now;\r\n%             frame_now = rgb2gray(read(Mov, IdxFrame));\r\n%             box = step(detector, frame_now);\r\n%             if size(box, 1) == 1\r\n%                 OF = step(opticalFlow, double(frame_now), double(frame_pre));\r\n%                 Feature = [];\r\n%                 for iBlock = 1 : blocks\r\n%                     for jBlock = 1 : blocks\r\n%                         Feature = [Feature, gradientHistogram(...\r\n%                             real(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n%                             imag(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n%                             bins)'];\r\n%                     end\r\n%                 end\r\n%                 Feature(isnan(Feature)) = 0;\r\n%                 TestFeature = Feature;\r\n%                 [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n%                 flag = [flag, TestValue];\r\n%             end\r\n%         end\r\n%         flagSet{IdxSubject, IdxData} = flag;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData) ', ' num2str(mean(flag))])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save OF_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\n\r\n%% testing\r\nload OF_SVM_PRINT_ATTACK_testfeature.mat flagSet\r\nDataCorrectRate = zeros(3, 1001);\r\nCorrectRate = zeros(3, 1001);\r\nfor Bias = -5:0.01:5;\r\n    CorrectNoReal = 0;\r\n    CorrectNoFake = 0;\r\n    TotalNoReal = 0;\r\n    TotalNoFake = 0;\r\n    DataCorrectNoReal = 0;\r\n    DataCorrectNoFake = 0;\r\n    for IdxSubject = 1 : 20\r\n        for IdxData = 1 : 8\r\n            if IdxData > 4\r\n                CorrectNoReal = CorrectNoReal + sum(flagSet{IdxSubject, IdxData}>=Bias);\r\n                DataCorrectNoReal = DataCorrectNoReal + (mean(flagSet{IdxSubject, IdxData})>=Bias);\r\n                TotalNoReal = TotalNoReal + size(flagSet{IdxSubject, IdxData}, 2);\r\n            else\r\n                CorrectNoFake = CorrectNoFake + sum(flagSet{IdxSubject, IdxData}<Bias);\r\n                DataCorrectNoFake = DataCorrectNoFake + (mean(flagSet{IdxSubject, IdxData})<Bias);\r\n                TotalNoFake = TotalNoFake + size(flagSet{IdxSubject, IdxData}, 2);\r\n            end\r\n        end\r\n    end\r\n    DataCorrectRate(:, round((Bias+5.01)*100)) = [(DataCorrectNoReal+DataCorrectNoFake) / 160; DataCorrectNoReal / 80; DataCorrectNoFake / 80];\r\n    CorrectRate(:, round((Bias+5.01)*100)) = [(CorrectNoReal+CorrectNoFake) / (TotalNoReal+TotalNoFake); CorrectNoReal / TotalNoReal; CorrectNoFake / TotalNoFake];\r\nend"
  },
  {
    "path": "Matlab/OF_PRINT_ATTACK_Train.m",
    "content": "% clear all, close all, clc\r\n% \r\n% %% read client and imposter testing data name\r\n% addpath('./libsvm-3.19/matlab');\r\n% addpath('./HOOF');\r\n% \r\n% %% extract feature\r\n% detector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\n% fileIndex = {'001', '002', '004', '006', '007', '008', '012', '016', '018', '025', '027', '103', '105', '108', '110'};\r\n% fileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n%     'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\n% fileNo = size(fileIndex, 2);\r\n% TrainFeatureSet = cell(fileNo, 8);\r\n% bins = 9;\r\n% blocks = 10;\r\n% for IdxSubject = 1 : fileNo\r\n%     for IdxData = 1 : 8\r\n%         Name = ['./PRINT-ATTACK/train/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n%         Mov = VideoReader(Name);\r\n%         NumFrame(IdxSubject, IdxData) = Mov.NumberOfFrames;\r\n%         opticalFlow = vision.OpticalFlow('ReferenceFrameSource', 'Input Port', 'OutputValue', 'Horizontal and vertical components in complex form', 'Method', 'Lucas-Kanade');\r\n%         TrainFeature = [];\r\n%         frame_now = rgb2gray(read(Mov, 1));\r\n%         for IdxFrame = 2 : NumFrame(IdxSubject, IdxData)\r\n%             frame_pre = frame_now;\r\n%             frame_now = rgb2gray(read(Mov, IdxFrame));\r\n%             box = step(detector, frame_now);\r\n%             if size(box, 1) == 1\r\n%                 OF = step(opticalFlow, double(frame_now), double(frame_pre));\r\n%                 Feature = [];\r\n%                 for iBlock = 1 : blocks\r\n%                     for jBlock = 1 : blocks\r\n%                         Feature = [Feature, gradientHistogram(...\r\n%                             real(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n%                             imag(OF(round(box(2)+box(4)*(iBlock-1)/(blocks+1)):round(box(2)+box(4)*(iBlock+1)/(blocks+1)), round(box(1)+box(3)*(jBlock-1)/(blocks+1)):round(box(1)+box(3)*(jBlock+1)/(blocks+1)))), ...\r\n%                             bins)'];\r\n%                     end\r\n%                 end\r\n%                 TrainFeature = [TrainFeature;Feature];\r\n%             end\r\n%         end\r\n%         TrainFeatureSet{IdxSubject, IdxData} = TrainFeature;\r\n%         disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n%         clear Mov;\r\n%     end\r\n% end\r\n% save OF_SVM_PRINT_ATTACK_raw.mat TrainFeatureSet\r\n\r\n%% training\r\nload OF_SVM_PRINT_ATTACK_raw.mat\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\nfor IdxSubject = 1 : 15\r\n    for IdxData = 1 : 8\r\n        TrainFeatureAll = [TrainFeatureAll;TrainFeatureSet{IdxSubject,IdxData}];\r\n        if IdxData <= 4\r\n            TrainTruth = [TrainTruth;-ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        else\r\n            TrainTruth = [TrainTruth;ones(size(TrainFeatureSet{IdxSubject,IdxData},1),1)];\r\n        end\r\n    end\r\n    disp(num2str(IdxSubject));\r\nend\r\nlength = size(TrainTruth, 1);\r\nTrainFeatureAll(isnan(TrainFeatureAll)) = 0;\r\n% MinMax = minmax(TrainFeatureAll')';\r\n% TrainFeatureAll = (TrainFeatureAll-kron(MinMax(1,:),ones(length,1)))./(kron(MinMax(2,:),ones(length,1))-kron(MinMax(1,:),ones(length,1)));\r\nmodel = svmtrain(TrainTruth, TrainFeatureAll, '-t 0');\r\n[TrainLabel, TrainAccuracy, TrainValue] = svmpredict(ones(length,1), TrainFeatureAll, model);\r\nsave OF_SVM_PRINT_ATTACK.mat model"
  },
  {
    "path": "Matlab/RealTime_DoGLBP.m",
    "content": "clear all, close all, clc\r\n\r\n%% camera\r\nadaptorname = 'winvideo';\r\ninfo = imaqhwinfo(adaptorname);\r\ndeviceID = info.DeviceIDs{1};\r\nformat = info.DeviceInfo(deviceID).SupportedFormats{2};\r\nvideo = videoinput(adaptorname, deviceID);\r\n%set(video, 'ReturnedColorSpace', 'rgb');\r\nvidRes = get(video, 'VideoResolution');\r\nnBands = get(video, 'NumberOfBands'); \r\nhImage = image( zeros(vidRes(2), vidRes(1), nBands) ); \r\npreview(video, hImage); \r\n\r\n%% SVM classifier\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./lbp-0.3.3');\r\nload('DoG&LBP_SVM_All.mat');\r\nMap_u2_16 = getmapping(16, 'u2');\r\nMap_u2_8 = getmapping(8, 'u2');\r\n\r\n%% test\r\ndetector = vision.CascadeObjectDetector('MinSize', [64,64]);\r\nbias = 0.5;\r\nthreshold = 5;\r\nmax_frame = 1000;\r\ni = 0;\r\nflag = zeros(1, max_frame);\r\ntic;\r\nwhile(1)    \r\n    i = i + 1;\r\n    data = getsnapshot(video);\r\n    box = step(detector, data);\r\n    if size(box, 1) >= 1\r\n        imshow(data);\r\n        frame_now = rgb2gray(imresize(data(box(1,2):box(1,2)+box(1,4), box(1,1):box(1,1)+box(1,3), :), [64,64]));\r\n        rectangle('Position',box(1,:),'LineWidth',4,'EdgeColor','r');\r\n        TestFeature = [LBP_feature(frame_now, Map_u2_16, Map_u2_8), DoG(frame_now, 0.5, 1)'];\r\n        TestFeature = (TestFeature-MinMax(1,:))./(MinMax(2,:)-MinMax(1,:));\r\n        [TestLabel, TestAccuracy, TestValue] = svmpredict(1, TestFeature, model, '-q');\r\n        flag = [flag(2:size(flag,2)), TestValue+bias];\r\n        disp(['frame:',num2str(i),'; time:',num2str(toc),'; flag:',num2str(TestValue+bias)]);\r\n        text(20, 20, {['Frame: ',num2str(i)];['Time: ',num2str(toc),'s'];['Flag: ',num2str(TestValue+bias)];['TotalFlag: ',num2str(sum(flag))]}, 'Color', 'r', 'FontSize', 12, 'VerticalAlignment', 'top');\r\n    end\r\n    if abs(sum(flag)) > threshold || i > max_frame;\r\n        break;\r\n    end\r\nend\r\nif sum(flag)>0\r\n    disp('real face');\r\n    text(box(1,1)+box(1,3)/2, box(1,2), 'Real Face', 'Color', 'r', 'FontSize', 30, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom');\r\nelse\r\n    disp('fake face');\r\n    text(box(1,1)+box(1,3)/2, box(1,2), 'Fake Face', 'Color', 'r', 'FontSize', 30, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom');\r\nend"
  },
  {
    "path": "Matlab/RealTime_OF.m",
    "content": "clear all, close all, clc\r\n\r\n%% camera\r\nadaptorname = 'winvideo';\r\ninfo = imaqhwinfo(adaptorname);\r\ndeviceID = info.DeviceIDs{1};\r\nformat = info.DeviceInfo(deviceID).SupportedFormats{5};\r\nvideo = videoinput(adaptorname, deviceID, format);\r\nvidRes = get(video, 'VideoResolution');\r\nnBands = get(video, 'NumberOfBands'); \r\nhImage = image( zeros(vidRes(2), vidRes(1), nBands) ); \r\npreview(video, hImage); \r\n\r\n%% SVM classifier\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('./HOOF');\r\nload('OF_SVM_All.mat');\r\n\r\n%% test\r\nopticalFlow = vision.OpticalFlow('ReferenceFrameSource', 'Input Port', 'OutputValue', 'Horizontal and vertical components in complex form', 'Method', 'Lucas-Kanade');\r\ndetector = vision.CascadeObjectDetector('MinSize', [64,64]);\r\nbins = 9;\r\nblocks = 10;\r\nbias = 0;\r\nthreshold = 5;\r\nmax_frame = 1000;\r\ni = 0;\r\nflag = zeros(1, 50);\r\ntic;\r\nwhile(1)\r\n    i = i + 1;\r\n    frame_now = rgb2gray(getsnapshot(video));    \r\n    box = step(detector, frame_now);\r\n    if size(box, 1) == 1 && i > 1\r\n        OF = step(opticalFlow, double(frame_now), double(frame_pre));\r\n        HOOF_Feature = HOOF(OF(box(2):box(2)+box(4), box(1):box(1)+box(3), :), bins, blocks);\r\n        [TestLabel, TestAccuracy, TestValue] = svmpredict(1, HOOF_Feature, model, '-q');\r\n        flag = [flag(2:size(flag,2)), TestValue+bias];\r\n        disp(['frame:',num2str(i),'; time:',num2str(toc),'; flag:',num2str(TestValue+bias)]);\r\n        rectangle('Position',box(1,:),'LineWidth',4,'EdgeColor','r');\r\n        text(20, 20, {['Frame: ',num2str(i)];['Time: ',num2str(toc),'s'];['Flag: ',num2str(TestValue+bias)];['TotalFlag: ',num2str(sum(flag))]}, 'Color', 'r', 'FontSize', 12, 'VerticalAlignment', 'top');\r\n    end\r\n    frame_pre = frame_now;    \r\n    if abs(sum(flag)) > threshold || i > max_frame;\r\n        break;\r\n    end\r\nend\r\nif sum(flag)>0\r\n    disp('real face');\r\n    text(box(1,1)+box(1,3)/2, box(1,2), 'Real Face', 'Color', 'r', 'FontSize', 30, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom');\r\nelse\r\n    disp('fake face');\r\n    text(box(1,1)+box(1,3)/2, box(1,2), 'Fake Face', 'Color', 'r', 'FontSize', 30, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom');\r\nend"
  },
  {
    "path": "Matlab/Save_CASIA_Test.m",
    "content": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\ncount_real = 0;\r\ncount_fake = 0;\r\nfor IdxSubject = 1 : 30\r\n    for IdxData = 1 : 8\r\n        if IdxData <= 8\r\n            Name = ['./CASIA/test_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n        else\r\n            Name = ['./CASIA/test_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n        end\r\n        Mov = VideoReader(Name);\r\n        for IdxFrame = 1 : Mov.NumberOfFrames\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = data(box(2):box(2)+box(4), box(1):box(1)+box(3), :);\r\n                if IdxData <= 2\r\n                    imwrite(frame_now, ['.\\CASIA\\test\\real\\' num2str(count_real, '%05d') '.png']);\r\n                    count_real = count_real + 1;\r\n                else\r\n                    imwrite(frame_now, ['.\\CASIA\\test\\fake\\' num2str(count_fake, '%05d') '.png']);\r\n                    count_fake = count_fake + 1;\r\n                end\r\n            end\r\n        end\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend"
  },
  {
    "path": "Matlab/Save_CASIA_Train.m",
    "content": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\ncount_real = 0;\r\ncount_fake = 0;\r\nfor IdxSubject = 1 : 20\r\n    for IdxData = 1 : 8\r\n        if IdxData <= 8\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/' num2str(IdxData) '.avi'];\r\n        else\r\n            Name = ['./CASIA/train_release/' num2str(IdxSubject) '/HR_' num2str(IdxData-8) '.avi'];\r\n        end\r\n        Mov = VideoReader(Name);\r\n        for IdxFrame = 1 : Mov.NumberOfFrames\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = data(box(2):box(2)+box(4), box(1):box(1)+box(3), :);\r\n                if IdxData <= 2\r\n                    imwrite(frame_now, ['.\\CASIA\\train\\real\\' num2str(count_real, '%05d') '.png']);\r\n                    count_real = count_real + 1;\r\n                else\r\n                    imwrite(frame_now, ['.\\CASIA\\train\\fake\\' num2str(count_fake, '%05d') '.png']);\r\n                    count_fake = count_fake + 1;\r\n                end\r\n            end\r\n        end\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend"
  },
  {
    "path": "Matlab/Save_NUAA.m",
    "content": "clear all, close all, clc\r\n\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainNormalizedNumber = size(ClientTrainNormalizedName, 1);\r\nImposterTrainNormalizedName = importdata('./NUAA/imposter_train_normalized.txt');\r\nImposterTrainNormalizedNumber = size(ImposterTrainNormalizedName, 1);\r\nClientTestNormalizedName = importdata('./NUAA/client_test_normalized.txt');\r\nClientTestNormalizedNumber = size(ClientTestNormalizedName, 1);\r\nImposterTestNormalizedName = importdata('./NUAA/imposter_test_normalized.txt');\r\nImposterTestNormalizedNumber = size(ImposterTestNormalizedName, 1);\r\n\r\nfor i = 1 : ClientTrainNormalizedNumber\r\n    ClientTrain = imread(['./NUAA/ClientNormalized/' ClientTrainNormalizedName{i}]);\r\n    imwrite(ClientTrain, ['.\\NUAA\\train\\real\\' num2str(i-1, '%05d') '.png']);\r\nend\r\n\r\nfor i = 1 : ImposterTrainNormalizedNumber\r\n    ImposterTrain = imread(['./NUAA/ImposterNormalized/' ImposterTrainNormalizedName{i}]);  \r\n    imwrite(ImposterTrain, ['.\\NUAA\\train\\fake\\' num2str(i-1, '%05d') '.png']);\r\nend\r\n\r\nfor i = 1 : ClientTestNormalizedNumber\r\n    ClientTest = imread(['./NUAA/ClientNormalized/' ClientTestNormalizedName{i}]);\r\n    imwrite(ClientTest, ['.\\NUAA\\test\\real\\' num2str(i-1, '%05d') '.png']);\r\nend\r\n\r\ncount_fake = 0;\r\nfor i = 1 : ImposterTestNormalizedNumber\r\n    ImposterTest = imread(['./NUAA/ImposterNormalized/' ImposterTestNormalizedName{i}]);  \r\n    imwrite(ImposterTest, ['.\\NUAA\\test\\fake\\' num2str(i-1, '%05d') '.png']);\r\nend"
  },
  {
    "path": "Matlab/Save_PRINT_ATTACK_Test.m",
    "content": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'009', '011', '013', '014', '019', '020', '021', '023', '024', '026', '028', '031', '102', '104', '106', '107', '109', '112', '115', '117'};\r\nfileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n    'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\nfileNo = size(fileIndex, 2);\r\ncount_real = 0;\r\ncount_fake = 0;\r\nfor IdxSubject = 1 : fileNo\r\n    for IdxData = 1 : 8\r\n        Name = ['./PRINT-ATTACK/test/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n        Mov = VideoReader(Name);\r\n        NumFrame = Mov.NumberOfFrames;\r\n        for IdxFrame = 1 : NumFrame\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = data(box(2):box(2)+box(4), box(1):box(1)+box(3), :);\r\n                if IdxData > 4\r\n                    imwrite(frame_now, ['.\\PRINT-ATTACK\\test_\\real\\' num2str(count_real, '%05d') '.png']);\r\n                    count_real = count_real + 1;\r\n                else\r\n                    imwrite(frame_now, ['.\\PRINT-ATTACK\\test_\\fake\\' num2str(count_fake, '%05d') '.png']);\r\n                    count_fake = count_fake + 1;\r\n                end\r\n            end\r\n        end\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend"
  },
  {
    "path": "Matlab/Save_PRINT_ATTACK_Train.m",
    "content": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'001', '002', '004', '006', '007', '008', '012', '016', '018', '025', '027', '103', '105', '108', '110'};\r\nfileDirec = {'attack/fixed/attack_print_', 'attack/fixed/attack_print_', 'attack/hand/attack_print_', 'attack/hand/attack_print_', 'real/', 'real/', 'real/', 'real/'; ...\r\n    'highdef_photo_adverse', 'highdef_photo_controlled', 'highdef_photo_adverse', 'highdef_photo_controlled', 'webcam_authenticate_adverse_1', 'webcam_authenticate_adverse_2', 'webcam_authenticate_controlled_1', 'webcam_authenticate_controlled_2'};\r\nfileNo = size(fileIndex, 2);\r\ncount_real = 0;\r\ncount_fake = 0;\r\nfor IdxSubject = 1 : fileNo\r\n    for IdxData = 1 : 8\r\n        Name = ['./PRINT-ATTACK/train/' fileDirec{1, IdxData} 'client' fileIndex{IdxSubject} '_session01_' fileDirec{2, IdxData} '.mov'];\r\n        Mov = VideoReader(Name);\r\n        NumFrame = Mov.NumberOfFrames;\r\n        for IdxFrame = 1 : NumFrame\r\n            data = read(Mov, IdxFrame);\r\n            box = step(detector, data);\r\n            if size(box, 1) == 1\r\n                frame_now = data(box(2):box(2)+box(4), box(1):box(1)+box(3), :);\r\n                if IdxData > 4\r\n                    imwrite(frame_now, ['.\\PRINT-ATTACK\\train_\\real\\' num2str(count_real, '%05d') '.png']);\r\n                    count_real = count_real + 1;\r\n                else\r\n                    imwrite(frame_now, ['.\\PRINT-ATTACK\\train_\\fake\\' num2str(count_fake, '%05d') '.png']);\r\n                    count_fake = count_fake + 1;\r\n                end\r\n            end\r\n        end\r\n        disp([num2str(IdxSubject) ', ' num2str(IdxData)])\r\n        clear Mov;\r\n    end\r\nend"
  },
  {
    "path": "Matlab/lbp-0.3.3/getmapping.m",
    "content": "%GETMAPPING returns a structure containing a mapping table for LBP codes.\r\n%  MAPPING = GETMAPPING(SAMPLES,MAPPINGTYPE) returns a \r\n%  structure containing a mapping table for\r\n%  LBP codes in a neighbourhood of SAMPLES sampling\r\n%  points. Possible values for MAPPINGTYPE are\r\n%       'u2'   for uniform LBP\r\n%       'ri'   for rotation-invariant LBP\r\n%       'riu2' for uniform rotation-invariant LBP.\r\n%\r\n%  Example:\r\n%       I=imread('rice.tif');\r\n%       MAPPING=getmapping(16,'riu2');\r\n%       LBPHIST=lbp(I,2,16,MAPPING,'hist');\r\n%  Now LBPHIST contains a rotation-invariant uniform LBP\r\n%  histogram in a (16,2) neighbourhood.\r\n%\r\n\r\nfunction mapping = getmapping(samples,mappingtype)\r\n% Version 0.1.1\r\n% Authors: Marko Heikkil and Timo Ahonen\r\n\r\n% Changelog\r\n% 0.1.1 Changed output to be a structure\r\n% Fixed a bug causing out of memory errors when generating rotation \r\n% invariant mappings with high number of sampling points.\r\n% Lauge Sorensen is acknowledged for spotting this problem.\r\n\r\n\r\n\r\ntable = 0:2^samples-1;\r\nnewMax  = 0; %number of patterns in the resulting LBP code\r\nindex   = 0;\r\n\r\nif strcmp(mappingtype,'u2') %Uniform 2\r\n  newMax = samples*(samples-1) + 3; \r\n  for i = 0:2^samples-1\r\n    j = bitset(bitshift(i,1,samples),1,bitget(i,samples)); %rotate left\r\n    numt = sum(bitget(bitxor(i,j),1:samples)); %number of 1->0 and\r\n                                               %0->1 transitions\r\n                                               %in binary string \r\n                                               %x is equal to the\r\n                                               %number of 1-bits in\r\n                                               %XOR(x,Rotate left(x)) \r\n    if numt <= 2\r\n      table(i+1) = index;\r\n      index = index + 1;\r\n    else\r\n      table(i+1) = newMax - 1;\r\n    end\r\n  end\r\nend\r\n\r\nif strcmp(mappingtype,'ri') %Rotation invariant\r\n  tmpMap = zeros(2^samples,1) - 1;\r\n  for i = 0:2^samples-1\r\n    rm = i;\r\n    r  = i;\r\n    for j = 1:samples-1\r\n      r = bitset(bitshift(r,1,samples),1,bitget(r,samples)); %rotate\r\n                                                             %left\r\n      if r < rm\r\n        rm = r;\r\n      end\r\n    end\r\n    if tmpMap(rm+1) < 0\r\n      tmpMap(rm+1) = newMax;\r\n      newMax = newMax + 1;\r\n    end\r\n    table(i+1) = tmpMap(rm+1);\r\n  end\r\nend\r\n\r\nif strcmp(mappingtype,'riu2') %Uniform & Rotation invariant\r\n  newMax = samples + 2;\r\n  for i = 0:2^samples - 1\r\n    j = bitset(bitshift(i,1,samples),1,bitget(i,samples)); %rotate left\r\n    numt = sum(bitget(bitxor(i,j),1:samples));\r\n    if numt <= 2\r\n      table(i+1) = sum(bitget(i,1:samples));\r\n    else\r\n      table(i+1) = samples+1;\r\n    end\r\n  end\r\nend\r\n\r\nmapping.table=table;\r\nmapping.samples=samples;\r\nmapping.num=newMax;\r\n"
  },
  {
    "path": "Matlab/lbp-0.3.3/lbp.m",
    "content": "%LBP returns the local binary pattern image or LBP histogram of an image.\r\n%  J = LBP(I,R,N,MAPPING,MODE) returns either a local binary pattern\r\n%  coded image or the local binary pattern histogram of an intensity\r\n%  image I. The LBP codes are computed using N sampling points on a \r\n%  circle of radius R and using mapping table defined by MAPPING. \r\n%  See the getmapping function for different mappings and use 0 for\r\n%  no mapping. Possible values for MODE are\r\n%       'h' or 'hist'  to get a histogram of LBP codes\r\n%       'nh'           to get a normalized histogram\r\n%  Otherwise an LBP code image is returned.\r\n%\r\n%  J = LBP(I) returns the original (basic) LBP histogram of image I\r\n%\r\n%  J = LBP(I,SP,MAPPING,MODE) computes the LBP codes using n sampling\r\n%  points defined in (n * 2) matrix SP. The sampling points should be\r\n%  defined around the origin (coordinates (0,0)).\r\n%\r\n%  Examples\r\n%  --------\r\n%       I=imread('rice.png');\r\n%       mapping=getmapping(8,'u2'); \r\n%       H1=LBP(I,1,8,mapping,'h'); %LBP histogram in (8,1) neighborhood\r\n%                                  %using uniform patterns\r\n%       subplot(2,1,1),stem(H1);\r\n%\r\n%       H2=LBP(I);\r\n%       subplot(2,1,2),stem(H2);\r\n%\r\n%       SP=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];\r\n%       I2=LBP(I,SP,0,'i'); %LBP code image using sampling points in SP\r\n%                           %and no mapping. Now H2 is equal to histogram\r\n%                           %of I2.\r\n\r\nfunction result = lbp(varargin) % image,radius,neighbors,mapping,mode)\r\n% Version 0.3.3\r\n% Authors: Marko Heikkil?and Timo Ahonen\r\n\r\n% Changelog\r\n% Version 0.3.2: A bug fix to enable using mappings together with a\r\n% predefined spoints array\r\n% Version 0.3.1: Changed MAPPING input to be a struct containing the mapping\r\n% table and the number of bins to make the function run faster with high number\r\n% of sampling points. Lauge Sorensen is acknowledged for spotting this problem.\r\n\r\n\r\n% Check number of input arguments.\r\nerror(nargchk(1,5,nargin));\r\n\r\nimage=varargin{1};\r\nd_image=double(image);\r\n\r\nif nargin==1\r\n    spoints=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];\r\n    neighbors=8;\r\n    mapping=0;\r\n    mode='h';\r\nend\r\n\r\nif (nargin == 2) && (length(varargin{2}) == 1)\r\n    error('Input arguments');\r\nend\r\n\r\nif (nargin > 2) && (length(varargin{2}) == 1)\r\n    radius=varargin{2};\r\n    neighbors=varargin{3};\r\n    \r\n    spoints=zeros(neighbors,2);\r\n\r\n    % Angle step.\r\n    a = 2*pi/neighbors;\r\n    \r\n    for i = 1:neighbors\r\n        spoints(i,1) = -radius*sin((i-1)*a);\r\n        spoints(i,2) = radius*cos((i-1)*a);\r\n    end\r\n    \r\n    if(nargin >= 4)\r\n        mapping=varargin{4};\r\n        if(isstruct(mapping) && mapping.samples ~= neighbors)\r\n            error('Incompatible mapping');\r\n        end\r\n    else\r\n        mapping=0;\r\n    end\r\n    \r\n    if(nargin >= 5)\r\n        mode=varargin{5};\r\n    else\r\n        mode='h';\r\n    end\r\nend\r\n\r\nif (nargin > 1) && (length(varargin{2}) > 1)\r\n    spoints=varargin{2};\r\n    neighbors=size(spoints,1);\r\n    \r\n    if(nargin >= 3)\r\n        mapping=varargin{3};\r\n        if(isstruct(mapping) && mapping.samples ~= neighbors)\r\n            error('Incompatible mapping');\r\n        end\r\n    else\r\n        mapping=0;\r\n    end\r\n    \r\n    if(nargin >= 4)\r\n        mode=varargin{4};\r\n    else\r\n        mode='h';\r\n    end   \r\nend\r\n\r\n% Determine the dimensions of the input image.\r\n[ysize xsize] = size(image);\r\n\r\n\r\n\r\nminy=min(spoints(:,1));\r\nmaxy=max(spoints(:,1));\r\nminx=min(spoints(:,2));\r\nmaxx=max(spoints(:,2));\r\n\r\n% Block size, each LBP code is computed within a block of size bsizey*bsizex\r\nbsizey=ceil(max(maxy,0))-floor(min(miny,0))+1;\r\nbsizex=ceil(max(maxx,0))-floor(min(minx,0))+1;\r\n\r\n% Coordinates of origin (0,0) in the block\r\norigy=1-floor(min(miny,0));\r\norigx=1-floor(min(minx,0));\r\n\r\n% Minimum allowed size for the input image depends\r\n% on the radius of the used LBP operator.\r\nif(xsize < bsizex || ysize < bsizey)\r\n  error('Too small input image. Should be at least (2*radius+1) x (2*radius+1)');\r\nend\r\n\r\n% Calculate dx and dy;\r\ndx = xsize - bsizex;\r\ndy = ysize - bsizey;\r\n\r\n% Fill the center pixel matrix C.\r\nC = image(origy:origy+dy,origx:origx+dx);\r\nd_C = double(C);\r\n\r\nbins = 2^neighbors;\r\n\r\n% Initialize the result matrix with zeros.\r\nresult=zeros(dy+1,dx+1);\r\n\r\n%Compute the LBP code image\r\n\r\nfor i = 1:neighbors\r\n  y = spoints(i,1)+origy;\r\n  x = spoints(i,2)+origx;\r\n  % Calculate floors, ceils and rounds for the x and y.\r\n  fy = floor(y); cy = ceil(y); ry = round(y);\r\n  fx = floor(x); cx = ceil(x); rx = round(x);\r\n  % Check if interpolation is needed.\r\n  if (abs(x - rx) < 1e-6) && (abs(y - ry) < 1e-6)\r\n    % Interpolation is not needed, use original datatypes\r\n    N = image(ry:ry+dy,rx:rx+dx);\r\n    D = N >= C; \r\n  else\r\n    % Interpolation needed, use double type images \r\n    ty = y - fy;\r\n    tx = x - fx;\r\n\r\n    % Calculate the interpolation weights.\r\n    w1 = roundn((1 - tx) * (1 - ty),-6);\r\n    w2 = roundn(tx * (1 - ty),-6);\r\n    w3 = roundn((1 - tx) * ty,-6) ;\r\n    % w4 = roundn(tx * ty,-6) ;\r\n    w4 = roundn(1 - w1 - w2 - w3, -6);\r\n            \r\n    % Compute interpolated pixel values\r\n    N = w1*d_image(fy:fy+dy,fx:fx+dx) + w2*d_image(fy:fy+dy,cx:cx+dx) + ...\r\nw3*d_image(cy:cy+dy,fx:fx+dx) + w4*d_image(cy:cy+dy,cx:cx+dx);\r\n    N = roundn(N,-4);\r\n    D = N >= d_C; \r\n  end  \r\n  % Update the result matrix.\r\n  v = 2^(i-1);\r\n  result = result + v*D;\r\nend\r\n\r\n%Apply mapping if it is defined\r\nif isstruct(mapping)\r\n    bins = mapping.num;\r\n    for i = 1:size(result,1)\r\n        for j = 1:size(result,2)\r\n            result(i,j) = mapping.table(result(i,j)+1);\r\n        end\r\n    end\r\nend\r\n\r\nif (strcmp(mode,'h') || strcmp(mode,'hist') || strcmp(mode,'nh'))\r\n    % Return with LBP histogram if mode equals 'hist'.\r\n    result=hist(result(:),0:(bins-1));\r\n    if (strcmp(mode,'nh'))\r\n        result=result/sum(result);\r\n    end\r\nelse\r\n    %Otherwise return a matrix of unsigned integers\r\n    if ((bins-1)<=intmax('uint8'))\r\n        result=uint8(result);\r\n    elseif ((bins-1)<=intmax('uint16'))\r\n        result=uint16(result);\r\n    else\r\n        result=uint32(result);\r\n    end\r\nend\r\n\r\nend\r\n\r\nfunction x = roundn(x, n)\r\n\r\nerror(nargchk(2, 2, nargin, 'struct'))\r\nvalidateattributes(x, {'single', 'double'}, {}, 'ROUNDN', 'X')\r\nvalidateattributes(n, ...\r\n    {'numeric'}, {'scalar', 'real', 'integer'}, 'ROUNDN', 'N')\r\n\r\nif n < 0\r\n    p = 10 ^ -n;\r\n    x = round(p * x) / p;\r\nelseif n > 0\r\n    p = 10 ^ n;\r\n    x = p * round(x / p);\r\nelse\r\n    x = round(x);\r\nend\r\n\r\nend\r\n\r\n\r\n"
  },
  {
    "path": "Matlab/liblinear-1.96/COPYRIGHT",
    "content": "\nCopyright (c) 2007-2014 The LIBLINEAR Project.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\n3. Neither name of copyright holders nor the names of its contributors\nmay be used to endorse or promote products derived from this software\nwithout specific prior written permission.\n\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "Matlab/liblinear-1.96/Makefile",
    "content": "CXX ?= g++\nCC ?= gcc\nCFLAGS = -Wall -Wconversion -O3 -fPIC\nLIBS = blas/blas.a\nSHVER = 2\nOS = $(shell uname)\n#LIBS = -lblas\n\nall: train predict\n\nlib: linear.o tron.o blas/blas.a\n\tif [ \"$(OS)\" = \"Darwin\" ]; then \\\n\t\tSHARED_LIB_FLAG=\"-dynamiclib -Wl,-install_name,liblinear.so.$(SHVER)\"; \\\n\telse \\\n\t\tSHARED_LIB_FLAG=\"-shared -Wl,-soname,liblinear.so.$(SHVER)\"; \\\n\tfi; \\\n\t$(CXX) $${SHARED_LIB_FLAG} linear.o tron.o blas/blas.a -o liblinear.so.$(SHVER)\n\ntrain: tron.o linear.o train.c blas/blas.a\n\t$(CXX) $(CFLAGS) -o train train.c tron.o linear.o $(LIBS)\n\npredict: tron.o linear.o predict.c blas/blas.a\n\t$(CXX) $(CFLAGS) -o predict predict.c tron.o linear.o $(LIBS)\n\ntron.o: tron.cpp tron.h\n\t$(CXX) $(CFLAGS) -c -o tron.o tron.cpp\n\nlinear.o: linear.cpp linear.h\n\t$(CXX) $(CFLAGS) -c -o linear.o linear.cpp\n\nblas/blas.a: blas/*.c blas/*.h\n\tmake -C blas OPTFLAGS='$(CFLAGS)' CC='$(CC)';\n\nclean:\n\tmake -C blas clean\n\tmake -C matlab clean\n\trm -f *~ tron.o linear.o train predict liblinear.so.$(SHVER)\n"
  },
  {
    "path": "Matlab/liblinear-1.96/Makefile.win",
    "content": "#You must ensure nmake.exe, cl.exe, link.exe are in system path.\n#VCVARS32.bat\n#Under dosbox prompt\n#nmake -f Makefile.win\n\n##########################################\nCXX = cl.exe\nCFLAGS = /nologo /O2 /EHsc /I. /D _WIN32 /D _CRT_SECURE_NO_DEPRECATE\nTARGET = windows\n\nall: $(TARGET)\\train.exe $(TARGET)\\predict.exe\n\n$(TARGET)\\train.exe: tron.obj linear.obj train.c blas\\*.c\n\t$(CXX) $(CFLAGS) -Fe$(TARGET)\\train.exe tron.obj linear.obj train.c blas\\*.c\n\n$(TARGET)\\predict.exe: tron.obj linear.obj predict.c blas\\*.c\n\t$(CXX) $(CFLAGS) -Fe$(TARGET)\\predict.exe tron.obj linear.obj predict.c blas\\*.c\n\nlinear.obj: linear.cpp linear.h\n\t$(CXX) $(CFLAGS) -c linear.cpp\n\ntron.obj: tron.cpp tron.h\n\t$(CXX) $(CFLAGS) -c tron.cpp\n\nlib: linear.cpp linear.h linear.def tron.obj\n\t$(CXX) $(CFLAGS) -LD linear.cpp tron.obj blas\\*.c -Fe$(TARGET)\\liblinear -link -DEF:linear.def \n\nclean:\n\t -erase /Q *.obj $(TARGET)\\.\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/README",
    "content": "LIBLINEAR is a simple package for solving large-scale regularized linear \nclassification and regression. It currently supports \n- L2-regularized logistic regression/L2-loss support vector classification/L1-loss support vector classification\n- L1-regularized L2-loss support vector classification/L1-regularized logistic regression\n- L2-regularized L2-loss support vector regression/L1-loss support vector regression. \nThis document explains the usage of LIBLINEAR.\n\nTo get started, please read the ``Quick Start'' section first.\nFor developers, please check the ``Library Usage'' section to learn\nhow to integrate LIBLINEAR in your software.\n\nTable of Contents\n=================\n\n- When to use LIBLINEAR but not LIBSVM\n- Quick Start\n- Installation\n- `train' Usage\n- `predict' Usage\n- Examples\n- Library Usage\n- Building Windows Binaries\n- Additional Information\n- MATLAB/OCTAVE interface\n- PYTHON interface\n\nWhen to use LIBLINEAR but not LIBSVM\n====================================\n\nThere are some large data for which with/without nonlinear mappings\ngives similar performances.  Without using kernels, one can\nefficiently train a much larger set via linear classification/regression.  \nThese data usually have a large number of features. Document classification\nis an example.\n\nWarning: While generally liblinear is very fast, its default solver\nmay be slow under certain situations (e.g., data not scaled or C is\nlarge). See Appendix B of our SVM guide about how to handle such\ncases.\nhttp://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf\n\nWarning: If you are a beginner and your data sets are not large, you\nshould consider LIBSVM first.\n\nLIBSVM page:\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm\n\n\nQuick Start\n===========\n\nSee the section ``Installation'' for installing LIBLINEAR.\n\nAfter installation, there are programs `train' and `predict' for\ntraining and testing, respectively.\n\nAbout the data format, please check the README file of LIBSVM. Note\nthat feature index must start from 1 (but not 0).\n\nA sample classification data included in this package is `heart_scale'.\n\nType `train heart_scale', and the program will read the training\ndata and output the model file `heart_scale.model'. If you have a test\nset called heart_scale.t, then type `predict heart_scale.t\nheart_scale.model output' to see the prediction accuracy. The `output'\nfile contains the predicted class labels.\n\nFor more information about `train' and `predict', see the sections\n`train' Usage and `predict' Usage.\n\nTo obtain good performances, sometimes one needs to scale the\ndata. Please check the program `svm-scale' of LIBSVM. For large and\nsparse data, use `-l 0' to keep the sparsity.\n\nInstallation\n============\n\nOn Unix systems, type `make' to build the `train' and `predict'\nprograms. Run them without arguments to show the usages.\n\nOn other systems, consult `Makefile' to build them (e.g., see\n'Building Windows binaries' in this file) or use the pre-built\nbinaries (Windows binaries are in the directory `windows').\n\nThis software uses some level-1 BLAS subroutines. The needed functions are\nincluded in this package.  If a BLAS library is available on your\nmachine, you may use it by modifying the Makefile: Unmark the following line\n\n        #LIBS ?= -lblas\n\nand mark\n\n        LIBS ?= blas/blas.a\n\n`train' Usage\n=============\n\nUsage: train [options] training_set_file [model_file]\noptions:\n-s type : set type of solver (default 1)\n  for multi-class classification\n\t 0 -- L2-regularized logistic regression (primal)\n\t 1 -- L2-regularized L2-loss support vector classification (dual)\n\t 2 -- L2-regularized L2-loss support vector classification (primal)\n\t 3 -- L2-regularized L1-loss support vector classification (dual)\n\t 4 -- support vector classification by Crammer and Singer\n\t 5 -- L1-regularized L2-loss support vector classification\n\t 6 -- L1-regularized logistic regression\n\t 7 -- L2-regularized logistic regression (dual)\n  for regression\n\t11 -- L2-regularized L2-loss support vector regression (primal)\n\t12 -- L2-regularized L2-loss support vector regression (dual)\n\t13 -- L2-regularized L1-loss support vector regression (dual)\n-c cost : set the parameter C (default 1)\n-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\n-e epsilon : set tolerance of termination criterion\n\t-s 0 and 2\n\t\t|f'(w)|_2 <= eps*min(pos,neg)/l*|f'(w0)|_2,\n\t\twhere f is the primal function and pos/neg are # of\n\t\tpositive/negative data (default 0.01)\n\t-s 11\n\t\t|f'(w)|_2 <= eps*|f'(w0)|_2 (default 0.001) \n\t-s 1, 3, 4 and 7\n\t\tDual maximal violation <= eps; similar to libsvm (default 0.1)\n\t-s 5 and 6\n\t\t|f'(w)|_1 <= eps*min(pos,neg)/l*|f'(w0)|_1,\n\t\twhere f is the primal function (default 0.01)\n\t-s 12 and 13\\n\"\n\t\t|f'(alpha)|_1 <= eps |f'(alpha0)|,\n\t\twhere f is the dual function (default 0.1)\n-B bias : if bias >= 0, instance x becomes [x; bias]; if < 0, no bias term added (default -1)\n-wi weight: weights adjust the parameter C of different classes (see README for details)\n-v n: n-fold cross validation mode\n-q : quiet mode (no outputs)\n\nOption -v randomly splits the data into n parts and calculates cross\nvalidation accuracy on them.\n\nFormulations:\n\nFor L2-regularized logistic regression (-s 0), we solve\n\nmin_w w^Tw/2 + C \\sum log(1 + exp(-y_i w^Tx_i))\n\nFor L2-regularized L2-loss SVC dual (-s 1), we solve\n\nmin_alpha  0.5(alpha^T (Q + I/2/C) alpha) - e^T alpha\n    s.t.   0 <= alpha_i,\n\nFor L2-regularized L2-loss SVC (-s 2), we solve\n\nmin_w w^Tw/2 + C \\sum max(0, 1- y_i w^Tx_i)^2\n\nFor L2-regularized L1-loss SVC dual (-s 3), we solve\n\nmin_alpha  0.5(alpha^T Q alpha) - e^T alpha\n    s.t.   0 <= alpha_i <= C,\n\nFor L1-regularized L2-loss SVC (-s 5), we solve\n\nmin_w \\sum |w_j| + C \\sum max(0, 1- y_i w^Tx_i)^2\n\nFor L1-regularized logistic regression (-s 6), we solve\n\nmin_w \\sum |w_j| + C \\sum log(1 + exp(-y_i w^Tx_i))\n\nFor L2-regularized logistic regression (-s 7), we solve\n\nmin_alpha  0.5(alpha^T Q alpha) + \\sum alpha_i*log(alpha_i) + \\sum (C-alpha_i)*log(C-alpha_i) - a constant\n    s.t.   0 <= alpha_i <= C,\n\nwhere\n\nQ is a matrix with Q_ij = y_i y_j x_i^T x_j.\n\nFor L2-regularized L2-loss SVR (-s 11), we solve\n\nmin_w w^Tw/2 + C \\sum max(0, |y_i-w^Tx_i|-epsilon)^2\n\nFor L2-regularized L2-loss SVR dual (-s 12), we solve\n\nmin_beta  0.5(beta^T (Q + lambda I/2/C) beta) - y^T beta + \\sum |beta_i|\n\nFor L2-regularized L1-loss SVR dual (-s 13), we solve\n\nmin_beta  0.5(beta^T Q beta) - y^T beta + \\sum |beta_i|\n    s.t.   -C <= beta_i <= C,\n\nwhere\n\nQ is a matrix with Q_ij = x_i^T x_j.\n\nIf bias >= 0, w becomes [w; w_{n+1}] and x becomes [x; bias].\n\nThe primal-dual relationship implies that -s 1 and -s 2 give the same\nmodel, -s 0 and -s 7 give the same, and -s 11 and -s 12 give the same.\n\nWe implement 1-vs-the rest multi-class strategy for classification. \nIn training i vs. non_i, their C parameters are (weight from -wi)*C \nand C, respectively. If there are only two classes, we train only one\nmodel. Thus weight1*C vs. weight2*C is used. See examples below.\n\nWe also implement multi-class SVM by Crammer and Singer (-s 4):\n\nmin_{w_m, \\xi_i}  0.5 \\sum_m ||w_m||^2 + C \\sum_i \\xi_i\n    s.t.  w^T_{y_i} x_i - w^T_m x_i >= \\e^m_i - \\xi_i \\forall m,i\n\nwhere e^m_i = 0 if y_i  = m,\n      e^m_i = 1 if y_i != m,\n\nHere we solve the dual problem:\n\nmin_{\\alpha}  0.5 \\sum_m ||w_m(\\alpha)||^2 + \\sum_i \\sum_m e^m_i alpha^m_i\n    s.t.  \\alpha^m_i <= C^m_i \\forall m,i , \\sum_m \\alpha^m_i=0 \\forall i\n\nwhere w_m(\\alpha) = \\sum_i \\alpha^m_i x_i,\nand C^m_i = C if m  = y_i,\n    C^m_i = 0 if m != y_i.\n\n`predict' Usage\n===============\n\nUsage: predict [options] test_file model_file output_file\noptions:\n-b probability_estimates: whether to output probability estimates, 0 or 1 (default 0); currently for logistic regression only\n-q : quiet mode (no outputs)\n\nNote that -b is only needed in the prediction phase. This is different\nfrom the setting of LIBSVM.\n\nExamples\n========\n\n> train data_file\n\nTrain linear SVM with L2-loss function.\n\n> train -s 0 data_file\n\nTrain a logistic regression model.\n\n> train -v 5 -e 0.001 data_file\n\nDo five-fold cross-validation using L2-loss svm.\nUse a smaller stopping tolerance 0.001 than the default\n0.1 if you want more accurate solutions.\n\n> train -c 10 -w1 2 -w2 5 -w3 2 four_class_data_file\n\nTrain four classifiers:\npositive        negative        Cp      Cn\nclass 1         class 2,3,4.    20      10\nclass 2         class 1,3,4.    50      10\nclass 3         class 1,2,4.    20      10\nclass 4         class 1,2,3.    10      10\n\n> train -c 10 -w3 1 -w2 5 two_class_data_file\n\nIf there are only two classes, we train ONE model.\nThe C values for the two classes are 10 and 50.\n\n> predict -b 1 test_file data_file.model output_file\n\nOutput probability estimates (for logistic regression only).\n\nLibrary Usage\n=============\n\n- Function: model* train(const struct problem *prob,\n                const struct parameter *param);\n\n    This function constructs and returns a linear classification \n    or regression model according to the given training data and \n    parameters.\n\n    struct problem describes the problem:\n\n        struct problem\n        {\n            int l, n;\n            int *y;\n            struct feature_node **x;\n            double bias;\n        };\n\n    where `l' is the number of training data. If bias >= 0, we assume\n    that one additional feature is added to the end of each data\n    instance. `n' is the number of feature (including the bias feature\n    if bias >= 0). `y' is an array containing the target values. (integers \n    in classification, real numbers in regression) And `x' is an array \n    of pointers, each of which points to a sparse representation (array \n    of feature_node) of one training vector.\n\n    For example, if we have the following training data:\n\n    LABEL       ATTR1   ATTR2   ATTR3   ATTR4   ATTR5\n    -----       -----   -----   -----   -----   -----\n    1           0       0.1     0.2     0       0\n    2           0       0.1     0.3    -1.2     0\n    1           0.4     0       0       0       0\n    2           0       0.1     0       1.4     0.5\n    3          -0.1    -0.2     0.1     1.1     0.1\n\n    and bias = 1, then the components of problem are:\n\n    l = 5\n    n = 6\n\n    y -> 1 2 1 2 3\n\n    x -> [ ] -> (2,0.1) (3,0.2) (6,1) (-1,?)\n         [ ] -> (2,0.1) (3,0.3) (4,-1.2) (6,1) (-1,?)\n         [ ] -> (1,0.4) (6,1) (-1,?)\n         [ ] -> (2,0.1) (4,1.4) (5,0.5) (6,1) (-1,?)\n         [ ] -> (1,-0.1) (2,-0.2) (3,0.1) (4,1.1) (5,0.1) (6,1) (-1,?)\n\n    struct parameter describes the parameters of a linear classification \n    or regression model:\n\n        struct parameter\n        {\n                int solver_type;\n\n                /* these are for training only */\n                double eps;             /* stopping criteria */\n                double C;\n                int nr_weight;\n                int *weight_label;\n                double* weight;\n                double p;\n        };\n\n    solver_type can be one of L2R_LR, L2R_L2LOSS_SVC_DUAL, L2R_L2LOSS_SVC, L2R_L1LOSS_SVC_DUAL, MCSVM_CS, L1R_L2LOSS_SVC, L1R_LR, L2R_LR_DUAL, L2R_L2LOSS_SVR, L2R_L2LOSS_SVR_DUAL, L2R_L1LOSS_SVR_DUAL.\n  for classification\n    L2R_LR                L2-regularized logistic regression (primal)\n    L2R_L2LOSS_SVC_DUAL   L2-regularized L2-loss support vector classification (dual)\n    L2R_L2LOSS_SVC        L2-regularized L2-loss support vector classification (primal)\n    L2R_L1LOSS_SVC_DUAL   L2-regularized L1-loss support vector classification (dual)\n    MCSVM_CS              support vector classification by Crammer and Singer\n    L1R_L2LOSS_SVC        L1-regularized L2-loss support vector classification\n    L1R_LR                L1-regularized logistic regression\n    L2R_LR_DUAL           L2-regularized logistic regression (dual)\n  for regression\n    L2R_L2LOSS_SVR        L2-regularized L2-loss support vector regression (primal)\n    L2R_L2LOSS_SVR_DUAL   L2-regularized L2-loss support vector regression (dual)\n    L2R_L1LOSS_SVR_DUAL   L2-regularized L1-loss support vector regression (dual)\n\n    C is the cost of constraints violation.\n    p is the sensitiveness of loss of support vector regression. \n    eps is the stopping criterion.\n\n    nr_weight, weight_label, and weight are used to change the penalty\n    for some classes (If the weight for a class is not changed, it is\n    set to 1). This is useful for training classifier using unbalanced\n    input data or with asymmetric misclassification cost.\n\n    nr_weight is the number of elements in the array weight_label and\n    weight. Each weight[i] corresponds to weight_label[i], meaning that\n    the penalty of class weight_label[i] is scaled by a factor of weight[i].\n\n    If you do not want to change penalty for any of the classes,\n    just set nr_weight to 0.\n\n    *NOTE* To avoid wrong parameters, check_parameter() should be\n    called before train().\n\n    struct model stores the model obtained from the training procedure:\n\n        struct model\n        {\n                struct parameter param;\n                int nr_class;           /* number of classes */\n                int nr_feature;\n                double *w;\n                int *label;             /* label of each class */\n                double bias;\n        };\n\n     param describes the parameters used to obtain the model.\n\n     nr_class and nr_feature are the number of classes and features, \n     respectively. nr_class = 2 for regression. \n\n     The nr_feature*nr_class array w gives feature weights. We use one\n     against the rest for multi-class classification, so each feature\n     index corresponds to nr_class weight values. Weights are\n     organized in the following way\n\n     +------------------+------------------+------------+\n     | nr_class weights | nr_class weights |  ...\n     | for 1st feature  | for 2nd feature  |\n     +------------------+------------------+------------+\n\n     If bias >= 0, x becomes [x; bias]. The number of features is\n     increased by one, so w is a (nr_feature+1)*nr_class array. The\n     value of bias is stored in the variable bias.\n\n     The array label stores class labels.\n\n- Function: void cross_validation(const problem *prob, const parameter *param, int nr_fold, double *target);\n\n    This function conducts cross validation. Data are separated to\n    nr_fold folds. Under given parameters, sequentially each fold is\n    validated using the model from training the remaining. Predicted\n    labels in the validation process are stored in the array called\n    target.\n\n    The format of prob is same as that for train().\n\n- Function: double predict(const model *model_, const feature_node *x);\n\n    For a classification model, the predicted class for x is returned.\n    For a regression model, the function value of x calculated using\n    the model is returned. \n\n- Function: double predict_values(const struct model *model_,\n            const struct feature_node *x, double* dec_values);\n\n    This function gives nr_w decision values in the array dec_values. \n    nr_w=1 if regression is applied or the number of classes is two. An exception is\n    multi-class svm by Crammer and Singer (-s 4), where nr_w = 2 if there are two classes. For all other situations, nr_w is the \n    number of classes.\n\n    We implement one-vs-the rest multi-class strategy (-s 0,1,2,3,5,6,7) \n    and multi-class svm by Crammer and Singer (-s 4) for multi-class SVM.\n    The class with the highest decision value is returned.\n\n- Function: double predict_probability(const struct model *model_,\n            const struct feature_node *x, double* prob_estimates);\n\n    This function gives nr_class probability estimates in the array\n    prob_estimates. nr_class can be obtained from the function\n    get_nr_class. The class with the highest probability is\n    returned. Currently, we support only the probability outputs of\n    logistic regression.\n\n- Function: int get_nr_feature(const model *model_);\n\n    The function gives the number of attributes of the model.\n\n- Function: int get_nr_class(const model *model_);\n\n    The function gives the number of classes of the model.\n    For a regression model, 2 is returned.\n\n- Function: void get_labels(const model *model_, int* label);\n\n    This function outputs the name of labels into an array called label.\n    For a regression model, label is unchanged.\n\n- Function: double get_decfun_coef(const struct model *model_, int feat_idx,\n            int label_idx);\n\n    This function gives the coefficient for the feature with feature index =\n    feat_idx and the class with label index = label_idx. Note that feat_idx\n    starts from 1, while label_idx starts from 0. If feat_idx is not in the\n    valid range (1 to nr_feature), then a zero value will be returned. For\n    classification models, if label_idx is not in the valid range (0 to\n    nr_class-1), then a zero value will be returned; for regression models,\n    label_idx is ignored.\n\n- Function: double get_decfun_bias(const struct model *model_, int label_idx);\n\n    This function gives the bias term corresponding to the class with the\n    label_idx. For classification models, if label_idx is not in a valid range\n    (0 to nr_class-1), then a zero value will be returned; for regression\n    models, label_idx is ignored.\n\n- Function: const char *check_parameter(const struct problem *prob,\n            const struct parameter *param);\n\n    This function checks whether the parameters are within the feasible\n    range of the problem. This function should be called before calling\n    train() and cross_validation(). It returns NULL if the\n    parameters are feasible, otherwise an error message is returned.\n\n- Function: int check_probability_model(const struct model *model);\n\n    This function returns 1 if the model supports probability output;\n    otherwise, it returns 0.\n\n- Function: int check_regression_model(const struct model *model);\n\n    This function returns 1 if the model is a regression model; otherwise\n    it returns 0.\n\n- Function: int save_model(const char *model_file_name,\n            const struct model *model_);\n\n    This function saves a model to a file; returns 0 on success, or -1\n    if an error occurs.\n\n- Function: struct model *load_model(const char *model_file_name);\n\n    This function returns a pointer to the model read from the file,\n    or a null pointer if the model could not be loaded.\n\n- Function: void free_model_content(struct model *model_ptr);\n\n    This function frees the memory used by the entries in a model structure.\n\n- Function: void free_and_destroy_model(struct model **model_ptr_ptr);\n\n    This function frees the memory used by a model and destroys the model\n    structure.\n\n- Function: void destroy_param(struct parameter *param);\n\n    This function frees the memory used by a parameter set.\n\n- Function: void set_print_string_function(void (*print_func)(const char *));\n\n    Users can specify their output format by a function. Use\n        set_print_string_function(NULL); \n    for default printing to stdout.\n\nBuilding Windows Binaries\n=========================\n\nWindows binaries are in the directory `windows'. To build them via\nVisual C++, use the following steps:\n\n1. Open a dos command box and change to liblinear directory. If\nenvironment variables of VC++ have not been set, type\n\n\"C:\\Program Files\\Microsoft Visual Studio 10.0\\VC\\bin\\vcvars32.bat\"\n\nYou may have to modify the above command according which version of\nVC++ or where it is installed.\n\n2. Type\n\nnmake -f Makefile.win clean all\n\n2. (Optional) To build 64-bit windows binaries, you must\n\t(1) Setup vcvars64.bat instead of vcvars32.bat\n\t(2) Change CFLAGS in Makefile.win: /D _WIN32 to /D _WIN64\n\nMATLAB/OCTAVE Interface\n=======================\n\nPlease check the file README in the directory `matlab'.\n\nPYTHON Interface\n================\n\nPlease check the file README in the directory `python'.\n\nAdditional Information\n======================\n\nIf you find LIBLINEAR helpful, please cite it as\n\nR.-E. Fan, K.-W. Chang, C.-J. Hsieh, X.-R. Wang, and C.-J. Lin.\nLIBLINEAR: A Library for Large Linear Classification, Journal of\nMachine Learning Research 9(2008), 1871-1874. Software available at\nhttp://www.csie.ntu.edu.tw/~cjlin/liblinear\n\nFor any questions and comments, please send your email to\ncjlin@csie.ntu.edu.tw\n\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/Makefile",
    "content": "AR     = ar rcv\nRANLIB = ranlib \n\nHEADERS = blas.h blasp.h\nFILES = dnrm2.o daxpy.o ddot.o dscal.o \n\nCFLAGS = $(OPTFLAGS) \nFFLAGS = $(OPTFLAGS)\n\nblas: $(FILES) $(HEADERS)\n\t$(AR) blas.a $(FILES)  \n\t$(RANLIB) blas.a\n\nclean:\n\t- rm -f *.o\n\t- rm -f *.a\n\t- rm -f *~\n\n.c.o:\n\t$(CC) $(CFLAGS) -c $*.c\n\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/blas.h",
    "content": "/* blas.h  --  C header file for BLAS                         Ver 1.0 */\n/* Jesse Bennett                                       March 23, 2000 */\n\n/**  barf  [ba:rf]  2.  \"He suggested using FORTRAN, and everybody barfed.\"\n\n\t- From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */\n\n#ifndef BLAS_INCLUDE\n#define BLAS_INCLUDE\n\n/* Data types specific to BLAS implementation */\ntypedef struct { float r, i; } fcomplex;\ntypedef struct { double r, i; } dcomplex;\ntypedef int blasbool;\n\n#include \"blasp.h\"    /* Prototypes for all BLAS functions */\n\n#define FALSE 0\n#define TRUE  1\n\n/* Macro functions */\n#define MIN(a,b) ((a) <= (b) ? (a) : (b))\n#define MAX(a,b) ((a) >= (b) ? (a) : (b))\n\n#endif\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/blasp.h",
    "content": "/* blasp.h  --  C prototypes for BLAS                         Ver 1.0 */\n/* Jesse Bennett                                       March 23, 2000 */\n\n/* Functions  listed in alphabetical order */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef F2C_COMPAT\n\nvoid cdotc_(fcomplex *dotval, int *n, fcomplex *cx, int *incx,\n            fcomplex *cy, int *incy);\n\nvoid cdotu_(fcomplex *dotval, int *n, fcomplex *cx, int *incx,\n            fcomplex *cy, int *incy);\n\ndouble sasum_(int *n, float *sx, int *incx);\n\ndouble scasum_(int *n, fcomplex *cx, int *incx);\n\ndouble scnrm2_(int *n, fcomplex *x, int *incx);\n\ndouble sdot_(int *n, float *sx, int *incx, float *sy, int *incy);\n\ndouble snrm2_(int *n, float *x, int *incx);\n\nvoid zdotc_(dcomplex *dotval, int *n, dcomplex *cx, int *incx,\n            dcomplex *cy, int *incy);\n\nvoid zdotu_(dcomplex *dotval, int *n, dcomplex *cx, int *incx,\n            dcomplex *cy, int *incy);\n\n#else\n\nfcomplex cdotc_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);\n\nfcomplex cdotu_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);\n\nfloat sasum_(int *n, float *sx, int *incx);\n\nfloat scasum_(int *n, fcomplex *cx, int *incx);\n\nfloat scnrm2_(int *n, fcomplex *x, int *incx);\n\nfloat sdot_(int *n, float *sx, int *incx, float *sy, int *incy);\n\nfloat snrm2_(int *n, float *x, int *incx);\n\ndcomplex zdotc_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);\n\ndcomplex zdotu_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);\n\n#endif\n\n/* Remaining functions listed in alphabetical order */\n\nint caxpy_(int *n, fcomplex *ca, fcomplex *cx, int *incx, fcomplex *cy,\n           int *incy);\n\nint ccopy_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);\n\nint cgbmv_(char *trans, int *m, int *n, int *kl, int *ku,\n           fcomplex *alpha, fcomplex *a, int *lda, fcomplex *x, int *incx,\n           fcomplex *beta, fcomplex *y, int *incy);\n\nint cgemm_(char *transa, char *transb, int *m, int *n, int *k,\n           fcomplex *alpha, fcomplex *a, int *lda, fcomplex *b, int *ldb,\n           fcomplex *beta, fcomplex *c, int *ldc);\n\nint cgemv_(char *trans, int *m, int *n, fcomplex *alpha, fcomplex *a,\n           int *lda, fcomplex *x, int *incx, fcomplex *beta, fcomplex *y,\n           int *incy);\n\nint cgerc_(int *m, int *n, fcomplex *alpha, fcomplex *x, int *incx,\n           fcomplex *y, int *incy, fcomplex *a, int *lda);\n\nint cgeru_(int *m, int *n, fcomplex *alpha, fcomplex *x, int *incx,\n           fcomplex *y, int *incy, fcomplex *a, int *lda);\n\nint chbmv_(char *uplo, int *n, int *k, fcomplex *alpha, fcomplex *a,\n           int *lda, fcomplex *x, int *incx, fcomplex *beta, fcomplex *y,\n           int *incy);\n\nint chemm_(char *side, char *uplo, int *m, int *n, fcomplex *alpha,\n           fcomplex *a, int *lda, fcomplex *b, int *ldb, fcomplex *beta,\n           fcomplex *c, int *ldc);\n\nint chemv_(char *uplo, int *n, fcomplex *alpha, fcomplex *a, int *lda,\n           fcomplex *x, int *incx, fcomplex *beta, fcomplex *y, int *incy);\n\nint cher_(char *uplo, int *n, float *alpha, fcomplex *x, int *incx,\n          fcomplex *a, int *lda);\n\nint cher2_(char *uplo, int *n, fcomplex *alpha, fcomplex *x, int *incx,\n           fcomplex *y, int *incy, fcomplex *a, int *lda);\n\nint cher2k_(char *uplo, char *trans, int *n, int *k, fcomplex *alpha,\n            fcomplex *a, int *lda, fcomplex *b, int *ldb, float *beta,\n            fcomplex *c, int *ldc);\n\nint cherk_(char *uplo, char *trans, int *n, int *k, float *alpha,\n           fcomplex *a, int *lda, float *beta, fcomplex *c, int *ldc);\n\nint chpmv_(char *uplo, int *n, fcomplex *alpha, fcomplex *ap, fcomplex *x,\n           int *incx, fcomplex *beta, fcomplex *y, int *incy);\n\nint chpr_(char *uplo, int *n, float *alpha, fcomplex *x, int *incx,\n          fcomplex *ap);\n\nint chpr2_(char *uplo, int *n, fcomplex *alpha, fcomplex *x, int *incx,\n           fcomplex *y, int *incy, fcomplex *ap);\n\nint crotg_(fcomplex *ca, fcomplex *cb, float *c, fcomplex *s);\n\nint cscal_(int *n, fcomplex *ca, fcomplex *cx, int *incx);\n\nint csscal_(int *n, float *sa, fcomplex *cx, int *incx);\n\nint cswap_(int *n, fcomplex *cx, int *incx, fcomplex *cy, int *incy);\n\nint csymm_(char *side, char *uplo, int *m, int *n, fcomplex *alpha,\n           fcomplex *a, int *lda, fcomplex *b, int *ldb, fcomplex *beta,\n           fcomplex *c, int *ldc);\n\nint csyr2k_(char *uplo, char *trans, int *n, int *k, fcomplex *alpha,\n            fcomplex *a, int *lda, fcomplex *b, int *ldb, fcomplex *beta,\n            fcomplex *c, int *ldc);\n\nint csyrk_(char *uplo, char *trans, int *n, int *k, fcomplex *alpha,\n           fcomplex *a, int *lda, fcomplex *beta, fcomplex *c, int *ldc);\n\nint ctbmv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           fcomplex *a, int *lda, fcomplex *x, int *incx);\n\nint ctbsv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           fcomplex *a, int *lda, fcomplex *x, int *incx);\n\nint ctpmv_(char *uplo, char *trans, char *diag, int *n, fcomplex *ap,\n           fcomplex *x, int *incx);\n\nint ctpsv_(char *uplo, char *trans, char *diag, int *n, fcomplex *ap,\n           fcomplex *x, int *incx);\n\nint ctrmm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, fcomplex *alpha, fcomplex *a, int *lda, fcomplex *b,\n           int *ldb);\n\nint ctrmv_(char *uplo, char *trans, char *diag, int *n, fcomplex *a,\n           int *lda, fcomplex *x, int *incx);\n\nint ctrsm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, fcomplex *alpha, fcomplex *a, int *lda, fcomplex *b,\n           int *ldb);\n\nint ctrsv_(char *uplo, char *trans, char *diag, int *n, fcomplex *a,\n           int *lda, fcomplex *x, int *incx);\n\nint daxpy_(int *n, double *sa, double *sx, int *incx, double *sy,\n           int *incy);\n\nint dcopy_(int *n, double *sx, int *incx, double *sy, int *incy);\n\nint dgbmv_(char *trans, int *m, int *n, int *kl, int *ku,\n           double *alpha, double *a, int *lda, double *x, int *incx,\n           double *beta, double *y, int *incy);\n\nint dgemm_(char *transa, char *transb, int *m, int *n, int *k,\n           double *alpha, double *a, int *lda, double *b, int *ldb,\n           double *beta, double *c, int *ldc);\n\nint dgemv_(char *trans, int *m, int *n, double *alpha, double *a,\n           int *lda, double *x, int *incx, double *beta, double *y, \n           int *incy);\n\nint dger_(int *m, int *n, double *alpha, double *x, int *incx,\n          double *y, int *incy, double *a, int *lda);\n\nint drot_(int *n, double *sx, int *incx, double *sy, int *incy,\n          double *c, double *s);\n\nint drotg_(double *sa, double *sb, double *c, double *s);\n\nint dsbmv_(char *uplo, int *n, int *k, double *alpha, double *a,\n           int *lda, double *x, int *incx, double *beta, double *y, \n           int *incy);\n\nint dscal_(int *n, double *sa, double *sx, int *incx);\n\nint dspmv_(char *uplo, int *n, double *alpha, double *ap, double *x,\n           int *incx, double *beta, double *y, int *incy);\n\nint dspr_(char *uplo, int *n, double *alpha, double *x, int *incx,\n          double *ap);\n\nint dspr2_(char *uplo, int *n, double *alpha, double *x, int *incx,\n           double *y, int *incy, double *ap);\n\nint dswap_(int *n, double *sx, int *incx, double *sy, int *incy);\n\nint dsymm_(char *side, char *uplo, int *m, int *n, double *alpha,\n           double *a, int *lda, double *b, int *ldb, double *beta,\n           double *c, int *ldc);\n\nint dsymv_(char *uplo, int *n, double *alpha, double *a, int *lda,\n           double *x, int *incx, double *beta, double *y, int *incy);\n\nint dsyr_(char *uplo, int *n, double *alpha, double *x, int *incx,\n          double *a, int *lda);\n\nint dsyr2_(char *uplo, int *n, double *alpha, double *x, int *incx,\n           double *y, int *incy, double *a, int *lda);\n\nint dsyr2k_(char *uplo, char *trans, int *n, int *k, double *alpha,\n            double *a, int *lda, double *b, int *ldb, double *beta,\n            double *c, int *ldc);\n\nint dsyrk_(char *uplo, char *trans, int *n, int *k, double *alpha,\n           double *a, int *lda, double *beta, double *c, int *ldc);\n\nint dtbmv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           double *a, int *lda, double *x, int *incx);\n\nint dtbsv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           double *a, int *lda, double *x, int *incx);\n\nint dtpmv_(char *uplo, char *trans, char *diag, int *n, double *ap,\n           double *x, int *incx);\n\nint dtpsv_(char *uplo, char *trans, char *diag, int *n, double *ap,\n           double *x, int *incx);\n\nint dtrmm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, double *alpha, double *a, int *lda, double *b, \n           int *ldb);\n\nint dtrmv_(char *uplo, char *trans, char *diag, int *n, double *a,\n           int *lda, double *x, int *incx);\n\nint dtrsm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, double *alpha, double *a, int *lda, double *b, \n           int *ldb);\n\nint dtrsv_(char *uplo, char *trans, char *diag, int *n, double *a,\n           int *lda, double *x, int *incx);\n\n\nint saxpy_(int *n, float *sa, float *sx, int *incx, float *sy, int *incy);\n\nint scopy_(int *n, float *sx, int *incx, float *sy, int *incy);\n\nint sgbmv_(char *trans, int *m, int *n, int *kl, int *ku,\n           float *alpha, float *a, int *lda, float *x, int *incx,\n           float *beta, float *y, int *incy);\n\nint sgemm_(char *transa, char *transb, int *m, int *n, int *k,\n           float *alpha, float *a, int *lda, float *b, int *ldb,\n           float *beta, float *c, int *ldc);\n\nint sgemv_(char *trans, int *m, int *n, float *alpha, float *a,\n           int *lda, float *x, int *incx, float *beta, float *y, \n           int *incy);\n\nint sger_(int *m, int *n, float *alpha, float *x, int *incx,\n          float *y, int *incy, float *a, int *lda);\n\nint srot_(int *n, float *sx, int *incx, float *sy, int *incy,\n          float *c, float *s);\n\nint srotg_(float *sa, float *sb, float *c, float *s);\n\nint ssbmv_(char *uplo, int *n, int *k, float *alpha, float *a,\n           int *lda, float *x, int *incx, float *beta, float *y, \n           int *incy);\n\nint sscal_(int *n, float *sa, float *sx, int *incx);\n\nint sspmv_(char *uplo, int *n, float *alpha, float *ap, float *x,\n           int *incx, float *beta, float *y, int *incy);\n\nint sspr_(char *uplo, int *n, float *alpha, float *x, int *incx,\n          float *ap);\n\nint sspr2_(char *uplo, int *n, float *alpha, float *x, int *incx,\n           float *y, int *incy, float *ap);\n\nint sswap_(int *n, float *sx, int *incx, float *sy, int *incy);\n\nint ssymm_(char *side, char *uplo, int *m, int *n, float *alpha,\n           float *a, int *lda, float *b, int *ldb, float *beta,\n           float *c, int *ldc);\n\nint ssymv_(char *uplo, int *n, float *alpha, float *a, int *lda,\n           float *x, int *incx, float *beta, float *y, int *incy);\n\nint ssyr_(char *uplo, int *n, float *alpha, float *x, int *incx,\n          float *a, int *lda);\n\nint ssyr2_(char *uplo, int *n, float *alpha, float *x, int *incx,\n           float *y, int *incy, float *a, int *lda);\n\nint ssyr2k_(char *uplo, char *trans, int *n, int *k, float *alpha,\n            float *a, int *lda, float *b, int *ldb, float *beta,\n            float *c, int *ldc);\n\nint ssyrk_(char *uplo, char *trans, int *n, int *k, float *alpha,\n           float *a, int *lda, float *beta, float *c, int *ldc);\n\nint stbmv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           float *a, int *lda, float *x, int *incx);\n\nint stbsv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           float *a, int *lda, float *x, int *incx);\n\nint stpmv_(char *uplo, char *trans, char *diag, int *n, float *ap,\n           float *x, int *incx);\n\nint stpsv_(char *uplo, char *trans, char *diag, int *n, float *ap,\n           float *x, int *incx);\n\nint strmm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, float *alpha, float *a, int *lda, float *b, \n           int *ldb);\n\nint strmv_(char *uplo, char *trans, char *diag, int *n, float *a,\n           int *lda, float *x, int *incx);\n\nint strsm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, float *alpha, float *a, int *lda, float *b, \n           int *ldb);\n\nint strsv_(char *uplo, char *trans, char *diag, int *n, float *a,\n           int *lda, float *x, int *incx);\n\nint zaxpy_(int *n, dcomplex *ca, dcomplex *cx, int *incx, dcomplex *cy,\n           int *incy);\n\nint zcopy_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);\n\nint zdscal_(int *n, double *sa, dcomplex *cx, int *incx);\n\nint zgbmv_(char *trans, int *m, int *n, int *kl, int *ku,\n           dcomplex *alpha, dcomplex *a, int *lda, dcomplex *x, int *incx,\n           dcomplex *beta, dcomplex *y, int *incy);\n\nint zgemm_(char *transa, char *transb, int *m, int *n, int *k,\n           dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b, int *ldb,\n           dcomplex *beta, dcomplex *c, int *ldc);\n\nint zgemv_(char *trans, int *m, int *n, dcomplex *alpha, dcomplex *a,\n           int *lda, dcomplex *x, int *incx, dcomplex *beta, dcomplex *y,\n           int *incy);\n\nint zgerc_(int *m, int *n, dcomplex *alpha, dcomplex *x, int *incx,\n           dcomplex *y, int *incy, dcomplex *a, int *lda);\n\nint zgeru_(int *m, int *n, dcomplex *alpha, dcomplex *x, int *incx,\n           dcomplex *y, int *incy, dcomplex *a, int *lda);\n\nint zhbmv_(char *uplo, int *n, int *k, dcomplex *alpha, dcomplex *a,\n           int *lda, dcomplex *x, int *incx, dcomplex *beta, dcomplex *y,\n           int *incy);\n\nint zhemm_(char *side, char *uplo, int *m, int *n, dcomplex *alpha,\n           dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta,\n           dcomplex *c, int *ldc);\n\nint zhemv_(char *uplo, int *n, dcomplex *alpha, dcomplex *a, int *lda,\n           dcomplex *x, int *incx, dcomplex *beta, dcomplex *y, int *incy);\n\nint zher_(char *uplo, int *n, double *alpha, dcomplex *x, int *incx,\n          dcomplex *a, int *lda);\n\nint zher2_(char *uplo, int *n, dcomplex *alpha, dcomplex *x, int *incx,\n           dcomplex *y, int *incy, dcomplex *a, int *lda);\n\nint zher2k_(char *uplo, char *trans, int *n, int *k, dcomplex *alpha,\n            dcomplex *a, int *lda, dcomplex *b, int *ldb, double *beta,\n            dcomplex *c, int *ldc);\n\nint zherk_(char *uplo, char *trans, int *n, int *k, double *alpha,\n           dcomplex *a, int *lda, double *beta, dcomplex *c, int *ldc);\n\nint zhpmv_(char *uplo, int *n, dcomplex *alpha, dcomplex *ap, dcomplex *x,\n           int *incx, dcomplex *beta, dcomplex *y, int *incy);\n\nint zhpr_(char *uplo, int *n, double *alpha, dcomplex *x, int *incx,\n          dcomplex *ap);\n\nint zhpr2_(char *uplo, int *n, dcomplex *alpha, dcomplex *x, int *incx,\n           dcomplex *y, int *incy, dcomplex *ap);\n\nint zrotg_(dcomplex *ca, dcomplex *cb, double *c, dcomplex *s);\n\nint zscal_(int *n, dcomplex *ca, dcomplex *cx, int *incx);\n\nint zswap_(int *n, dcomplex *cx, int *incx, dcomplex *cy, int *incy);\n\nint zsymm_(char *side, char *uplo, int *m, int *n, dcomplex *alpha,\n           dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta,\n           dcomplex *c, int *ldc);\n\nint zsyr2k_(char *uplo, char *trans, int *n, int *k, dcomplex *alpha,\n            dcomplex *a, int *lda, dcomplex *b, int *ldb, dcomplex *beta,\n            dcomplex *c, int *ldc);\n\nint zsyrk_(char *uplo, char *trans, int *n, int *k, dcomplex *alpha,\n           dcomplex *a, int *lda, dcomplex *beta, dcomplex *c, int *ldc);\n\nint ztbmv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           dcomplex *a, int *lda, dcomplex *x, int *incx);\n\nint ztbsv_(char *uplo, char *trans, char *diag, int *n, int *k,\n           dcomplex *a, int *lda, dcomplex *x, int *incx);\n\nint ztpmv_(char *uplo, char *trans, char *diag, int *n, dcomplex *ap,\n           dcomplex *x, int *incx);\n\nint ztpsv_(char *uplo, char *trans, char *diag, int *n, dcomplex *ap,\n           dcomplex *x, int *incx);\n\nint ztrmm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b,\n           int *ldb);\n\nint ztrmv_(char *uplo, char *trans, char *diag, int *n, dcomplex *a,\n           int *lda, dcomplex *x, int *incx);\n\nint ztrsm_(char *side, char *uplo, char *transa, char *diag, int *m,\n           int *n, dcomplex *alpha, dcomplex *a, int *lda, dcomplex *b,\n           int *ldb);\n\nint ztrsv_(char *uplo, char *trans, char *diag, int *n, dcomplex *a,\n           int *lda, dcomplex *x, int *incx);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/daxpy.c",
    "content": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint daxpy_(int *n, double *sa, double *sx, int *incx, double *sy,\n           int *incy)\n{\n  long int i, m, ix, iy, nn, iincx, iincy;\n  register double ssa;\n\n  /* constant times a vector plus a vector.   \n     uses unrolled loop for increments equal to one.   \n     jack dongarra, linpack, 3/11/78.   \n     modified 12/3/93, array(1) declarations changed to array(*) */\n\n  /* Dereference inputs */\n  nn = *n;\n  ssa = *sa;\n  iincx = *incx;\n  iincy = *incy;\n\n  if( nn > 0 && ssa != 0.0 )\n  {\n    if (iincx == 1 && iincy == 1) /* code for both increments equal to 1 */\n    {\n      m = nn-3;\n      for (i = 0; i < m; i += 4)\n      {\n        sy[i] += ssa * sx[i];\n        sy[i+1] += ssa * sx[i+1];\n        sy[i+2] += ssa * sx[i+2];\n        sy[i+3] += ssa * sx[i+3];\n      }\n      for ( ; i < nn; ++i) /* clean-up loop */\n        sy[i] += ssa * sx[i];\n    }\n    else /* code for unequal increments or equal increments not equal to 1 */\n    {\n      ix = iincx >= 0 ? 0 : (1 - nn) * iincx;\n      iy = iincy >= 0 ? 0 : (1 - nn) * iincy;\n      for (i = 0; i < nn; i++)\n      {\n        sy[iy] += ssa * sx[ix];\n        ix += iincx;\n        iy += iincy;\n      }\n    }\n  }\n\n  return 0;\n} /* daxpy_ */\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/ddot.c",
    "content": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ndouble ddot_(int *n, double *sx, int *incx, double *sy, int *incy)\n{\n  long int i, m, nn, iincx, iincy;\n  double stemp;\n  long int ix, iy;\n\n  /* forms the dot product of two vectors.   \n     uses unrolled loops for increments equal to one.   \n     jack dongarra, linpack, 3/11/78.   \n     modified 12/3/93, array(1) declarations changed to array(*) */\n\n  /* Dereference inputs */\n  nn = *n;\n  iincx = *incx;\n  iincy = *incy;\n\n  stemp = 0.0;\n  if (nn > 0)\n  {\n    if (iincx == 1 && iincy == 1) /* code for both increments equal to 1 */\n    {\n      m = nn-4;\n      for (i = 0; i < m; i += 5)\n        stemp += sx[i] * sy[i] + sx[i+1] * sy[i+1] + sx[i+2] * sy[i+2] +\n                 sx[i+3] * sy[i+3] + sx[i+4] * sy[i+4];\n\n      for ( ; i < nn; i++)        /* clean-up loop */\n        stemp += sx[i] * sy[i];\n    }\n    else /* code for unequal increments or equal increments not equal to 1 */\n    {\n      ix = 0;\n      iy = 0;\n      if (iincx < 0)\n        ix = (1 - nn) * iincx;\n      if (iincy < 0)\n        iy = (1 - nn) * iincy;\n      for (i = 0; i < nn; i++)\n      {\n        stemp += sx[ix] * sy[iy];\n        ix += iincx;\n        iy += iincy;\n      }\n    }\n  }\n\n  return stemp;\n} /* ddot_ */\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/dnrm2.c",
    "content": "#include <math.h>  /* Needed for fabs() and sqrt() */\n#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ndouble dnrm2_(int *n, double *x, int *incx)\n{\n  long int ix, nn, iincx;\n  double norm, scale, absxi, ssq, temp;\n\n/*  DNRM2 returns the euclidean norm of a vector via the function   \n    name, so that   \n\n       DNRM2 := sqrt( x'*x )   \n\n    -- This version written on 25-October-1982.   \n       Modified on 14-October-1993 to inline the call to SLASSQ.   \n       Sven Hammarling, Nag Ltd.   */\n\n  /* Dereference inputs */\n  nn = *n;\n  iincx = *incx;\n\n  if( nn > 0 && iincx > 0 )\n  {\n    if (nn == 1)\n    {\n      norm = fabs(x[0]);\n    }  \n    else\n    {\n      scale = 0.0;\n      ssq = 1.0;\n\n      /* The following loop is equivalent to this call to the LAPACK \n         auxiliary routine:   CALL SLASSQ( N, X, INCX, SCALE, SSQ ) */\n\n      for (ix=(nn-1)*iincx; ix>=0; ix-=iincx)\n      {\n        if (x[ix] != 0.0)\n        {\n          absxi = fabs(x[ix]);\n          if (scale < absxi)\n          {\n            temp = scale / absxi;\n            ssq = ssq * (temp * temp) + 1.0;\n            scale = absxi;\n          }\n          else\n          {\n            temp = absxi / scale;\n            ssq += temp * temp;\n          }\n        }\n      }\n      norm = scale * sqrt(ssq);\n    }\n  }\n  else\n    norm = 0.0;\n\n  return norm;\n\n} /* dnrm2_ */\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/dscal.c",
    "content": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint dscal_(int *n, double *sa, double *sx, int *incx)\n{\n  long int i, m, nincx, nn, iincx;\n  double ssa;\n\n  /* scales a vector by a constant.   \n     uses unrolled loops for increment equal to 1.   \n     jack dongarra, linpack, 3/11/78.   \n     modified 3/93 to return if incx .le. 0.   \n     modified 12/3/93, array(1) declarations changed to array(*) */\n\n  /* Dereference inputs */\n  nn = *n;\n  iincx = *incx;\n  ssa = *sa;\n\n  if (nn > 0 && iincx > 0)\n  {\n    if (iincx == 1) /* code for increment equal to 1 */\n    {\n      m = nn-4;\n      for (i = 0; i < m; i += 5)\n      {\n        sx[i] = ssa * sx[i];\n        sx[i+1] = ssa * sx[i+1];\n        sx[i+2] = ssa * sx[i+2];\n        sx[i+3] = ssa * sx[i+3];\n        sx[i+4] = ssa * sx[i+4];\n      }\n      for ( ; i < nn; ++i) /* clean-up loop */\n        sx[i] = ssa * sx[i];\n    }\n    else /* code for increment not equal to 1 */\n    {\n      nincx = nn * iincx;\n      for (i = 0; i < nincx; i += iincx)\n        sx[i] = ssa * sx[i];\n    }\n  }\n\n  return 0;\n} /* dscal_ */\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/liblinear-1.96/heart_scale",
    "content": "+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1 \n-1 1:0.583333 2:-1 3:0.333333 4:-0.603774 5:1 6:-1 7:1 8:0.358779 9:-1 10:-0.483871 12:-1 13:1 \n+1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1 \n-1 1:0.458333 2:1 3:1 4:-0.358491 5:-0.374429 6:-1 7:-1 8:-0.480916 9:1 10:-0.935484 12:-0.333333 13:1 \n-1 1:0.875 2:-1 3:-0.333333 4:-0.509434 5:-0.347032 6:-1 7:1 8:-0.236641 9:1 10:-0.935484 11:-1 12:-0.333333 13:-1 \n-1 1:0.5 2:1 3:1 4:-0.509434 5:-0.767123 6:-1 7:-1 8:0.0534351 9:-1 10:-0.870968 11:-1 12:-1 13:1 \n+1 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5 \n+1 1:0.25 2:1 3:1 4:-0.698113 5:-0.484018 6:-1 7:1 8:0.0839695 9:1 10:-0.612903 12:-0.333333 13:1 \n+1 1:0.291667 2:1 3:1 4:-0.132075 5:-0.237443 6:-1 7:1 8:0.51145 9:-1 10:-0.612903 12:0.333333 13:1 \n+1 1:0.416667 2:-1 3:1 4:0.0566038 5:0.283105 6:-1 7:1 8:0.267176 9:-1 10:0.290323 12:1 13:1 \n-1 1:0.25 2:1 3:1 4:-0.226415 5:-0.506849 6:-1 7:-1 8:0.374046 9:-1 10:-0.83871 12:-1 13:1 \n-1 2:1 3:1 4:-0.0943396 5:-0.543379 6:-1 7:1 8:-0.389313 9:1 10:-1 11:-1 12:-1 13:1 \n-1 1:-0.375 2:1 3:0.333333 4:-0.132075 5:-0.502283 6:-1 7:1 8:0.664122 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1 \n-1 1:0.166667 2:-1 3:1 4:-0.358491 5:-0.191781 6:-1 7:1 8:0.343511 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:0.75 2:-1 3:1 4:-0.660377 5:-0.894977 6:-1 7:-1 8:-0.175573 9:-1 10:-0.483871 12:-1 13:-1 \n+1 1:-0.291667 2:1 3:1 4:-0.132075 5:-0.155251 6:-1 7:-1 8:-0.251908 9:1 10:-0.419355 12:0.333333 13:1 \n+1 2:1 3:1 4:-0.132075 5:-0.648402 6:1 7:1 8:0.282443 9:1 11:1 12:-1 13:1 \n-1 1:0.458333 2:1 3:-1 4:-0.698113 5:-0.611872 6:-1 7:1 8:0.114504 9:1 10:-0.419355 12:-1 13:-1 \n-1 1:-0.541667 2:1 3:-1 4:-0.132075 5:-0.666667 6:-1 7:-1 8:0.633588 9:1 10:-0.548387 11:-1 12:-1 13:1 \n+1 1:0.583333 2:1 3:1 4:-0.509434 5:-0.52968 6:-1 7:1 8:-0.114504 9:1 10:-0.16129 12:0.333333 13:1 \n-1 1:-0.208333 2:1 3:-0.333333 4:-0.320755 5:-0.456621 6:-1 7:1 8:0.664122 9:-1 10:-0.935484 12:-1 13:-1 \n-1 1:-0.416667 2:1 3:1 4:-0.603774 5:-0.191781 6:-1 7:-1 8:0.679389 9:-1 10:-0.612903 12:-1 13:-1 \n-1 1:-0.25 2:1 3:1 4:-0.660377 5:-0.643836 6:-1 7:-1 8:0.0992366 9:-1 10:-0.967742 11:-1 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:-0.333333 4:-0.283019 5:-0.260274 6:1 7:1 8:0.343511 9:1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:-0.208333 2:-1 3:0.333333 4:-0.320755 5:-0.319635 6:-1 7:-1 8:0.0381679 9:-1 10:-0.935484 11:-1 12:-1 13:-1 \n-1 1:-0.291667 2:-1 3:1 4:-0.169811 5:-0.465753 6:-1 7:1 8:0.236641 9:1 10:-1 12:-1 13:-1 \n-1 1:-0.0833333 2:-1 3:0.333333 4:-0.509434 5:-0.228311 6:-1 7:1 8:0.312977 9:-1 10:-0.806452 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1 \n-1 1:0.75 2:-1 3:0.333333 4:-0.698113 5:-0.365297 6:1 7:1 8:-0.0992366 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.166667 2:1 3:0.333333 4:-0.358491 5:-0.52968 6:-1 7:1 8:0.206107 9:-1 10:-0.870968 12:-0.333333 13:1 \n-1 1:0.541667 2:1 3:1 4:0.245283 5:-0.534247 6:-1 7:1 8:0.0229008 9:-1 10:-0.258065 11:-1 12:-1 13:0.5 \n-1 1:-0.666667 2:-1 3:0.333333 4:-0.509434 5:-0.593607 6:-1 7:-1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.25 2:1 3:1 4:0.433962 5:-0.086758 6:-1 7:1 8:0.0534351 9:1 10:0.0967742 11:1 12:-1 13:1 \n+1 1:-0.125 2:1 3:1 4:-0.0566038 5:-0.6621 6:-1 7:1 8:-0.160305 9:1 10:-0.709677 12:-1 13:1 \n+1 1:-0.208333 2:1 3:1 4:-0.320755 5:-0.406393 6:1 7:1 8:0.206107 9:1 10:-1 11:-1 12:0.333333 13:1 \n+1 1:0.333333 2:1 3:1 4:-0.132075 5:-0.630137 6:-1 7:1 8:0.0229008 9:1 10:-0.387097 11:-1 12:-0.333333 13:1 \n+1 1:0.25 2:1 3:-1 4:0.245283 5:-0.328767 6:-1 7:1 8:-0.175573 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:1 3:0.333333 4:-0.320755 5:-0.753425 6:-1 7:-1 8:0.206107 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.208333 2:1 3:1 4:-0.471698 5:-0.561644 6:-1 7:1 8:0.755725 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.541667 2:1 3:1 4:0.0943396 5:-0.557078 6:-1 7:-1 8:0.679389 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:0.375 2:-1 3:1 4:-0.433962 5:-0.621005 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.375 2:1 3:0.333333 4:-0.320755 5:-0.511416 6:-1 7:-1 8:0.648855 9:1 10:-0.870968 11:-1 12:-1 13:-1 \n-1 1:-0.291667 2:1 3:-0.333333 4:-0.867925 5:-0.675799 6:1 7:-1 8:0.29771 9:-1 10:-1 11:-1 12:-1 13:1 \n+1 1:0.25 2:1 3:0.333333 4:-0.396226 5:-0.579909 6:1 7:-1 8:-0.0381679 9:-1 10:-0.290323 12:-0.333333 13:0.5 \n-1 1:0.208333 2:1 3:0.333333 4:-0.132075 5:-0.611872 6:1 7:1 8:0.435115 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.166667 2:1 3:0.333333 4:-0.54717 5:-0.894977 6:-1 7:1 8:-0.160305 9:-1 10:-0.741935 11:-1 12:1 13:-1 \n+1 1:-0.375 2:1 3:1 4:-0.698113 5:-0.675799 6:-1 7:1 8:0.618321 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.541667 2:1 3:-0.333333 4:0.245283 5:-0.452055 6:-1 7:-1 8:-0.251908 9:1 10:-1 12:1 13:0.5 \n+1 1:0.5 2:-1 3:1 4:0.0566038 5:-0.547945 6:-1 7:1 8:-0.343511 9:-1 10:-0.677419 12:1 13:1 \n+1 1:-0.458333 2:1 3:1 4:-0.207547 5:-0.136986 6:-1 7:-1 8:-0.175573 9:1 10:-0.419355 12:-1 13:0.5 \n-1 1:-0.0416667 2:1 3:-0.333333 4:-0.358491 5:-0.639269 6:1 7:-1 8:0.725191 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.5 2:-1 3:0.333333 4:-0.132075 5:0.328767 6:1 7:1 8:0.312977 9:-1 10:-0.741935 11:-1 12:-0.333333 13:-1 \n-1 1:0.416667 2:-1 3:-0.333333 4:-0.132075 5:-0.684932 6:-1 7:-1 8:0.648855 9:-1 10:-1 11:-1 12:0.333333 13:-1 \n-1 1:-0.333333 2:-1 3:-0.333333 4:-0.320755 5:-0.506849 6:-1 7:1 8:0.587786 9:-1 10:-0.806452 12:-1 13:-1 \n-1 1:-0.5 2:-1 3:-0.333333 4:-0.792453 5:-0.671233 6:-1 7:-1 8:0.480916 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.333333 2:1 3:1 4:-0.169811 5:-0.817352 6:-1 7:1 8:-0.175573 9:1 10:0.16129 12:-0.333333 13:-1 \n-1 1:0.291667 2:-1 3:0.333333 4:-0.509434 5:-0.762557 6:1 7:-1 8:-0.618321 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.25 2:-1 3:1 4:0.509434 5:-0.438356 6:-1 7:-1 8:0.0992366 9:1 10:-1 12:-1 13:-1 \n+1 1:0.375 2:1 3:-0.333333 4:-0.509434 5:-0.292237 6:-1 7:1 8:-0.51145 9:-1 10:-0.548387 12:-0.333333 13:1 \n-1 1:0.166667 2:1 3:0.333333 4:0.0566038 5:-1 6:1 7:-1 8:0.557252 9:-1 10:-0.935484 11:-1 12:-0.333333 13:1 \n+1 1:-0.0833333 2:-1 3:1 4:-0.320755 5:-0.182648 6:-1 7:-1 8:0.0839695 9:1 10:-0.612903 12:-1 13:1 \n-1 1:-0.375 2:1 3:0.333333 4:-0.509434 5:-0.543379 6:-1 7:-1 8:0.496183 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.291667 2:-1 3:-1 4:0.0566038 5:-0.479452 6:-1 7:-1 8:0.526718 9:-1 10:-0.709677 11:-1 12:-1 13:-1 \n-1 1:0.416667 2:1 3:-1 4:-0.0377358 5:-0.511416 6:1 7:1 8:0.206107 9:-1 10:-0.258065 11:1 12:-1 13:0.5 \n+1 1:0.166667 2:1 3:1 4:0.0566038 5:-0.315068 6:-1 7:1 8:-0.374046 9:1 10:-0.806452 12:-0.333333 13:0.5 \n-1 1:-0.0833333 2:1 3:1 4:-0.132075 5:-0.383562 6:-1 7:1 8:0.755725 9:1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:-1 3:-0.333333 4:-0.207547 5:-0.118721 6:1 7:1 8:0.236641 9:-1 10:-1 11:-1 12:0.333333 13:-1 \n-1 1:-0.375 2:-1 3:0.333333 4:-0.54717 5:-0.47032 6:-1 7:-1 8:0.19084 9:-1 10:-0.903226 12:-0.333333 13:-1 \n+1 1:-0.25 2:1 3:0.333333 4:-0.735849 5:-0.465753 6:-1 7:-1 8:0.236641 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.333333 2:1 3:1 4:-0.509434 5:-0.388128 6:-1 7:-1 8:0.0534351 9:1 10:0.16129 12:-0.333333 13:1 \n-1 1:0.166667 2:-1 3:1 4:-0.509434 5:0.0410959 6:-1 7:-1 8:0.40458 9:1 10:-0.806452 11:-1 12:-1 13:-1 \n-1 1:0.708333 2:1 3:-0.333333 4:0.169811 5:-0.456621 6:-1 7:1 8:0.0992366 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.958333 2:-1 3:0.333333 4:-0.132075 5:-0.675799 6:-1 8:-0.312977 9:-1 10:-0.645161 12:-1 13:-1 \n-1 1:0.583333 2:-1 3:1 4:-0.773585 5:-0.557078 6:-1 7:-1 8:0.0839695 9:-1 10:-0.903226 11:-1 12:0.333333 13:-1 \n+1 1:-0.333333 2:1 3:1 4:-0.0943396 5:-0.164384 6:-1 7:1 8:0.160305 9:1 10:-1 12:1 13:1 \n-1 1:-0.333333 2:1 3:1 4:-0.811321 5:-0.625571 6:-1 7:1 8:0.175573 9:1 10:-0.0322581 12:-1 13:-1 \n-1 1:-0.583333 2:-1 3:0.333333 4:-1 5:-0.666667 6:-1 7:-1 8:0.648855 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:-1 3:0.333333 4:-0.509434 5:-0.621005 6:-1 7:-1 8:0.557252 9:-1 10:-1 12:-1 13:-1 \n-1 1:0.125 2:1 3:-0.333333 4:-0.509434 5:-0.497717 6:-1 7:-1 8:0.633588 9:-1 10:-0.741935 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.0188679 5:-0.579909 6:-1 7:-1 8:-0.480916 9:-1 10:-0.354839 12:-0.333333 13:1 \n+1 1:-0.75 2:1 3:1 4:-0.509434 5:-0.671233 6:-1 7:-1 8:-0.0992366 9:1 10:-0.483871 12:-1 13:1 \n+1 1:0.208333 2:1 3:1 4:0.0566038 5:-0.342466 6:-1 7:1 8:-0.389313 9:1 10:-0.741935 11:-1 12:-1 13:1 \n-1 1:-0.5 2:1 3:0.333333 4:-0.320755 5:-0.598174 6:-1 7:1 8:0.480916 9:-1 10:-0.354839 12:-1 13:-1 \n-1 1:0.166667 2:1 3:1 4:-0.698113 5:-0.657534 6:-1 7:-1 8:-0.160305 9:1 10:-0.516129 12:-1 13:0.5 \n-1 1:-0.458333 2:1 3:-1 4:0.0188679 5:-0.461187 6:-1 7:1 8:0.633588 9:-1 10:-0.741935 11:-1 12:0.333333 13:-1 \n-1 1:0.375 2:1 3:-0.333333 4:-0.358491 5:-0.625571 6:1 7:1 8:0.0534351 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.25 2:1 3:-1 4:0.584906 5:-0.342466 6:-1 7:1 8:0.129771 9:-1 10:0.354839 11:1 12:-1 13:1 \n-1 1:-0.5 2:-1 3:-0.333333 4:-0.396226 5:-0.178082 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.125 2:1 3:1 4:0.0566038 5:-0.465753 6:-1 7:1 8:-0.129771 9:-1 10:-0.16129 12:-1 13:1 \n-1 1:0.25 2:1 3:-0.333333 4:-0.132075 5:-0.56621 6:-1 7:-1 8:0.419847 9:1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.333333 2:-1 3:1 4:-0.320755 5:-0.0684932 6:-1 7:1 8:0.496183 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.0416667 2:1 3:1 4:-0.433962 5:-0.360731 6:-1 7:1 8:-0.419847 9:1 10:-0.290323 12:-0.333333 13:1 \n+1 1:0.0416667 2:1 3:1 4:-0.698113 5:-0.634703 6:-1 7:1 8:-0.435115 9:1 10:-1 12:-0.333333 13:-1 \n+1 1:-0.0416667 2:1 3:1 4:-0.415094 5:-0.607306 6:-1 7:-1 8:0.480916 9:-1 10:-0.677419 11:-1 12:0.333333 13:1 \n+1 1:-0.25 2:1 3:1 4:-0.698113 5:-0.319635 6:-1 7:1 8:-0.282443 9:1 10:-0.677419 12:-0.333333 13:-1 \n-1 1:0.541667 2:1 3:1 4:-0.509434 5:-0.196347 6:-1 7:1 8:0.221374 9:-1 10:-0.870968 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.886792 5:-0.506849 6:-1 7:-1 8:0.29771 9:-1 10:-0.967742 11:-1 12:-0.333333 13:1 \n-1 1:0.458333 2:-1 3:0.333333 4:-0.132075 5:-0.146119 6:-1 7:-1 8:-0.0534351 9:-1 10:-0.935484 11:-1 12:-1 13:1 \n-1 1:-0.125 2:-1 3:-0.333333 4:-0.509434 5:-0.461187 6:-1 7:-1 8:0.389313 9:-1 10:-0.645161 11:-1 12:-1 13:-1 \n-1 1:-0.375 2:-1 3:0.333333 4:-0.735849 5:-0.931507 6:-1 7:-1 8:0.587786 9:-1 10:-0.806452 12:-1 13:-1 \n+1 1:0.583333 2:1 3:1 4:-0.509434 5:-0.493151 6:-1 7:-1 8:-1 9:-1 10:-0.677419 12:-1 13:-1 \n-1 1:-0.166667 2:-1 3:1 4:-0.320755 5:-0.347032 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.166667 2:1 3:1 4:0.339623 5:-0.255708 6:1 7:1 8:-0.19084 9:-1 10:-0.677419 12:1 13:1 \n+1 1:0.416667 2:1 3:1 4:-0.320755 5:-0.415525 6:-1 7:1 8:0.160305 9:-1 10:-0.548387 12:-0.333333 13:1 \n+1 1:-0.208333 2:1 3:1 4:-0.433962 5:-0.324201 6:-1 7:1 8:0.450382 9:-1 10:-0.83871 12:-1 13:1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-0.886792 5:-0.561644 6:-1 7:-1 8:0.0992366 9:1 10:-0.612903 12:-1 13:-1 \n+1 1:0.291667 2:-1 3:1 4:0.0566038 5:-0.39726 6:-1 7:1 8:0.312977 9:-1 10:-0.16129 12:0.333333 13:1 \n+1 1:0.25 2:1 3:1 4:-0.132075 5:-0.767123 6:-1 7:-1 8:0.389313 9:1 10:-1 11:-1 12:-0.333333 13:1 \n-1 1:-0.333333 2:-1 3:-0.333333 4:-0.660377 5:-0.844749 6:-1 7:-1 8:0.0229008 9:-1 10:-1 12:-1 13:-1 \n+1 1:0.0833333 2:-1 3:1 4:0.622642 5:-0.0821918 6:-1 8:-0.29771 9:1 10:0.0967742 12:-1 13:-1 \n-1 1:-0.5 2:1 3:-0.333333 4:-0.698113 5:-0.502283 6:-1 7:-1 8:0.251908 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.291667 2:-1 3:1 4:0.207547 5:-0.182648 6:-1 7:1 8:0.374046 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:-0.226415 5:-0.187215 6:1 7:-1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:1 3:-0.333333 4:-0.509434 5:-0.228311 6:-1 7:-1 8:0.389313 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.166667 2:-1 3:-0.333333 4:-0.245283 5:-0.3379 6:-1 7:-1 8:0.389313 9:-1 10:-1 12:-1 13:-1 \n+1 1:-0.291667 2:1 3:1 4:-0.509434 5:-0.438356 6:-1 7:1 8:0.114504 9:-1 10:-0.741935 11:-1 12:-1 13:1 \n+1 1:0.125 2:-1 3:1 4:1 5:-0.260274 6:1 7:1 8:-0.0534351 9:1 10:0.290323 11:1 12:0.333333 13:1 \n-1 1:0.541667 2:-1 3:-1 4:0.0566038 5:-0.543379 6:-1 7:-1 8:-0.343511 9:-1 10:-0.16129 11:1 12:-1 13:-1 \n+1 1:0.125 2:1 3:1 4:-0.320755 5:-0.283105 6:1 7:1 8:-0.51145 9:1 10:-0.483871 11:1 12:-1 13:1 \n+1 1:-0.166667 2:1 3:0.333333 4:-0.509434 5:-0.716895 6:-1 7:-1 8:0.0381679 9:-1 10:-0.354839 12:1 13:1 \n+1 1:0.0416667 2:1 3:1 4:-0.471698 5:-0.269406 6:-1 7:1 8:-0.312977 9:1 10:0.0322581 12:0.333333 13:-1 \n+1 1:0.166667 2:1 3:1 4:0.0943396 5:-0.324201 6:-1 7:-1 8:-0.740458 9:1 10:-0.612903 12:-0.333333 13:1 \n-1 1:0.5 2:-1 3:0.333333 4:0.245283 5:0.0684932 6:-1 7:1 8:0.221374 9:-1 10:-0.741935 11:-1 12:-1 13:-1 \n-1 1:0.0416667 2:1 3:0.333333 4:-0.415094 5:-0.328767 6:-1 7:1 8:0.236641 9:-1 10:-0.83871 11:1 12:-0.333333 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:0.245283 5:-0.657534 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.375 2:1 3:1 4:-0.509434 5:-0.356164 6:-1 7:-1 8:-0.572519 9:1 10:-0.419355 12:0.333333 13:1 \n-1 1:-0.0416667 2:-1 3:0.333333 4:-0.207547 5:-0.680365 6:-1 7:1 8:0.496183 9:-1 10:-0.967742 12:-1 13:-1 \n-1 1:-0.0416667 2:1 3:-0.333333 4:-0.245283 5:-0.657534 6:-1 7:-1 8:0.328244 9:-1 10:-0.741935 11:-1 12:-0.333333 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.566038 5:-0.525114 6:1 7:-1 8:0.358779 9:1 10:-0.548387 11:-1 12:0.333333 13:1 \n+1 1:0.416667 2:-1 3:1 4:-0.735849 5:-0.347032 6:-1 7:-1 8:0.496183 9:1 10:-0.419355 12:0.333333 13:-1 \n+1 1:0.541667 2:1 3:1 4:-0.660377 5:-0.607306 6:-1 7:1 8:-0.0687023 9:1 10:-0.967742 11:-1 12:-0.333333 13:-1 \n-1 1:-0.458333 2:1 3:1 4:-0.132075 5:-0.543379 6:-1 7:-1 8:0.633588 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.458333 2:1 3:1 4:-0.509434 5:-0.452055 6:-1 7:1 8:-0.618321 9:1 10:-0.290323 11:1 12:-0.333333 13:-1 \n-1 1:0.0416667 2:1 3:0.333333 4:0.0566038 5:-0.515982 6:-1 7:1 8:0.435115 9:-1 10:-0.483871 11:-1 12:-1 13:1 \n-1 1:-0.291667 2:-1 3:0.333333 4:-0.0943396 5:-0.767123 6:-1 7:1 8:0.358779 9:1 10:-0.548387 11:1 12:-1 13:-1 \n-1 1:0.583333 2:-1 3:0.333333 4:0.0943396 5:-0.310502 6:-1 7:-1 8:0.541985 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.125 2:1 3:1 4:-0.415094 5:-0.438356 6:1 7:1 8:0.114504 9:1 10:-0.612903 12:-0.333333 13:-1 \n-1 1:-0.791667 2:-1 3:-0.333333 4:-0.54717 5:-0.616438 6:-1 7:-1 8:0.847328 9:-1 10:-0.774194 11:-1 12:-1 13:-1 \n-1 1:0.166667 2:1 3:1 4:-0.283019 5:-0.630137 6:-1 7:-1 8:0.480916 9:1 10:-1 11:-1 12:-1 13:1 \n+1 1:0.458333 2:1 3:1 4:-0.0377358 5:-0.607306 6:-1 7:1 8:-0.0687023 9:-1 10:-0.354839 12:0.333333 13:0.5 \n-1 1:0.25 2:1 3:1 4:-0.169811 5:-0.3379 6:-1 7:1 8:0.694656 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.125 2:1 3:0.333333 4:-0.132075 5:-0.511416 6:-1 7:-1 8:0.40458 9:-1 10:-0.806452 12:-0.333333 13:1 \n-1 1:-0.0833333 2:1 3:-1 4:-0.415094 5:-0.60274 6:-1 7:1 8:-0.175573 9:1 10:-0.548387 11:-1 12:-0.333333 13:-1 \n+1 1:0.0416667 2:1 3:-0.333333 4:0.849057 5:-0.283105 6:-1 7:1 8:0.89313 9:-1 10:-1 11:-1 12:-0.333333 13:1 \n+1 2:1 3:1 4:-0.45283 5:-0.287671 6:-1 7:-1 8:-0.633588 9:1 10:-0.354839 12:0.333333 13:1 \n+1 1:-0.0416667 2:1 3:1 4:-0.660377 5:-0.525114 6:-1 7:-1 8:0.358779 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:-0.541667 2:1 3:1 4:-0.698113 5:-0.812785 6:-1 7:1 8:-0.343511 9:1 10:-0.354839 12:-1 13:1 \n+1 1:0.208333 2:1 3:0.333333 4:-0.283019 5:-0.552511 6:-1 7:1 8:0.557252 9:-1 10:0.0322581 11:-1 12:0.333333 13:1 \n-1 1:-0.5 2:-1 3:0.333333 4:-0.660377 5:-0.351598 6:-1 7:1 8:0.541985 9:1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.5 2:1 3:0.333333 4:-0.660377 5:-0.43379 6:-1 7:-1 8:0.648855 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.125 2:-1 3:0.333333 4:-0.509434 5:-0.575342 6:-1 7:-1 8:0.328244 9:-1 10:-0.483871 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:-0.735849 5:-0.356164 6:-1 7:1 8:0.465649 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.458333 2:-1 3:1 4:-0.320755 5:-0.191781 6:-1 7:-1 8:-0.221374 9:-1 10:-0.354839 12:0.333333 13:-1 \n-1 1:-0.0833333 2:-1 3:0.333333 4:-0.320755 5:-0.406393 6:-1 7:1 8:0.19084 9:-1 10:-0.83871 11:-1 12:-1 13:-1 \n-1 1:-0.291667 2:-1 3:-0.333333 4:-0.792453 5:-0.643836 6:-1 7:-1 8:0.541985 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.0833333 2:1 3:1 4:-0.132075 5:-0.584475 6:-1 7:-1 8:-0.389313 9:1 10:0.806452 11:1 12:-1 13:1 \n-1 1:-0.333333 2:1 3:-0.333333 4:-0.358491 5:-0.16895 6:-1 7:1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.125 2:1 3:-1 4:-0.509434 5:-0.694064 6:-1 7:1 8:0.389313 9:-1 10:-0.387097 12:-1 13:1 \n+1 1:0.541667 2:-1 3:1 4:0.584906 5:-0.534247 6:1 7:-1 8:0.435115 9:1 10:-0.677419 12:0.333333 13:1 \n+1 1:-0.625 2:1 3:-1 4:-0.509434 5:-0.520548 6:-1 7:-1 8:0.694656 9:1 10:0.225806 12:-1 13:1 \n+1 1:0.375 2:-1 3:1 4:0.0566038 5:-0.461187 6:-1 7:-1 8:0.267176 9:1 10:-0.548387 12:-1 13:-1 \n-1 1:0.0833333 2:1 3:-0.333333 4:-0.320755 5:-0.378995 6:-1 7:-1 8:0.282443 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.358491 5:-0.392694 6:-1 7:1 8:-0.0992366 9:1 10:-0.0322581 12:0.333333 13:1 \n-1 1:-0.416667 2:1 3:1 4:-0.698113 5:-0.611872 6:-1 7:-1 8:0.374046 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:0.458333 2:-1 3:1 4:0.622642 5:-0.0913242 6:-1 7:-1 8:0.267176 9:1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.125 2:-1 3:1 4:-0.698113 5:-0.415525 6:-1 7:1 8:0.343511 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 2:1 3:0.333333 4:-0.320755 5:-0.675799 6:1 7:1 8:0.236641 9:-1 10:-0.612903 11:1 12:-1 13:-1 \n-1 1:-0.333333 2:-1 3:1 4:-0.169811 5:-0.497717 6:-1 7:1 8:0.236641 9:1 10:-0.935484 12:-1 13:-1 \n+1 1:0.5 2:1 3:-1 4:-0.169811 5:-0.287671 6:1 7:1 8:0.572519 9:-1 10:-0.548387 12:-0.333333 13:-1 \n-1 1:0.666667 2:1 3:-1 4:0.245283 5:-0.506849 6:1 7:1 8:-0.0839695 9:-1 10:-0.967742 12:-0.333333 13:-1 \n+1 1:0.666667 2:1 3:0.333333 4:-0.132075 5:-0.415525 6:-1 7:1 8:0.145038 9:-1 10:-0.354839 12:1 13:1 \n+1 1:0.583333 2:1 3:1 4:-0.886792 5:-0.210046 6:-1 7:1 8:-0.175573 9:1 10:-0.709677 12:0.333333 13:-1 \n-1 1:0.625 2:-1 3:0.333333 4:-0.509434 5:-0.611872 6:-1 7:1 8:-0.328244 9:-1 10:-0.516129 12:-1 13:-1 \n-1 1:-0.791667 2:1 3:-1 4:-0.54717 5:-0.744292 6:-1 7:1 8:0.572519 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.375 2:-1 3:1 4:-0.169811 5:-0.232877 6:1 7:-1 8:-0.465649 9:-1 10:-0.387097 12:1 13:-1 \n+1 1:-0.0833333 2:1 3:1 4:-0.132075 5:-0.214612 6:-1 7:-1 8:-0.221374 9:1 10:0.354839 12:1 13:1 \n+1 1:-0.291667 2:1 3:0.333333 4:0.0566038 5:-0.520548 6:-1 7:-1 8:0.160305 9:-1 10:0.16129 12:-1 13:-1 \n+1 1:0.583333 2:1 3:1 4:-0.415094 5:-0.415525 6:1 7:-1 8:0.40458 9:-1 10:-0.935484 12:0.333333 13:1 \n-1 1:-0.125 2:1 3:0.333333 4:-0.339623 5:-0.680365 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:1 3:0.333333 4:-0.509434 5:-0.479452 6:1 7:-1 8:0.877863 9:-1 10:-0.741935 11:1 12:-1 13:1 \n+1 1:0.125 2:-1 3:1 4:-0.245283 5:0.292237 6:-1 7:1 8:0.206107 9:1 10:-0.387097 12:0.333333 13:1 \n+1 1:-0.5 2:1 3:1 4:-0.698113 5:-0.789954 6:-1 7:1 8:0.328244 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:-0.458333 2:-1 3:1 4:-0.849057 5:-0.365297 6:-1 7:1 8:-0.221374 9:-1 10:-0.806452 12:-1 13:-1 \n-1 2:1 3:0.333333 4:-0.320755 5:-0.452055 6:1 7:1 8:0.557252 9:-1 10:-1 11:-1 12:1 13:-1 \n-1 1:-0.416667 2:1 3:0.333333 4:-0.320755 5:-0.136986 6:-1 7:-1 8:0.389313 9:-1 10:-0.387097 11:-1 12:-0.333333 13:-1 \n+1 1:0.125 2:1 3:1 4:-0.283019 5:-0.73516 6:-1 7:1 8:-0.480916 9:1 10:-0.322581 12:-0.333333 13:0.5 \n-1 1:-0.0416667 2:1 3:1 4:-0.735849 5:-0.511416 6:1 7:-1 8:0.160305 9:-1 10:-0.967742 11:-1 12:1 13:1 \n-1 1:0.375 2:-1 3:1 4:-0.132075 5:0.223744 6:-1 7:1 8:0.312977 9:-1 10:-0.612903 12:-1 13:-1 \n+1 1:0.708333 2:1 3:0.333333 4:0.245283 5:-0.347032 6:-1 7:-1 8:-0.374046 9:1 10:-0.0645161 12:-0.333333 13:1 \n-1 1:0.0416667 2:1 3:1 4:-0.132075 5:-0.484018 6:-1 7:-1 8:0.358779 9:-1 10:-0.612903 11:-1 12:-1 13:-1 \n+1 1:0.708333 2:1 3:1 4:-0.0377358 5:-0.780822 6:-1 7:-1 8:-0.175573 9:1 10:-0.16129 11:1 12:-1 13:1 \n-1 1:0.0416667 2:1 3:-0.333333 4:-0.735849 5:-0.164384 6:-1 7:-1 8:0.29771 9:-1 10:-1 11:-1 12:-1 13:1 \n+1 1:-0.75 2:1 3:1 4:-0.396226 5:-0.287671 6:-1 7:1 8:0.29771 9:1 10:-1 11:-1 12:-1 13:1 \n-1 1:-0.208333 2:1 3:0.333333 4:-0.433962 5:-0.410959 6:1 7:-1 8:0.587786 9:-1 10:-1 11:-1 12:0.333333 13:-1 \n-1 1:0.0833333 2:-1 3:-0.333333 4:-0.226415 5:-0.43379 6:-1 7:1 8:0.374046 9:-1 10:-0.548387 12:-1 13:-1 \n-1 1:0.208333 2:-1 3:1 4:-0.886792 5:-0.442922 6:-1 7:1 8:-0.221374 9:-1 10:-0.677419 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:-0.698113 5:-0.598174 6:-1 7:-1 8:0.328244 9:-1 10:-0.483871 12:-1 13:-1 \n-1 1:0.666667 2:-1 3:-1 4:-0.132075 5:-0.484018 6:-1 7:-1 8:0.221374 9:-1 10:-0.419355 11:-1 12:0.333333 13:-1 \n+1 1:1 2:1 3:1 4:-0.415094 5:-0.187215 6:-1 7:1 8:0.389313 9:1 10:-1 11:-1 12:1 13:-1 \n-1 1:0.625 2:1 3:0.333333 4:-0.54717 5:-0.310502 6:-1 7:-1 8:0.221374 9:-1 10:-0.677419 11:-1 12:-0.333333 13:1 \n+1 1:0.208333 2:1 3:1 4:-0.415094 5:-0.205479 6:-1 7:1 8:0.526718 9:-1 10:-1 11:-1 12:0.333333 13:1 \n+1 1:0.291667 2:1 3:1 4:-0.415094 5:-0.39726 6:-1 7:1 8:0.0687023 9:1 10:-0.0967742 12:-0.333333 13:1 \n+1 1:-0.0833333 2:1 3:1 4:-0.132075 5:-0.210046 6:-1 7:-1 8:0.557252 9:1 10:-0.483871 11:-1 12:-1 13:1 \n+1 1:0.0833333 2:1 3:1 4:0.245283 5:-0.255708 6:-1 7:1 8:0.129771 9:1 10:-0.741935 12:-0.333333 13:1 \n-1 1:-0.0416667 2:1 3:-1 4:0.0943396 5:-0.214612 6:1 7:-1 8:0.633588 9:-1 10:-0.612903 12:-1 13:1 \n-1 1:0.291667 2:-1 3:0.333333 4:-0.849057 5:-0.123288 6:-1 7:-1 8:0.358779 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:0.208333 2:1 3:0.333333 4:-0.792453 5:-0.479452 6:-1 7:1 8:0.267176 9:1 10:-0.806452 12:-1 13:1 \n+1 1:0.458333 2:1 3:0.333333 4:-0.415094 5:-0.164384 6:-1 7:-1 8:-0.0839695 9:1 10:-0.419355 12:-1 13:1 \n-1 1:-0.666667 2:1 3:0.333333 4:-0.320755 5:-0.43379 6:-1 7:-1 8:0.770992 9:-1 10:0.129032 11:1 12:-1 13:-1 \n+1 1:0.25 2:1 3:-1 4:0.433962 5:-0.260274 6:-1 7:1 8:0.343511 9:-1 10:-0.935484 12:-1 13:1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-0.415094 5:-0.456621 6:1 7:1 8:0.450382 9:-1 10:-0.225806 12:-1 13:-1 \n-1 1:-0.416667 2:-1 3:0.333333 4:-0.471698 5:-0.60274 6:-1 7:-1 8:0.435115 9:-1 10:-0.935484 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.358491 5:-0.589041 6:-1 7:1 8:-0.0839695 9:1 10:-0.290323 12:1 13:1 \n-1 1:-1 2:1 3:-0.333333 4:-0.320755 5:-0.643836 6:-1 7:1 8:1 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.5 2:-1 3:-0.333333 4:-0.320755 5:-0.643836 6:-1 7:1 8:0.541985 9:-1 10:-0.548387 11:-1 12:-1 13:-1 \n-1 1:0.416667 2:-1 3:0.333333 4:-0.226415 5:-0.424658 6:-1 7:1 8:0.541985 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-1 5:-0.538813 6:-1 7:-1 8:0.267176 9:1 10:-1 11:-1 12:-0.333333 13:1 \n-1 1:0.0416667 2:1 3:0.333333 4:-0.509434 5:-0.39726 6:-1 7:1 8:0.160305 9:-1 10:-0.870968 12:-1 13:1 \n-1 1:-0.375 2:1 3:-0.333333 4:-0.509434 5:-0.570776 6:-1 7:-1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.0416667 2:1 3:1 4:-0.698113 5:-0.484018 6:-1 7:-1 8:-0.160305 9:1 10:-0.0967742 12:-0.333333 13:1 \n+1 1:0.5 2:1 3:1 4:-0.226415 5:-0.415525 6:-1 7:1 8:-0.145038 9:-1 10:-0.0967742 12:-0.333333 13:1 \n-1 1:0.166667 2:1 3:0.333333 4:0.0566038 5:-0.808219 6:-1 7:-1 8:0.572519 9:-1 10:-0.483871 11:-1 12:-1 13:-1 \n+1 1:0.416667 2:1 3:1 4:-0.320755 5:-0.0684932 6:1 7:1 8:-0.0687023 9:1 10:-0.419355 11:-1 12:1 13:1 \n-1 1:-0.75 2:-1 3:1 4:-0.169811 5:-0.739726 6:-1 7:-1 8:0.694656 9:-1 10:-0.548387 11:-1 12:-1 13:-1 \n-1 1:-0.5 2:1 3:-0.333333 4:-0.226415 5:-0.648402 6:-1 7:-1 8:-0.0687023 9:-1 10:-1 12:-1 13:0.5 \n+1 1:0.375 2:-1 3:0.333333 4:-0.320755 5:-0.374429 6:-1 7:-1 8:-0.603053 9:-1 10:-0.612903 12:-0.333333 13:1 \n+1 1:-0.416667 2:-1 3:1 4:-0.283019 5:-0.0182648 6:1 7:1 8:-0.00763359 9:1 10:-0.0322581 12:-1 13:1 \n-1 1:0.208333 2:-1 3:-1 4:0.0566038 5:-0.283105 6:1 7:1 8:0.389313 9:-1 10:-0.677419 11:-1 12:-1 13:-1 \n-1 1:-0.0416667 2:1 3:-1 4:-0.54717 5:-0.726027 6:-1 7:1 8:0.816794 9:-1 10:-1 12:-1 13:0.5 \n+1 1:0.333333 2:-1 3:1 4:-0.0377358 5:-0.173516 6:-1 7:1 8:0.145038 9:1 10:-0.677419 12:-1 13:1 \n+1 1:-0.583333 2:1 3:1 4:-0.54717 5:-0.575342 6:-1 7:-1 8:0.0534351 9:-1 10:-0.612903 12:-1 13:1 \n-1 1:-0.333333 2:1 3:1 4:-0.603774 5:-0.388128 6:-1 7:1 8:0.740458 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.0416667 2:1 3:1 4:-0.358491 5:-0.410959 6:-1 7:-1 8:0.374046 9:1 10:-1 11:-1 12:-0.333333 13:1 \n-1 1:0.375 2:1 3:0.333333 4:-0.320755 5:-0.520548 6:-1 7:-1 8:0.145038 9:-1 10:-0.419355 12:1 13:1 \n+1 1:0.375 2:-1 3:1 4:0.245283 5:-0.826484 6:-1 7:1 8:0.129771 9:-1 10:1 11:1 12:1 13:1 \n-1 2:-1 3:1 4:-0.169811 5:-0.506849 6:-1 7:1 8:0.358779 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.416667 2:1 3:1 4:-0.509434 5:-0.767123 6:-1 7:1 8:-0.251908 9:1 10:-0.193548 12:-1 13:1 \n-1 1:-0.25 2:1 3:0.333333 4:-0.169811 5:-0.401826 6:-1 7:1 8:0.29771 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.0416667 2:1 3:-0.333333 4:-0.509434 5:-0.0913242 6:-1 7:-1 8:0.541985 9:-1 10:-0.935484 11:-1 12:-1 13:-1 \n+1 1:0.625 2:1 3:0.333333 4:0.622642 5:-0.324201 6:1 7:1 8:0.206107 9:1 10:-0.483871 12:-1 13:1 \n-1 1:-0.583333 2:1 3:0.333333 4:-0.132075 5:-0.109589 6:-1 7:1 8:0.694656 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 2:-1 3:1 4:-0.320755 5:-0.369863 6:-1 7:1 8:0.0992366 9:-1 10:-0.870968 12:-1 13:-1 \n+1 1:0.375 2:-1 3:1 4:-0.132075 5:-0.351598 6:-1 7:1 8:0.358779 9:-1 10:0.16129 11:1 12:0.333333 13:-1 \n-1 1:-0.0833333 2:-1 3:0.333333 4:-0.132075 5:-0.16895 6:-1 7:1 8:0.0839695 9:-1 10:-0.516129 11:-1 12:-0.333333 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.320755 5:-0.420091 6:-1 7:-1 8:0.114504 9:1 10:-0.548387 11:-1 12:-0.333333 13:1 \n+1 1:0.5 2:1 3:1 4:-0.698113 5:-0.442922 6:-1 7:1 8:0.328244 9:-1 10:-0.806452 11:-1 12:0.333333 13:0.5 \n-1 1:0.5 2:-1 3:0.333333 4:0.150943 5:-0.347032 6:-1 7:-1 8:0.175573 9:-1 10:-0.741935 11:-1 12:-1 13:-1 \n+1 1:0.291667 2:1 3:0.333333 4:-0.132075 5:-0.730594 6:-1 7:1 8:0.282443 9:-1 10:-0.0322581 12:-1 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.0377358 5:-0.287671 6:-1 7:1 8:0.0839695 9:1 10:-0.0967742 12:0.333333 13:1 \n+1 1:0.0416667 2:1 3:1 4:-0.509434 5:-0.716895 6:-1 7:-1 8:-0.358779 9:-1 10:-0.548387 12:-0.333333 13:1 \n-1 1:-0.375 2:1 3:-0.333333 4:-0.320755 5:-0.575342 6:-1 7:1 8:0.78626 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.375 2:1 3:1 4:-0.660377 5:-0.251142 6:-1 7:1 8:0.251908 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-0.698113 5:-0.776256 6:-1 7:-1 8:-0.206107 9:-1 10:-0.806452 11:-1 12:-1 13:-1 \n-1 1:0.25 2:1 3:0.333333 4:0.0566038 5:-0.607306 6:1 7:-1 8:0.312977 9:-1 10:-0.483871 11:-1 12:-1 13:-1 \n-1 1:0.75 2:-1 3:-0.333333 4:0.245283 5:-0.196347 6:-1 7:-1 8:0.389313 9:-1 10:-0.870968 11:-1 12:0.333333 13:-1 \n-1 1:0.333333 2:1 3:0.333333 4:0.0566038 5:-0.465753 6:1 7:-1 8:0.00763359 9:1 10:-0.677419 12:-1 13:-1 \n+1 1:0.0833333 2:1 3:1 4:-0.283019 5:0.0365297 6:-1 7:-1 8:-0.0687023 9:1 10:-0.612903 12:-0.333333 13:1 \n+1 1:0.458333 2:1 3:0.333333 4:-0.132075 5:-0.0456621 6:-1 7:-1 8:0.328244 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.416667 2:1 3:1 4:0.0566038 5:-0.447489 6:-1 7:-1 8:0.526718 9:-1 10:-0.516129 11:-1 12:-1 13:-1 \n-1 1:0.208333 2:-1 3:0.333333 4:-0.509434 5:-0.0228311 6:-1 7:-1 8:0.541985 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.320755 5:-0.634703 6:-1 7:1 8:-0.0687023 9:1 10:-0.225806 12:0.333333 13:1 \n+1 1:0.208333 2:1 3:-0.333333 4:-0.509434 5:-0.278539 6:-1 7:1 8:0.358779 9:-1 10:-0.419355 12:-1 13:-1 \n-1 1:-0.166667 2:1 3:-0.333333 4:-0.320755 5:-0.360731 6:-1 7:-1 8:0.526718 9:-1 10:-0.806452 11:-1 12:-1 13:-1 \n+1 1:-0.208333 2:1 3:-0.333333 4:-0.698113 5:-0.52968 6:-1 7:-1 8:0.480916 9:-1 10:-0.677419 11:1 12:-1 13:1 \n-1 1:-0.0416667 2:1 3:0.333333 4:0.471698 5:-0.666667 6:1 7:-1 8:0.389313 9:-1 10:-0.83871 11:-1 12:-1 13:1 \n-1 1:-0.375 2:1 3:-0.333333 4:-0.509434 5:-0.374429 6:-1 7:-1 8:0.557252 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:0.125 2:-1 3:-0.333333 4:-0.132075 5:-0.232877 6:-1 7:1 8:0.251908 9:-1 10:-0.580645 12:-1 13:-1 \n-1 1:0.166667 2:1 3:1 4:-0.132075 5:-0.69863 6:-1 7:-1 8:0.175573 9:-1 10:-0.870968 12:-1 13:0.5 \n+1 1:0.583333 2:1 3:1 4:0.245283 5:-0.269406 6:-1 7:1 8:-0.435115 9:1 10:-0.516129 12:1 13:-1 \n"
  },
  {
    "path": "Matlab/liblinear-1.96/linear.cpp",
    "content": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <locale.h>\n#include \"linear.h\"\n#include \"tron.h\"\ntypedef signed char schar;\ntemplate <class T> static inline void swap(T& x, T& y) { T t=x; x=y; y=t; }\n#ifndef min\ntemplate <class T> static inline T min(T x,T y) { return (x<y)?x:y; }\n#endif\n#ifndef max\ntemplate <class T> static inline T max(T x,T y) { return (x>y)?x:y; }\n#endif\ntemplate <class S, class T> static inline void clone(T*& dst, S* src, int n)\n{\n\tdst = new T[n];\n\tmemcpy((void *)dst,(void *)src,sizeof(T)*n);\n}\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n#define INF HUGE_VAL\n\nstatic void print_string_stdout(const char *s)\n{\n\tfputs(s,stdout);\n\tfflush(stdout);\n}\n\nstatic void (*liblinear_print_string) (const char *) = &print_string_stdout;\n\n#if 1\nstatic void info(const char *fmt,...)\n{\n\tchar buf[BUFSIZ];\n\tva_list ap;\n\tva_start(ap,fmt);\n\tvsprintf(buf,fmt,ap);\n\tva_end(ap);\n\t(*liblinear_print_string)(buf);\n}\n#else\nstatic void info(const char *fmt,...) {}\n#endif\n\nclass l2r_lr_fun: public function\n{\npublic:\n\tl2r_lr_fun(const problem *prob, double *C);\n\t~l2r_lr_fun();\n\n\tdouble fun(double *w);\n\tvoid grad(double *w, double *g);\n\tvoid Hv(double *s, double *Hs);\n\n\tint get_nr_variable(void);\n\nprivate:\n\tvoid Xv(double *v, double *Xv);\n\tvoid XTv(double *v, double *XTv);\n\n\tdouble *C;\n\tdouble *z;\n\tdouble *D;\n\tconst problem *prob;\n};\n\nl2r_lr_fun::l2r_lr_fun(const problem *prob, double *C)\n{\n\tint l=prob->l;\n\n\tthis->prob = prob;\n\n\tz = new double[l];\n\tD = new double[l];\n\tthis->C = C;\n}\n\nl2r_lr_fun::~l2r_lr_fun()\n{\n\tdelete[] z;\n\tdelete[] D;\n}\n\n\ndouble l2r_lr_fun::fun(double *w)\n{\n\tint i;\n\tdouble f=0;\n\tdouble *y=prob->y;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\n\tXv(w, z);\n\n\tfor(i=0;i<w_size;i++)\n\t\tf += w[i]*w[i];\n\tf /= 2.0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tdouble yz = y[i]*z[i];\n\t\tif (yz >= 0)\n\t\t\tf += C[i]*log(1 + exp(-yz));\n\t\telse\n\t\t\tf += C[i]*(-yz+log(1 + exp(yz)));\n\t}\n\n\treturn(f);\n}\n\nvoid l2r_lr_fun::grad(double *w, double *g)\n{\n\tint i;\n\tdouble *y=prob->y;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tz[i] = 1/(1 + exp(-y[i]*z[i]));\n\t\tD[i] = z[i]*(1-z[i]);\n\t\tz[i] = C[i]*(z[i]-1)*y[i];\n\t}\n\tXTv(z, g);\n\n\tfor(i=0;i<w_size;i++)\n\t\tg[i] = w[i] + g[i];\n}\n\nint l2r_lr_fun::get_nr_variable(void)\n{\n\treturn prob->n;\n}\n\nvoid l2r_lr_fun::Hv(double *s, double *Hs)\n{\n\tint i;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\tdouble *wa = new double[l];\n\n\tXv(s, wa);\n\tfor(i=0;i<l;i++)\n\t\twa[i] = C[i]*D[i]*wa[i];\n\n\tXTv(wa, Hs);\n\tfor(i=0;i<w_size;i++)\n\t\tHs[i] = s[i] + Hs[i];\n\tdelete[] wa;\n}\n\nvoid l2r_lr_fun::Xv(double *v, double *Xv)\n{\n\tint i;\n\tint l=prob->l;\n\tfeature_node **x=prob->x;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tfeature_node *s=x[i];\n\t\tXv[i]=0;\n\t\twhile(s->index!=-1)\n\t\t{\n\t\t\tXv[i]+=v[s->index-1]*s->value;\n\t\t\ts++;\n\t\t}\n\t}\n}\n\nvoid l2r_lr_fun::XTv(double *v, double *XTv)\n{\n\tint i;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\tfeature_node **x=prob->x;\n\n\tfor(i=0;i<w_size;i++)\n\t\tXTv[i]=0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tfeature_node *s=x[i];\n\t\twhile(s->index!=-1)\n\t\t{\n\t\t\tXTv[s->index-1]+=v[i]*s->value;\n\t\t\ts++;\n\t\t}\n\t}\n}\n\nclass l2r_l2_svc_fun: public function\n{\npublic:\n\tl2r_l2_svc_fun(const problem *prob, double *C);\n\t~l2r_l2_svc_fun();\n\n\tdouble fun(double *w);\n\tvoid grad(double *w, double *g);\n\tvoid Hv(double *s, double *Hs);\n\n\tint get_nr_variable(void);\n\nprotected:\n\tvoid Xv(double *v, double *Xv);\n\tvoid subXv(double *v, double *Xv);\n\tvoid subXTv(double *v, double *XTv);\n\n\tdouble *C;\n\tdouble *z;\n\tdouble *D;\n\tint *I;\n\tint sizeI;\n\tconst problem *prob;\n};\n\nl2r_l2_svc_fun::l2r_l2_svc_fun(const problem *prob, double *C)\n{\n\tint l=prob->l;\n\n\tthis->prob = prob;\n\n\tz = new double[l];\n\tD = new double[l];\n\tI = new int[l];\n\tthis->C = C;\n}\n\nl2r_l2_svc_fun::~l2r_l2_svc_fun()\n{\n\tdelete[] z;\n\tdelete[] D;\n\tdelete[] I;\n}\n\ndouble l2r_l2_svc_fun::fun(double *w)\n{\n\tint i;\n\tdouble f=0;\n\tdouble *y=prob->y;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\n\tXv(w, z);\n\n\tfor(i=0;i<w_size;i++)\n\t\tf += w[i]*w[i];\n\tf /= 2.0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tz[i] = y[i]*z[i];\n\t\tdouble d = 1-z[i];\n\t\tif (d > 0)\n\t\t\tf += C[i]*d*d;\n\t}\n\n\treturn(f);\n}\n\nvoid l2r_l2_svc_fun::grad(double *w, double *g)\n{\n\tint i;\n\tdouble *y=prob->y;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\n\tsizeI = 0;\n\tfor (i=0;i<l;i++)\n\t\tif (z[i] < 1)\n\t\t{\n\t\t\tz[sizeI] = C[i]*y[i]*(z[i]-1);\n\t\t\tI[sizeI] = i;\n\t\t\tsizeI++;\n\t\t}\n\tsubXTv(z, g);\n\n\tfor(i=0;i<w_size;i++)\n\t\tg[i] = w[i] + 2*g[i];\n}\n\nint l2r_l2_svc_fun::get_nr_variable(void)\n{\n\treturn prob->n;\n}\n\nvoid l2r_l2_svc_fun::Hv(double *s, double *Hs)\n{\n\tint i;\n\tint w_size=get_nr_variable();\n\tdouble *wa = new double[sizeI];\n\n\tsubXv(s, wa);\n\tfor(i=0;i<sizeI;i++)\n\t\twa[i] = C[I[i]]*wa[i];\n\n\tsubXTv(wa, Hs);\n\tfor(i=0;i<w_size;i++)\n\t\tHs[i] = s[i] + 2*Hs[i];\n\tdelete[] wa;\n}\n\nvoid l2r_l2_svc_fun::Xv(double *v, double *Xv)\n{\n\tint i;\n\tint l=prob->l;\n\tfeature_node **x=prob->x;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tfeature_node *s=x[i];\n\t\tXv[i]=0;\n\t\twhile(s->index!=-1)\n\t\t{\n\t\t\tXv[i]+=v[s->index-1]*s->value;\n\t\t\ts++;\n\t\t}\n\t}\n}\n\nvoid l2r_l2_svc_fun::subXv(double *v, double *Xv)\n{\n\tint i;\n\tfeature_node **x=prob->x;\n\n\tfor(i=0;i<sizeI;i++)\n\t{\n\t\tfeature_node *s=x[I[i]];\n\t\tXv[i]=0;\n\t\twhile(s->index!=-1)\n\t\t{\n\t\t\tXv[i]+=v[s->index-1]*s->value;\n\t\t\ts++;\n\t\t}\n\t}\n}\n\nvoid l2r_l2_svc_fun::subXTv(double *v, double *XTv)\n{\n\tint i;\n\tint w_size=get_nr_variable();\n\tfeature_node **x=prob->x;\n\n\tfor(i=0;i<w_size;i++)\n\t\tXTv[i]=0;\n\tfor(i=0;i<sizeI;i++)\n\t{\n\t\tfeature_node *s=x[I[i]];\n\t\twhile(s->index!=-1)\n\t\t{\n\t\t\tXTv[s->index-1]+=v[i]*s->value;\n\t\t\ts++;\n\t\t}\n\t}\n}\n\nclass l2r_l2_svr_fun: public l2r_l2_svc_fun\n{\npublic:\n\tl2r_l2_svr_fun(const problem *prob, double *C, double p);\n\n\tdouble fun(double *w);\n\tvoid grad(double *w, double *g);\n\nprivate:\n\tdouble p;\n};\n\nl2r_l2_svr_fun::l2r_l2_svr_fun(const problem *prob, double *C, double p):\n\tl2r_l2_svc_fun(prob, C)\n{\n\tthis->p = p;\n}\n\ndouble l2r_l2_svr_fun::fun(double *w)\n{\n\tint i;\n\tdouble f=0;\n\tdouble *y=prob->y;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\tdouble d;\n\n\tXv(w, z);\n\n\tfor(i=0;i<w_size;i++)\n\t\tf += w[i]*w[i];\n\tf /= 2;\n\tfor(i=0;i<l;i++)\n\t{\n\t\td = z[i] - y[i];\n\t\tif(d < -p)\n\t\t\tf += C[i]*(d+p)*(d+p);\n\t\telse if(d > p)\n\t\t\tf += C[i]*(d-p)*(d-p);\n\t}\n\n\treturn(f);\n}\n\nvoid l2r_l2_svr_fun::grad(double *w, double *g)\n{\n\tint i;\n\tdouble *y=prob->y;\n\tint l=prob->l;\n\tint w_size=get_nr_variable();\n\tdouble d;\n\n\tsizeI = 0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\td = z[i] - y[i];\n\n\t\t// generate index set I\n\t\tif(d < -p)\n\t\t{\n\t\t\tz[sizeI] = C[i]*(d+p);\n\t\t\tI[sizeI] = i;\n\t\t\tsizeI++;\n\t\t}\n\t\telse if(d > p)\n\t\t{\n\t\t\tz[sizeI] = C[i]*(d-p);\n\t\t\tI[sizeI] = i;\n\t\t\tsizeI++;\n\t\t}\n\n\t}\n\tsubXTv(z, g);\n\n\tfor(i=0;i<w_size;i++)\n\t\tg[i] = w[i] + 2*g[i];\n}\n\n// A coordinate descent algorithm for \n// multi-class support vector machines by Crammer and Singer\n//\n//  min_{\\alpha}  0.5 \\sum_m ||w_m(\\alpha)||^2 + \\sum_i \\sum_m e^m_i alpha^m_i\n//    s.t.     \\alpha^m_i <= C^m_i \\forall m,i , \\sum_m \\alpha^m_i=0 \\forall i\n// \n//  where e^m_i = 0 if y_i  = m,\n//        e^m_i = 1 if y_i != m,\n//  C^m_i = C if m  = y_i, \n//  C^m_i = 0 if m != y_i, \n//  and w_m(\\alpha) = \\sum_i \\alpha^m_i x_i \n//\n// Given: \n// x, y, C\n// eps is the stopping tolerance\n//\n// solution will be put in w\n//\n// See Appendix of LIBLINEAR paper, Fan et al. (2008)\n\n#define GETI(i) ((int) prob->y[i])\n// To support weights for instances, use GETI(i) (i)\n\nclass Solver_MCSVM_CS\n{\n\tpublic:\n\t\tSolver_MCSVM_CS(const problem *prob, int nr_class, double *C, double eps=0.1, int max_iter=100000);\n\t\t~Solver_MCSVM_CS();\n\t\tvoid Solve(double *w);\n\tprivate:\n\t\tvoid solve_sub_problem(double A_i, int yi, double C_yi, int active_i, double *alpha_new);\n\t\tbool be_shrunk(int i, int m, int yi, double alpha_i, double minG);\n\t\tdouble *B, *C, *G;\n\t\tint w_size, l;\n\t\tint nr_class;\n\t\tint max_iter;\n\t\tdouble eps;\n\t\tconst problem *prob;\n};\n\nSolver_MCSVM_CS::Solver_MCSVM_CS(const problem *prob, int nr_class, double *weighted_C, double eps, int max_iter)\n{\n\tthis->w_size = prob->n;\n\tthis->l = prob->l;\n\tthis->nr_class = nr_class;\n\tthis->eps = eps;\n\tthis->max_iter = max_iter;\n\tthis->prob = prob;\n\tthis->B = new double[nr_class];\n\tthis->G = new double[nr_class];\n\tthis->C = weighted_C;\n}\n\nSolver_MCSVM_CS::~Solver_MCSVM_CS()\n{\n\tdelete[] B;\n\tdelete[] G;\n}\n\nint compare_double(const void *a, const void *b)\n{\n\tif(*(double *)a > *(double *)b)\n\t\treturn -1;\n\tif(*(double *)a < *(double *)b)\n\t\treturn 1;\n\treturn 0;\n}\n\nvoid Solver_MCSVM_CS::solve_sub_problem(double A_i, int yi, double C_yi, int active_i, double *alpha_new)\n{\n\tint r;\n\tdouble *D;\n\n\tclone(D, B, active_i);\n\tif(yi < active_i)\n\t\tD[yi] += A_i*C_yi;\n\tqsort(D, active_i, sizeof(double), compare_double);\n\n\tdouble beta = D[0] - A_i*C_yi;\n\tfor(r=1;r<active_i && beta<r*D[r];r++)\n\t\tbeta += D[r];\n\tbeta /= r;\n\n\tfor(r=0;r<active_i;r++)\n\t{\n\t\tif(r == yi)\n\t\t\talpha_new[r] = min(C_yi, (beta-B[r])/A_i);\n\t\telse\n\t\t\talpha_new[r] = min((double)0, (beta - B[r])/A_i);\n\t}\n\tdelete[] D;\n}\n\nbool Solver_MCSVM_CS::be_shrunk(int i, int m, int yi, double alpha_i, double minG)\n{\n\tdouble bound = 0;\n\tif(m == yi)\n\t\tbound = C[GETI(i)];\n\tif(alpha_i == bound && G[m] < minG)\n\t\treturn true;\n\treturn false;\n}\n\nvoid Solver_MCSVM_CS::Solve(double *w)\n{\n\tint i, m, s;\n\tint iter = 0;\n\tdouble *alpha =  new double[l*nr_class];\n\tdouble *alpha_new = new double[nr_class];\n\tint *index = new int[l];\n\tdouble *QD = new double[l];\n\tint *d_ind = new int[nr_class];\n\tdouble *d_val = new double[nr_class];\n\tint *alpha_index = new int[nr_class*l];\n\tint *y_index = new int[l];\n\tint active_size = l;\n\tint *active_size_i = new int[l];\n\tdouble eps_shrink = max(10.0*eps, 1.0); // stopping tolerance for shrinking\n\tbool start_from_all = true;\n\n\t// Initial alpha can be set here. Note that \n\t// sum_m alpha[i*nr_class+m] = 0, for all i=1,...,l-1\n\t// alpha[i*nr_class+m] <= C[GETI(i)] if prob->y[i] == m\n\t// alpha[i*nr_class+m] <= 0 if prob->y[i] != m\n\t// If initial alpha isn't zero, uncomment the for loop below to initialize w\n\tfor(i=0;i<l*nr_class;i++)\n\t\talpha[i] = 0;\n\n\tfor(i=0;i<w_size*nr_class;i++)\n\t\tw[i] = 0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tfor(m=0;m<nr_class;m++)\n\t\t\talpha_index[i*nr_class+m] = m;\n\t\tfeature_node *xi = prob->x[i];\n\t\tQD[i] = 0;\n\t\twhile(xi->index != -1)\n\t\t{\n\t\t\tdouble val = xi->value;\n\t\t\tQD[i] += val*val;\n\n\t\t\t// Uncomment the for loop if initial alpha isn't zero\n\t\t\t// for(m=0; m<nr_class; m++)\n\t\t\t//\tw[(xi->index-1)*nr_class+m] += alpha[i*nr_class+m]*val;\n\t\t\txi++;\n\t\t}\n\t\tactive_size_i[i] = nr_class;\n\t\ty_index[i] = (int)prob->y[i];\n\t\tindex[i] = i;\n\t}\n\n\twhile(iter < max_iter)\n\t{\n\t\tdouble stopping = -INF;\n\t\tfor(i=0;i<active_size;i++)\n\t\t{\n\t\t\tint j = i+rand()%(active_size-i);\n\t\t\tswap(index[i], index[j]);\n\t\t}\n\t\tfor(s=0;s<active_size;s++)\n\t\t{\n\t\t\ti = index[s];\n\t\t\tdouble Ai = QD[i];\n\t\t\tdouble *alpha_i = &alpha[i*nr_class];\n\t\t\tint *alpha_index_i = &alpha_index[i*nr_class];\n\n\t\t\tif(Ai > 0)\n\t\t\t{\n\t\t\t\tfor(m=0;m<active_size_i[i];m++)\n\t\t\t\t\tG[m] = 1;\n\t\t\t\tif(y_index[i] < active_size_i[i])\n\t\t\t\t\tG[y_index[i]] = 0;\n\n\t\t\t\tfeature_node *xi = prob->x[i];\n\t\t\t\twhile(xi->index!= -1)\n\t\t\t\t{\n\t\t\t\t\tdouble *w_i = &w[(xi->index-1)*nr_class];\n\t\t\t\t\tfor(m=0;m<active_size_i[i];m++)\n\t\t\t\t\t\tG[m] += w_i[alpha_index_i[m]]*(xi->value);\n\t\t\t\t\txi++;\n\t\t\t\t}\n\n\t\t\t\tdouble minG = INF;\n\t\t\t\tdouble maxG = -INF;\n\t\t\t\tfor(m=0;m<active_size_i[i];m++)\n\t\t\t\t{\n\t\t\t\t\tif(alpha_i[alpha_index_i[m]] < 0 && G[m] < minG)\n\t\t\t\t\t\tminG = G[m];\n\t\t\t\t\tif(G[m] > maxG)\n\t\t\t\t\t\tmaxG = G[m];\n\t\t\t\t}\n\t\t\t\tif(y_index[i] < active_size_i[i])\n\t\t\t\t\tif(alpha_i[(int) prob->y[i]] < C[GETI(i)] && G[y_index[i]] < minG)\n\t\t\t\t\t\tminG = G[y_index[i]];\n\n\t\t\t\tfor(m=0;m<active_size_i[i];m++)\n\t\t\t\t{\n\t\t\t\t\tif(be_shrunk(i, m, y_index[i], alpha_i[alpha_index_i[m]], minG))\n\t\t\t\t\t{\n\t\t\t\t\t\tactive_size_i[i]--;\n\t\t\t\t\t\twhile(active_size_i[i]>m)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(!be_shrunk(i, active_size_i[i], y_index[i],\n\t\t\t\t\t\t\t\t\t\t\talpha_i[alpha_index_i[active_size_i[i]]], minG))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tswap(alpha_index_i[m], alpha_index_i[active_size_i[i]]);\n\t\t\t\t\t\t\t\tswap(G[m], G[active_size_i[i]]);\n\t\t\t\t\t\t\t\tif(y_index[i] == active_size_i[i])\n\t\t\t\t\t\t\t\t\ty_index[i] = m;\n\t\t\t\t\t\t\t\telse if(y_index[i] == m)\n\t\t\t\t\t\t\t\t\ty_index[i] = active_size_i[i];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tactive_size_i[i]--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(active_size_i[i] <= 1)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif(maxG-minG <= 1e-12)\n\t\t\t\t\tcontinue;\n\t\t\t\telse\n\t\t\t\t\tstopping = max(maxG - minG, stopping);\n\n\t\t\t\tfor(m=0;m<active_size_i[i];m++)\n\t\t\t\t\tB[m] = G[m] - Ai*alpha_i[alpha_index_i[m]] ;\n\n\t\t\t\tsolve_sub_problem(Ai, y_index[i], C[GETI(i)], active_size_i[i], alpha_new);\n\t\t\t\tint nz_d = 0;\n\t\t\t\tfor(m=0;m<active_size_i[i];m++)\n\t\t\t\t{\n\t\t\t\t\tdouble d = alpha_new[m] - alpha_i[alpha_index_i[m]];\n\t\t\t\t\talpha_i[alpha_index_i[m]] = alpha_new[m];\n\t\t\t\t\tif(fabs(d) >= 1e-12)\n\t\t\t\t\t{\n\t\t\t\t\t\td_ind[nz_d] = alpha_index_i[m];\n\t\t\t\t\t\td_val[nz_d] = d;\n\t\t\t\t\t\tnz_d++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\txi = prob->x[i];\n\t\t\t\twhile(xi->index != -1)\n\t\t\t\t{\n\t\t\t\t\tdouble *w_i = &w[(xi->index-1)*nr_class];\n\t\t\t\t\tfor(m=0;m<nz_d;m++)\n\t\t\t\t\t\tw_i[d_ind[m]] += d_val[m]*xi->value;\n\t\t\t\t\txi++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\titer++;\n\t\tif(iter % 10 == 0)\n\t\t{\n\t\t\tinfo(\".\");\n\t\t}\n\n\t\tif(stopping < eps_shrink)\n\t\t{\n\t\t\tif(stopping < eps && start_from_all == true)\n\t\t\t\tbreak;\n\t\t\telse\n\t\t\t{\n\t\t\t\tactive_size = l;\n\t\t\t\tfor(i=0;i<l;i++)\n\t\t\t\t\tactive_size_i[i] = nr_class;\n\t\t\t\tinfo(\"*\");\n\t\t\t\teps_shrink = max(eps_shrink/2, eps);\n\t\t\t\tstart_from_all = true;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tstart_from_all = false;\n\t}\n\n\tinfo(\"\\noptimization finished, #iter = %d\\n\",iter);\n\tif (iter >= max_iter)\n\t\tinfo(\"\\nWARNING: reaching max number of iterations\\n\");\n\n\t// calculate objective value\n\tdouble v = 0;\n\tint nSV = 0;\n\tfor(i=0;i<w_size*nr_class;i++)\n\t\tv += w[i]*w[i];\n\tv = 0.5*v;\n\tfor(i=0;i<l*nr_class;i++)\n\t{\n\t\tv += alpha[i];\n\t\tif(fabs(alpha[i]) > 0)\n\t\t\tnSV++;\n\t}\n\tfor(i=0;i<l;i++)\n\t\tv -= alpha[i*nr_class+(int)prob->y[i]];\n\tinfo(\"Objective value = %lf\\n\",v);\n\tinfo(\"nSV = %d\\n\",nSV);\n\n\tdelete [] alpha;\n\tdelete [] alpha_new;\n\tdelete [] index;\n\tdelete [] QD;\n\tdelete [] d_ind;\n\tdelete [] d_val;\n\tdelete [] alpha_index;\n\tdelete [] y_index;\n\tdelete [] active_size_i;\n}\n\n// A coordinate descent algorithm for \n// L1-loss and L2-loss SVM dual problems\n//\n//  min_\\alpha  0.5(\\alpha^T (Q + D)\\alpha) - e^T \\alpha,\n//    s.t.      0 <= \\alpha_i <= upper_bound_i,\n// \n//  where Qij = yi yj xi^T xj and\n//  D is a diagonal matrix \n//\n// In L1-SVM case:\n// \t\tupper_bound_i = Cp if y_i = 1\n// \t\tupper_bound_i = Cn if y_i = -1\n// \t\tD_ii = 0\n// In L2-SVM case:\n// \t\tupper_bound_i = INF\n// \t\tD_ii = 1/(2*Cp)\tif y_i = 1\n// \t\tD_ii = 1/(2*Cn)\tif y_i = -1\n//\n// Given: \n// x, y, Cp, Cn\n// eps is the stopping tolerance\n//\n// solution will be put in w\n// \n// See Algorithm 3 of Hsieh et al., ICML 2008\n\n#undef GETI\n#define GETI(i) (y[i]+1)\n// To support weights for instances, use GETI(i) (i)\n\nstatic void solve_l2r_l1l2_svc(\n\tconst problem *prob, double *w, double eps,\n\tdouble Cp, double Cn, int solver_type)\n{\n\tint l = prob->l;\n\tint w_size = prob->n;\n\tint i, s, iter = 0;\n\tdouble C, d, G;\n\tdouble *QD = new double[l];\n\tint max_iter = 1000;\n\tint *index = new int[l];\n\tdouble *alpha = new double[l];\n\tschar *y = new schar[l];\n\tint active_size = l;\n\n\t// PG: projected gradient, for shrinking and stopping\n\tdouble PG;\n\tdouble PGmax_old = INF;\n\tdouble PGmin_old = -INF;\n\tdouble PGmax_new, PGmin_new;\n\n\t// default solver_type: L2R_L2LOSS_SVC_DUAL\n\tdouble diag[3] = {0.5/Cn, 0, 0.5/Cp};\n\tdouble upper_bound[3] = {INF, 0, INF};\n\tif(solver_type == L2R_L1LOSS_SVC_DUAL)\n\t{\n\t\tdiag[0] = 0;\n\t\tdiag[2] = 0;\n\t\tupper_bound[0] = Cn;\n\t\tupper_bound[2] = Cp;\n\t}\n\n\tfor(i=0; i<l; i++)\n\t{\n\t\tif(prob->y[i] > 0)\n\t\t{\n\t\t\ty[i] = +1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ty[i] = -1;\n\t\t}\n\t}\n\n\t// Initial alpha can be set here. Note that\n\t// 0 <= alpha[i] <= upper_bound[GETI(i)]\n\tfor(i=0; i<l; i++)\n\t\talpha[i] = 0;\n\n\tfor(i=0; i<w_size; i++)\n\t\tw[i] = 0;\n\tfor(i=0; i<l; i++)\n\t{\n\t\tQD[i] = diag[GETI(i)];\n\n\t\tfeature_node *xi = prob->x[i];\n\t\twhile (xi->index != -1)\n\t\t{\n\t\t\tdouble val = xi->value;\n\t\t\tQD[i] += val*val;\n\t\t\tw[xi->index-1] += y[i]*alpha[i]*val;\n\t\t\txi++;\n\t\t}\n\t\tindex[i] = i;\n\t}\n\n\twhile (iter < max_iter)\n\t{\n\t\tPGmax_new = -INF;\n\t\tPGmin_new = INF;\n\n\t\tfor (i=0; i<active_size; i++)\n\t\t{\n\t\t\tint j = i+rand()%(active_size-i);\n\t\t\tswap(index[i], index[j]);\n\t\t}\n\n\t\tfor (s=0; s<active_size; s++)\n\t\t{\n\t\t\ti = index[s];\n\t\t\tG = 0;\n\t\t\tschar yi = y[i];\n\n\t\t\tfeature_node *xi = prob->x[i];\n\t\t\twhile(xi->index!= -1)\n\t\t\t{\n\t\t\t\tG += w[xi->index-1]*(xi->value);\n\t\t\t\txi++;\n\t\t\t}\n\t\t\tG = G*yi-1;\n\n\t\t\tC = upper_bound[GETI(i)];\n\t\t\tG += alpha[i]*diag[GETI(i)];\n\n\t\t\tPG = 0;\n\t\t\tif (alpha[i] == 0)\n\t\t\t{\n\t\t\t\tif (G > PGmax_old)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (G < 0)\n\t\t\t\t\tPG = G;\n\t\t\t}\n\t\t\telse if (alpha[i] == C)\n\t\t\t{\n\t\t\t\tif (G < PGmin_old)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (G > 0)\n\t\t\t\t\tPG = G;\n\t\t\t}\n\t\t\telse\n\t\t\t\tPG = G;\n\n\t\t\tPGmax_new = max(PGmax_new, PG);\n\t\t\tPGmin_new = min(PGmin_new, PG);\n\n\t\t\tif(fabs(PG) > 1.0e-12)\n\t\t\t{\n\t\t\t\tdouble alpha_old = alpha[i];\n\t\t\t\talpha[i] = min(max(alpha[i] - G/QD[i], 0.0), C);\n\t\t\t\td = (alpha[i] - alpha_old)*yi;\n\t\t\t\txi = prob->x[i];\n\t\t\t\twhile (xi->index != -1)\n\t\t\t\t{\n\t\t\t\t\tw[xi->index-1] += d*xi->value;\n\t\t\t\t\txi++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\titer++;\n\t\tif(iter % 10 == 0)\n\t\t\tinfo(\".\");\n\n\t\tif(PGmax_new - PGmin_new <= eps)\n\t\t{\n\t\t\tif(active_size == l)\n\t\t\t\tbreak;\n\t\t\telse\n\t\t\t{\n\t\t\t\tactive_size = l;\n\t\t\t\tinfo(\"*\");\n\t\t\t\tPGmax_old = INF;\n\t\t\t\tPGmin_old = -INF;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tPGmax_old = PGmax_new;\n\t\tPGmin_old = PGmin_new;\n\t\tif (PGmax_old <= 0)\n\t\t\tPGmax_old = INF;\n\t\tif (PGmin_old >= 0)\n\t\t\tPGmin_old = -INF;\n\t}\n\n\tinfo(\"\\noptimization finished, #iter = %d\\n\",iter);\n\tif (iter >= max_iter)\n\t\tinfo(\"\\nWARNING: reaching max number of iterations\\nUsing -s 2 may be faster (also see FAQ)\\n\\n\");\n\n\t// calculate objective value\n\n\tdouble v = 0;\n\tint nSV = 0;\n\tfor(i=0; i<w_size; i++)\n\t\tv += w[i]*w[i];\n\tfor(i=0; i<l; i++)\n\t{\n\t\tv += alpha[i]*(alpha[i]*diag[GETI(i)] - 2);\n\t\tif(alpha[i] > 0)\n\t\t\t++nSV;\n\t}\n\tinfo(\"Objective value = %lf\\n\",v/2);\n\tinfo(\"nSV = %d\\n\",nSV);\n\n\tdelete [] QD;\n\tdelete [] alpha;\n\tdelete [] y;\n\tdelete [] index;\n}\n\n\n// A coordinate descent algorithm for \n// L1-loss and L2-loss epsilon-SVR dual problem\n//\n//  min_\\beta  0.5\\beta^T (Q + diag(lambda)) \\beta - p \\sum_{i=1}^l|\\beta_i| + \\sum_{i=1}^l yi\\beta_i,\n//    s.t.      -upper_bound_i <= \\beta_i <= upper_bound_i,\n// \n//  where Qij = xi^T xj and\n//  D is a diagonal matrix \n//\n// In L1-SVM case:\n// \t\tupper_bound_i = C\n// \t\tlambda_i = 0\n// In L2-SVM case:\n// \t\tupper_bound_i = INF\n// \t\tlambda_i = 1/(2*C)\n//\n// Given: \n// x, y, p, C\n// eps is the stopping tolerance\n//\n// solution will be put in w\n//\n// See Algorithm 4 of Ho and Lin, 2012   \n\n#undef GETI\n#define GETI(i) (0)\n// To support weights for instances, use GETI(i) (i)\n\nstatic void solve_l2r_l1l2_svr(\n\tconst problem *prob, double *w, const parameter *param,\n\tint solver_type)\n{\n\tint l = prob->l;\n\tdouble C = param->C;\n\tdouble p = param->p;\n\tint w_size = prob->n;\n\tdouble eps = param->eps;\n\tint i, s, iter = 0;\n\tint max_iter = 1000;\n\tint active_size = l;\n\tint *index = new int[l];\n\n\tdouble d, G, H;\n\tdouble Gmax_old = INF;\n\tdouble Gmax_new, Gnorm1_new;\n\tdouble Gnorm1_init = -1.0; // Gnorm1_init is initialized at the first iteration\n\tdouble *beta = new double[l];\n\tdouble *QD = new double[l];\n\tdouble *y = prob->y;\n\n\t// L2R_L2LOSS_SVR_DUAL\n\tdouble lambda[1], upper_bound[1];\n\tlambda[0] = 0.5/C;\n\tupper_bound[0] = INF;\n\n\tif(solver_type == L2R_L1LOSS_SVR_DUAL)\n\t{\n\t\tlambda[0] = 0;\n\t\tupper_bound[0] = C;\n\t}\n\n\t// Initial beta can be set here. Note that\n\t// -upper_bound <= beta[i] <= upper_bound\n\tfor(i=0; i<l; i++)\n\t\tbeta[i] = 0;\n\n\tfor(i=0; i<w_size; i++)\n\t\tw[i] = 0;\n\tfor(i=0; i<l; i++)\n\t{\n\t\tQD[i] = 0;\n\t\tfeature_node *xi = prob->x[i];\n\t\twhile(xi->index != -1)\n\t\t{\n\t\t\tdouble val = xi->value;\n\t\t\tQD[i] += val*val;\n\t\t\tw[xi->index-1] += beta[i]*val;\n\t\t\txi++;\n\t\t}\n\n\t\tindex[i] = i;\n\t}\n\n\n\twhile(iter < max_iter)\n\t{\n\t\tGmax_new = 0;\n\t\tGnorm1_new = 0;\n\n\t\tfor(i=0; i<active_size; i++)\n\t\t{\n\t\t\tint j = i+rand()%(active_size-i);\n\t\t\tswap(index[i], index[j]);\n\t\t}\n\n\t\tfor(s=0; s<active_size; s++)\n\t\t{\n\t\t\ti = index[s];\n\t\t\tG = -y[i] + lambda[GETI(i)]*beta[i];\n\t\t\tH = QD[i] + lambda[GETI(i)];\n\n\t\t\tfeature_node *xi = prob->x[i];\n\t\t\twhile(xi->index != -1)\n\t\t\t{\n\t\t\t\tint ind = xi->index-1;\n\t\t\t\tdouble val = xi->value;\n\t\t\t\tG += val*w[ind];\n\t\t\t\txi++;\n\t\t\t}\n\n\t\t\tdouble Gp = G+p;\n\t\t\tdouble Gn = G-p;\n\t\t\tdouble violation = 0;\n\t\t\tif(beta[i] == 0)\n\t\t\t{\n\t\t\t\tif(Gp < 0)\n\t\t\t\t\tviolation = -Gp;\n\t\t\t\telse if(Gn > 0)\n\t\t\t\t\tviolation = Gn;\n\t\t\t\telse if(Gp>Gmax_old && Gn<-Gmax_old)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(beta[i] >= upper_bound[GETI(i)])\n\t\t\t{\n\t\t\t\tif(Gp > 0)\n\t\t\t\t\tviolation = Gp;\n\t\t\t\telse if(Gp < -Gmax_old)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(beta[i] <= -upper_bound[GETI(i)])\n\t\t\t{\n\t\t\t\tif(Gn < 0)\n\t\t\t\t\tviolation = -Gn;\n\t\t\t\telse if(Gn > Gmax_old)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(beta[i] > 0)\n\t\t\t\tviolation = fabs(Gp);\n\t\t\telse\n\t\t\t\tviolation = fabs(Gn);\n\n\t\t\tGmax_new = max(Gmax_new, violation);\n\t\t\tGnorm1_new += violation;\n\n\t\t\t// obtain Newton direction d\n\t\t\tif(Gp < H*beta[i])\n\t\t\t\td = -Gp/H;\n\t\t\telse if(Gn > H*beta[i])\n\t\t\t\td = -Gn/H;\n\t\t\telse\n\t\t\t\td = -beta[i];\n\n\t\t\tif(fabs(d) < 1.0e-12)\n\t\t\t\tcontinue;\n\n\t\t\tdouble beta_old = beta[i];\n\t\t\tbeta[i] = min(max(beta[i]+d, -upper_bound[GETI(i)]), upper_bound[GETI(i)]);\n\t\t\td = beta[i]-beta_old;\n\n\t\t\tif(d != 0)\n\t\t\t{\n\t\t\t\txi = prob->x[i];\n\t\t\t\twhile(xi->index != -1)\n\t\t\t\t{\n\t\t\t\t\tw[xi->index-1] += d*xi->value;\n\t\t\t\t\txi++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(iter == 0)\n\t\t\tGnorm1_init = Gnorm1_new;\n\t\titer++;\n\t\tif(iter % 10 == 0)\n\t\t\tinfo(\".\");\n\n\t\tif(Gnorm1_new <= eps*Gnorm1_init)\n\t\t{\n\t\t\tif(active_size == l)\n\t\t\t\tbreak;\n\t\t\telse\n\t\t\t{\n\t\t\t\tactive_size = l;\n\t\t\t\tinfo(\"*\");\n\t\t\t\tGmax_old = INF;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tGmax_old = Gmax_new;\n\t}\n\n\tinfo(\"\\noptimization finished, #iter = %d\\n\", iter);\n\tif(iter >= max_iter)\n\t\tinfo(\"\\nWARNING: reaching max number of iterations\\nUsing -s 11 may be faster\\n\\n\");\n\n\t// calculate objective value\n\tdouble v = 0;\n\tint nSV = 0;\n\tfor(i=0; i<w_size; i++)\n\t\tv += w[i]*w[i];\n\tv = 0.5*v;\n\tfor(i=0; i<l; i++)\n\t{\n\t\tv += p*fabs(beta[i]) - y[i]*beta[i] + 0.5*lambda[GETI(i)]*beta[i]*beta[i];\n\t\tif(beta[i] != 0)\n\t\t\tnSV++;\n\t}\n\n\tinfo(\"Objective value = %lf\\n\", v);\n\tinfo(\"nSV = %d\\n\",nSV);\n\n\tdelete [] beta;\n\tdelete [] QD;\n\tdelete [] index;\n}\n\n\n// A coordinate descent algorithm for \n// the dual of L2-regularized logistic regression problems\n//\n//  min_\\alpha  0.5(\\alpha^T Q \\alpha) + \\sum \\alpha_i log (\\alpha_i) + (upper_bound_i - \\alpha_i) log (upper_bound_i - \\alpha_i),\n//    s.t.      0 <= \\alpha_i <= upper_bound_i,\n// \n//  where Qij = yi yj xi^T xj and \n//  upper_bound_i = Cp if y_i = 1\n//  upper_bound_i = Cn if y_i = -1\n//\n// Given: \n// x, y, Cp, Cn\n// eps is the stopping tolerance\n//\n// solution will be put in w\n//\n// See Algorithm 5 of Yu et al., MLJ 2010\n\n#undef GETI\n#define GETI(i) (y[i]+1)\n// To support weights for instances, use GETI(i) (i)\n\nvoid solve_l2r_lr_dual(const problem *prob, double *w, double eps, double Cp, double Cn)\n{\n\tint l = prob->l;\n\tint w_size = prob->n;\n\tint i, s, iter = 0;\n\tdouble *xTx = new double[l];\n\tint max_iter = 1000;\n\tint *index = new int[l];\t\n\tdouble *alpha = new double[2*l]; // store alpha and C - alpha\n\tschar *y = new schar[l];\n\tint max_inner_iter = 100; // for inner Newton\n\tdouble innereps = 1e-2;\n\tdouble innereps_min = min(1e-8, eps);\n\tdouble upper_bound[3] = {Cn, 0, Cp};\n\n\tfor(i=0; i<l; i++)\n\t{\n\t\tif(prob->y[i] > 0)\n\t\t{\n\t\t\ty[i] = +1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ty[i] = -1;\n\t\t}\n\t}\n\t\n\t// Initial alpha can be set here. Note that\n\t// 0 < alpha[i] < upper_bound[GETI(i)]\n\t// alpha[2*i] + alpha[2*i+1] = upper_bound[GETI(i)]\n\tfor(i=0; i<l; i++)\n\t{\n\t\talpha[2*i] = min(0.001*upper_bound[GETI(i)], 1e-8);\n\t\talpha[2*i+1] = upper_bound[GETI(i)] - alpha[2*i];\n\t}\n\n\tfor(i=0; i<w_size; i++)\n\t\tw[i] = 0;\n\tfor(i=0; i<l; i++)\n\t{\n\t\txTx[i] = 0;\n\t\tfeature_node *xi = prob->x[i];\n\t\twhile (xi->index != -1)\n\t\t{\n\t\t\tdouble val = xi->value;\n\t\t\txTx[i] += val*val;\n\t\t\tw[xi->index-1] += y[i]*alpha[2*i]*val;\n\t\t\txi++;\n\t\t}\n\t\tindex[i] = i;\n\t}\n\n\twhile (iter < max_iter)\n\t{\n\t\tfor (i=0; i<l; i++)\n\t\t{\n\t\t\tint j = i+rand()%(l-i);\n\t\t\tswap(index[i], index[j]);\n\t\t}\n\t\tint newton_iter = 0;\n\t\tdouble Gmax = 0;\n\t\tfor (s=0; s<l; s++)\n\t\t{\n\t\t\ti = index[s];\n\t\t\tschar yi = y[i];\n\t\t\tdouble C = upper_bound[GETI(i)];\n\t\t\tdouble ywTx = 0, xisq = xTx[i];\n\t\t\tfeature_node *xi = prob->x[i];\n\t\t\twhile (xi->index != -1)\n\t\t\t{\n\t\t\t\tywTx += w[xi->index-1]*xi->value;\n\t\t\t\txi++;\n\t\t\t}\n\t\t\tywTx *= y[i];\n\t\t\tdouble a = xisq, b = ywTx;\n\n\t\t\t// Decide to minimize g_1(z) or g_2(z)\n\t\t\tint ind1 = 2*i, ind2 = 2*i+1, sign = 1;\n\t\t\tif(0.5*a*(alpha[ind2]-alpha[ind1])+b < 0)\n\t\t\t{\n\t\t\t\tind1 = 2*i+1;\n\t\t\t\tind2 = 2*i;\n\t\t\t\tsign = -1;\n\t\t\t}\n\n\t\t\t//  g_t(z) = z*log(z) + (C-z)*log(C-z) + 0.5a(z-alpha_old)^2 + sign*b(z-alpha_old)\n\t\t\tdouble alpha_old = alpha[ind1];\n\t\t\tdouble z = alpha_old;\n\t\t\tif(C - z < 0.5 * C)\n\t\t\t\tz = 0.1*z;\n\t\t\tdouble gp = a*(z-alpha_old)+sign*b+log(z/(C-z));\n\t\t\tGmax = max(Gmax, fabs(gp));\n\n\t\t\t// Newton method on the sub-problem\n\t\t\tconst double eta = 0.1; // xi in the paper\n\t\t\tint inner_iter = 0;\n\t\t\twhile (inner_iter <= max_inner_iter)\n\t\t\t{\n\t\t\t\tif(fabs(gp) < innereps)\n\t\t\t\t\tbreak;\n\t\t\t\tdouble gpp = a + C/(C-z)/z;\n\t\t\t\tdouble tmpz = z - gp/gpp;\n\t\t\t\tif(tmpz <= 0)\n\t\t\t\t\tz *= eta;\n\t\t\t\telse // tmpz in (0, C)\n\t\t\t\t\tz = tmpz;\n\t\t\t\tgp = a*(z-alpha_old)+sign*b+log(z/(C-z));\n\t\t\t\tnewton_iter++;\n\t\t\t\tinner_iter++;\n\t\t\t}\n\n\t\t\tif(inner_iter > 0) // update w\n\t\t\t{\n\t\t\t\talpha[ind1] = z;\n\t\t\t\talpha[ind2] = C-z;\n\t\t\t\txi = prob->x[i];\n\t\t\t\twhile (xi->index != -1)\n\t\t\t\t{\n\t\t\t\t\tw[xi->index-1] += sign*(z-alpha_old)*yi*xi->value;\n\t\t\t\t\txi++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\titer++;\n\t\tif(iter % 10 == 0)\n\t\t\tinfo(\".\");\n\n\t\tif(Gmax < eps)\n\t\t\tbreak;\n\n\t\tif(newton_iter <= l/10)\n\t\t\tinnereps = max(innereps_min, 0.1*innereps);\n\n\t}\n\n\tinfo(\"\\noptimization finished, #iter = %d\\n\",iter);\n\tif (iter >= max_iter)\n\t\tinfo(\"\\nWARNING: reaching max number of iterations\\nUsing -s 0 may be faster (also see FAQ)\\n\\n\");\n\n\t// calculate objective value\n\n\tdouble v = 0;\n\tfor(i=0; i<w_size; i++)\n\t\tv += w[i] * w[i];\n\tv *= 0.5;\n\tfor(i=0; i<l; i++)\n\t\tv += alpha[2*i] * log(alpha[2*i]) + alpha[2*i+1] * log(alpha[2*i+1])\n\t\t\t- upper_bound[GETI(i)] * log(upper_bound[GETI(i)]);\n\tinfo(\"Objective value = %lf\\n\", v);\n\n\tdelete [] xTx;\n\tdelete [] alpha;\n\tdelete [] y;\n\tdelete [] index;\n}\n\n// A coordinate descent algorithm for \n// L1-regularized L2-loss support vector classification\n//\n//  min_w \\sum |wj| + C \\sum max(0, 1-yi w^T xi)^2,\n//\n// Given: \n// x, y, Cp, Cn\n// eps is the stopping tolerance\n//\n// solution will be put in w\n//\n// See Yuan et al. (2010) and appendix of LIBLINEAR paper, Fan et al. (2008)\n\n#undef GETI\n#define GETI(i) (y[i]+1)\n// To support weights for instances, use GETI(i) (i)\n\nstatic void solve_l1r_l2_svc(\n\tproblem *prob_col, double *w, double eps,\n\tdouble Cp, double Cn)\n{\n\tint l = prob_col->l;\n\tint w_size = prob_col->n;\n\tint j, s, iter = 0;\n\tint max_iter = 1000;\n\tint active_size = w_size;\n\tint max_num_linesearch = 20;\n\n\tdouble sigma = 0.01;\n\tdouble d, G_loss, G, H;\n\tdouble Gmax_old = INF;\n\tdouble Gmax_new, Gnorm1_new;\n\tdouble Gnorm1_init = -1.0; // Gnorm1_init is initialized at the first iteration\n\tdouble d_old, d_diff;\n\tdouble loss_old, loss_new;\n\tdouble appxcond, cond;\n\n\tint *index = new int[w_size];\n\tschar *y = new schar[l];\n\tdouble *b = new double[l]; // b = 1-ywTx\n\tdouble *xj_sq = new double[w_size];\n\tfeature_node *x;\n\n\tdouble C[3] = {Cn,0,Cp};\n\n\t// Initial w can be set here.\n\tfor(j=0; j<w_size; j++)\n\t\tw[j] = 0;\n\n\tfor(j=0; j<l; j++)\n\t{\n\t\tb[j] = 1;\n\t\tif(prob_col->y[j] > 0)\n\t\t\ty[j] = 1;\n\t\telse\n\t\t\ty[j] = -1;\n\t}\n\tfor(j=0; j<w_size; j++)\n\t{\n\t\tindex[j] = j;\n\t\txj_sq[j] = 0;\n\t\tx = prob_col->x[j];\n\t\twhile(x->index != -1)\n\t\t{\n\t\t\tint ind = x->index-1;\n\t\t\tx->value *= y[ind]; // x->value stores yi*xij\n\t\t\tdouble val = x->value;\n\t\t\tb[ind] -= w[j]*val;\n\t\t\txj_sq[j] += C[GETI(ind)]*val*val;\n\t\t\tx++;\n\t\t}\n\t}\n\n\twhile(iter < max_iter)\n\t{\n\t\tGmax_new = 0;\n\t\tGnorm1_new = 0;\n\n\t\tfor(j=0; j<active_size; j++)\n\t\t{\n\t\t\tint i = j+rand()%(active_size-j);\n\t\t\tswap(index[i], index[j]);\n\t\t}\n\n\t\tfor(s=0; s<active_size; s++)\n\t\t{\n\t\t\tj = index[s];\n\t\t\tG_loss = 0;\n\t\t\tH = 0;\n\n\t\t\tx = prob_col->x[j];\n\t\t\twhile(x->index != -1)\n\t\t\t{\n\t\t\t\tint ind = x->index-1;\n\t\t\t\tif(b[ind] > 0)\n\t\t\t\t{\n\t\t\t\t\tdouble val = x->value;\n\t\t\t\t\tdouble tmp = C[GETI(ind)]*val;\n\t\t\t\t\tG_loss -= tmp*b[ind];\n\t\t\t\t\tH += tmp*val;\n\t\t\t\t}\n\t\t\t\tx++;\n\t\t\t}\n\t\t\tG_loss *= 2;\n\n\t\t\tG = G_loss;\n\t\t\tH *= 2;\n\t\t\tH = max(H, 1e-12);\n\n\t\t\tdouble Gp = G+1;\n\t\t\tdouble Gn = G-1;\n\t\t\tdouble violation = 0;\n\t\t\tif(w[j] == 0)\n\t\t\t{\n\t\t\t\tif(Gp < 0)\n\t\t\t\t\tviolation = -Gp;\n\t\t\t\telse if(Gn > 0)\n\t\t\t\t\tviolation = Gn;\n\t\t\t\telse if(Gp>Gmax_old/l && Gn<-Gmax_old/l)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(w[j] > 0)\n\t\t\t\tviolation = fabs(Gp);\n\t\t\telse\n\t\t\t\tviolation = fabs(Gn);\n\n\t\t\tGmax_new = max(Gmax_new, violation);\n\t\t\tGnorm1_new += violation;\n\n\t\t\t// obtain Newton direction d\n\t\t\tif(Gp < H*w[j])\n\t\t\t\td = -Gp/H;\n\t\t\telse if(Gn > H*w[j])\n\t\t\t\td = -Gn/H;\n\t\t\telse\n\t\t\t\td = -w[j];\n\n\t\t\tif(fabs(d) < 1.0e-12)\n\t\t\t\tcontinue;\n\n\t\t\tdouble delta = fabs(w[j]+d)-fabs(w[j]) + G*d;\n\t\t\td_old = 0;\n\t\t\tint num_linesearch;\n\t\t\tfor(num_linesearch=0; num_linesearch < max_num_linesearch; num_linesearch++)\n\t\t\t{\n\t\t\t\td_diff = d_old - d;\n\t\t\t\tcond = fabs(w[j]+d)-fabs(w[j]) - sigma*delta;\n\n\t\t\t\tappxcond = xj_sq[j]*d*d + G_loss*d + cond;\n\t\t\t\tif(appxcond <= 0)\n\t\t\t\t{\n\t\t\t\t\tx = prob_col->x[j];\n\t\t\t\t\twhile(x->index != -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tb[x->index-1] += d_diff*x->value;\n\t\t\t\t\t\tx++;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif(num_linesearch == 0)\n\t\t\t\t{\n\t\t\t\t\tloss_old = 0;\n\t\t\t\t\tloss_new = 0;\n\t\t\t\t\tx = prob_col->x[j];\n\t\t\t\t\twhile(x->index != -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tint ind = x->index-1;\n\t\t\t\t\t\tif(b[ind] > 0)\n\t\t\t\t\t\t\tloss_old += C[GETI(ind)]*b[ind]*b[ind];\n\t\t\t\t\t\tdouble b_new = b[ind] + d_diff*x->value;\n\t\t\t\t\t\tb[ind] = b_new;\n\t\t\t\t\t\tif(b_new > 0)\n\t\t\t\t\t\t\tloss_new += C[GETI(ind)]*b_new*b_new;\n\t\t\t\t\t\tx++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tloss_new = 0;\n\t\t\t\t\tx = prob_col->x[j];\n\t\t\t\t\twhile(x->index != -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tint ind = x->index-1;\n\t\t\t\t\t\tdouble b_new = b[ind] + d_diff*x->value;\n\t\t\t\t\t\tb[ind] = b_new;\n\t\t\t\t\t\tif(b_new > 0)\n\t\t\t\t\t\t\tloss_new += C[GETI(ind)]*b_new*b_new;\n\t\t\t\t\t\tx++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcond = cond + loss_new - loss_old;\n\t\t\t\tif(cond <= 0)\n\t\t\t\t\tbreak;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\td_old = d;\n\t\t\t\t\td *= 0.5;\n\t\t\t\t\tdelta *= 0.5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tw[j] += d;\n\n\t\t\t// recompute b[] if line search takes too many steps\n\t\t\tif(num_linesearch >= max_num_linesearch)\n\t\t\t{\n\t\t\t\tinfo(\"#\");\n\t\t\t\tfor(int i=0; i<l; i++)\n\t\t\t\t\tb[i] = 1;\n\n\t\t\t\tfor(int i=0; i<w_size; i++)\n\t\t\t\t{\n\t\t\t\t\tif(w[i]==0) continue;\n\t\t\t\t\tx = prob_col->x[i];\n\t\t\t\t\twhile(x->index != -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tb[x->index-1] -= w[i]*x->value;\n\t\t\t\t\t\tx++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(iter == 0)\n\t\t\tGnorm1_init = Gnorm1_new;\n\t\titer++;\n\t\tif(iter % 10 == 0)\n\t\t\tinfo(\".\");\n\n\t\tif(Gnorm1_new <= eps*Gnorm1_init)\n\t\t{\n\t\t\tif(active_size == w_size)\n\t\t\t\tbreak;\n\t\t\telse\n\t\t\t{\n\t\t\t\tactive_size = w_size;\n\t\t\t\tinfo(\"*\");\n\t\t\t\tGmax_old = INF;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tGmax_old = Gmax_new;\n\t}\n\n\tinfo(\"\\noptimization finished, #iter = %d\\n\", iter);\n\tif(iter >= max_iter)\n\t\tinfo(\"\\nWARNING: reaching max number of iterations\\n\");\n\n\t// calculate objective value\n\n\tdouble v = 0;\n\tint nnz = 0;\n\tfor(j=0; j<w_size; j++)\n\t{\n\t\tx = prob_col->x[j];\n\t\twhile(x->index != -1)\n\t\t{\n\t\t\tx->value *= prob_col->y[x->index-1]; // restore x->value\n\t\t\tx++;\n\t\t}\n\t\tif(w[j] != 0)\n\t\t{\n\t\t\tv += fabs(w[j]);\n\t\t\tnnz++;\n\t\t}\n\t}\n\tfor(j=0; j<l; j++)\n\t\tif(b[j] > 0)\n\t\t\tv += C[GETI(j)]*b[j]*b[j];\n\n\tinfo(\"Objective value = %lf\\n\", v);\n\tinfo(\"#nonzeros/#features = %d/%d\\n\", nnz, w_size);\n\n\tdelete [] index;\n\tdelete [] y;\n\tdelete [] b;\n\tdelete [] xj_sq;\n}\n\n// A coordinate descent algorithm for \n// L1-regularized logistic regression problems\n//\n//  min_w \\sum |wj| + C \\sum log(1+exp(-yi w^T xi)),\n//\n// Given: \n// x, y, Cp, Cn\n// eps is the stopping tolerance\n//\n// solution will be put in w\n//\n// See Yuan et al. (2011) and appendix of LIBLINEAR paper, Fan et al. (2008)\n\n#undef GETI\n#define GETI(i) (y[i]+1)\n// To support weights for instances, use GETI(i) (i)\n\nstatic void solve_l1r_lr(\n\tconst problem *prob_col, double *w, double eps,\n\tdouble Cp, double Cn)\n{\n\tint l = prob_col->l;\n\tint w_size = prob_col->n;\n\tint j, s, newton_iter=0, iter=0;\n\tint max_newton_iter = 100;\n\tint max_iter = 1000;\n\tint max_num_linesearch = 20;\n\tint active_size;\n\tint QP_active_size;\n\n\tdouble nu = 1e-12;\n\tdouble inner_eps = 1;\n\tdouble sigma = 0.01;\n\tdouble w_norm, w_norm_new;\n\tdouble z, G, H;\n\tdouble Gnorm1_init = -1.0; // Gnorm1_init is initialized at the first iteration\n\tdouble Gmax_old = INF;\n\tdouble Gmax_new, Gnorm1_new;\n\tdouble QP_Gmax_old = INF;\n\tdouble QP_Gmax_new, QP_Gnorm1_new;\n\tdouble delta, negsum_xTd, cond;\n\n\tint *index = new int[w_size];\n\tschar *y = new schar[l];\n\tdouble *Hdiag = new double[w_size];\n\tdouble *Grad = new double[w_size];\n\tdouble *wpd = new double[w_size];\n\tdouble *xjneg_sum = new double[w_size];\n\tdouble *xTd = new double[l];\n\tdouble *exp_wTx = new double[l];\n\tdouble *exp_wTx_new = new double[l];\n\tdouble *tau = new double[l];\n\tdouble *D = new double[l];\n\tfeature_node *x;\n\n\tdouble C[3] = {Cn,0,Cp};\n\n\t// Initial w can be set here.\n\tfor(j=0; j<w_size; j++)\n\t\tw[j] = 0;\n\n\tfor(j=0; j<l; j++)\n\t{\n\t\tif(prob_col->y[j] > 0)\n\t\t\ty[j] = 1;\n\t\telse\n\t\t\ty[j] = -1;\n\n\t\texp_wTx[j] = 0;\n\t}\n\n\tw_norm = 0;\n\tfor(j=0; j<w_size; j++)\n\t{\n\t\tw_norm += fabs(w[j]);\n\t\twpd[j] = w[j];\n\t\tindex[j] = j;\n\t\txjneg_sum[j] = 0;\n\t\tx = prob_col->x[j];\n\t\twhile(x->index != -1)\n\t\t{\n\t\t\tint ind = x->index-1;\n\t\t\tdouble val = x->value;\n\t\t\texp_wTx[ind] += w[j]*val;\n\t\t\tif(y[ind] == -1)\n\t\t\t\txjneg_sum[j] += C[GETI(ind)]*val;\n\t\t\tx++;\n\t\t}\n\t}\n\tfor(j=0; j<l; j++)\n\t{\n\t\texp_wTx[j] = exp(exp_wTx[j]);\n\t\tdouble tau_tmp = 1/(1+exp_wTx[j]);\n\t\ttau[j] = C[GETI(j)]*tau_tmp;\n\t\tD[j] = C[GETI(j)]*exp_wTx[j]*tau_tmp*tau_tmp;\n\t}\n\n\twhile(newton_iter < max_newton_iter)\n\t{\n\t\tGmax_new = 0;\n\t\tGnorm1_new = 0;\n\t\tactive_size = w_size;\n\n\t\tfor(s=0; s<active_size; s++)\n\t\t{\n\t\t\tj = index[s];\n\t\t\tHdiag[j] = nu;\n\t\t\tGrad[j] = 0;\n\n\t\t\tdouble tmp = 0;\n\t\t\tx = prob_col->x[j];\n\t\t\twhile(x->index != -1)\n\t\t\t{\n\t\t\t\tint ind = x->index-1;\n\t\t\t\tHdiag[j] += x->value*x->value*D[ind];\n\t\t\t\ttmp += x->value*tau[ind];\n\t\t\t\tx++;\n\t\t\t}\n\t\t\tGrad[j] = -tmp + xjneg_sum[j];\n\n\t\t\tdouble Gp = Grad[j]+1;\n\t\t\tdouble Gn = Grad[j]-1;\n\t\t\tdouble violation = 0;\n\t\t\tif(w[j] == 0)\n\t\t\t{\n\t\t\t\tif(Gp < 0)\n\t\t\t\t\tviolation = -Gp;\n\t\t\t\telse if(Gn > 0)\n\t\t\t\t\tviolation = Gn;\n\t\t\t\t//outer-level shrinking\n\t\t\t\telse if(Gp>Gmax_old/l && Gn<-Gmax_old/l)\n\t\t\t\t{\n\t\t\t\t\tactive_size--;\n\t\t\t\t\tswap(index[s], index[active_size]);\n\t\t\t\t\ts--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(w[j] > 0)\n\t\t\t\tviolation = fabs(Gp);\n\t\t\telse\n\t\t\t\tviolation = fabs(Gn);\n\n\t\t\tGmax_new = max(Gmax_new, violation);\n\t\t\tGnorm1_new += violation;\n\t\t}\n\n\t\tif(newton_iter == 0)\n\t\t\tGnorm1_init = Gnorm1_new;\n\n\t\tif(Gnorm1_new <= eps*Gnorm1_init)\n\t\t\tbreak;\n\n\t\titer = 0;\n\t\tQP_Gmax_old = INF;\n\t\tQP_active_size = active_size;\n\n\t\tfor(int i=0; i<l; i++)\n\t\t\txTd[i] = 0;\n\n\t\t// optimize QP over wpd\n\t\twhile(iter < max_iter)\n\t\t{\n\t\t\tQP_Gmax_new = 0;\n\t\t\tQP_Gnorm1_new = 0;\n\n\t\t\tfor(j=0; j<QP_active_size; j++)\n\t\t\t{\n\t\t\t\tint i = j+rand()%(QP_active_size-j);\n\t\t\t\tswap(index[i], index[j]);\n\t\t\t}\n\n\t\t\tfor(s=0; s<QP_active_size; s++)\n\t\t\t{\n\t\t\t\tj = index[s];\n\t\t\t\tH = Hdiag[j];\n\n\t\t\t\tx = prob_col->x[j];\n\t\t\t\tG = Grad[j] + (wpd[j]-w[j])*nu;\n\t\t\t\twhile(x->index != -1)\n\t\t\t\t{\n\t\t\t\t\tint ind = x->index-1;\n\t\t\t\t\tG += x->value*D[ind]*xTd[ind];\n\t\t\t\t\tx++;\n\t\t\t\t}\n\n\t\t\t\tdouble Gp = G+1;\n\t\t\t\tdouble Gn = G-1;\n\t\t\t\tdouble violation = 0;\n\t\t\t\tif(wpd[j] == 0)\n\t\t\t\t{\n\t\t\t\t\tif(Gp < 0)\n\t\t\t\t\t\tviolation = -Gp;\n\t\t\t\t\telse if(Gn > 0)\n\t\t\t\t\t\tviolation = Gn;\n\t\t\t\t\t//inner-level shrinking\n\t\t\t\t\telse if(Gp>QP_Gmax_old/l && Gn<-QP_Gmax_old/l)\n\t\t\t\t\t{\n\t\t\t\t\t\tQP_active_size--;\n\t\t\t\t\t\tswap(index[s], index[QP_active_size]);\n\t\t\t\t\t\ts--;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(wpd[j] > 0)\n\t\t\t\t\tviolation = fabs(Gp);\n\t\t\t\telse\n\t\t\t\t\tviolation = fabs(Gn);\n\n\t\t\t\tQP_Gmax_new = max(QP_Gmax_new, violation);\n\t\t\t\tQP_Gnorm1_new += violation;\n\n\t\t\t\t// obtain solution of one-variable problem\n\t\t\t\tif(Gp < H*wpd[j])\n\t\t\t\t\tz = -Gp/H;\n\t\t\t\telse if(Gn > H*wpd[j])\n\t\t\t\t\tz = -Gn/H;\n\t\t\t\telse\n\t\t\t\t\tz = -wpd[j];\n\n\t\t\t\tif(fabs(z) < 1.0e-12)\n\t\t\t\t\tcontinue;\n\t\t\t\tz = min(max(z,-10.0),10.0);\n\n\t\t\t\twpd[j] += z;\n\n\t\t\t\tx = prob_col->x[j];\n\t\t\t\twhile(x->index != -1)\n\t\t\t\t{\n\t\t\t\t\tint ind = x->index-1;\n\t\t\t\t\txTd[ind] += x->value*z;\n\t\t\t\t\tx++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titer++;\n\n\t\t\tif(QP_Gnorm1_new <= inner_eps*Gnorm1_init)\n\t\t\t{\n\t\t\t\t//inner stopping\n\t\t\t\tif(QP_active_size == active_size)\n\t\t\t\t\tbreak;\n\t\t\t\t//active set reactivation\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tQP_active_size = active_size;\n\t\t\t\t\tQP_Gmax_old = INF;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tQP_Gmax_old = QP_Gmax_new;\n\t\t}\n\n\t\tif(iter >= max_iter)\n\t\t\tinfo(\"WARNING: reaching max number of inner iterations\\n\");\n\n\t\tdelta = 0;\n\t\tw_norm_new = 0;\n\t\tfor(j=0; j<w_size; j++)\n\t\t{\n\t\t\tdelta += Grad[j]*(wpd[j]-w[j]);\n\t\t\tif(wpd[j] != 0)\n\t\t\t\tw_norm_new += fabs(wpd[j]);\n\t\t}\n\t\tdelta += (w_norm_new-w_norm);\n\n\t\tnegsum_xTd = 0;\n\t\tfor(int i=0; i<l; i++)\n\t\t\tif(y[i] == -1)\n\t\t\t\tnegsum_xTd += C[GETI(i)]*xTd[i];\n\n\t\tint num_linesearch;\n\t\tfor(num_linesearch=0; num_linesearch < max_num_linesearch; num_linesearch++)\n\t\t{\n\t\t\tcond = w_norm_new - w_norm + negsum_xTd - sigma*delta;\n\n\t\t\tfor(int i=0; i<l; i++)\n\t\t\t{\n\t\t\t\tdouble exp_xTd = exp(xTd[i]);\n\t\t\t\texp_wTx_new[i] = exp_wTx[i]*exp_xTd;\n\t\t\t\tcond += C[GETI(i)]*log((1+exp_wTx_new[i])/(exp_xTd+exp_wTx_new[i]));\n\t\t\t}\n\n\t\t\tif(cond <= 0)\n\t\t\t{\n\t\t\t\tw_norm = w_norm_new;\n\t\t\t\tfor(j=0; j<w_size; j++)\n\t\t\t\t\tw[j] = wpd[j];\n\t\t\t\tfor(int i=0; i<l; i++)\n\t\t\t\t{\n\t\t\t\t\texp_wTx[i] = exp_wTx_new[i];\n\t\t\t\t\tdouble tau_tmp = 1/(1+exp_wTx[i]);\n\t\t\t\t\ttau[i] = C[GETI(i)]*tau_tmp;\n\t\t\t\t\tD[i] = C[GETI(i)]*exp_wTx[i]*tau_tmp*tau_tmp;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tw_norm_new = 0;\n\t\t\t\tfor(j=0; j<w_size; j++)\n\t\t\t\t{\n\t\t\t\t\twpd[j] = (w[j]+wpd[j])*0.5;\n\t\t\t\t\tif(wpd[j] != 0)\n\t\t\t\t\t\tw_norm_new += fabs(wpd[j]);\n\t\t\t\t}\n\t\t\t\tdelta *= 0.5;\n\t\t\t\tnegsum_xTd *= 0.5;\n\t\t\t\tfor(int i=0; i<l; i++)\n\t\t\t\t\txTd[i] *= 0.5;\n\t\t\t}\n\t\t}\n\n\t\t// Recompute some info due to too many line search steps\n\t\tif(num_linesearch >= max_num_linesearch)\n\t\t{\n\t\t\tfor(int i=0; i<l; i++)\n\t\t\t\texp_wTx[i] = 0;\n\n\t\t\tfor(int i=0; i<w_size; i++)\n\t\t\t{\n\t\t\t\tif(w[i]==0) continue;\n\t\t\t\tx = prob_col->x[i];\n\t\t\t\twhile(x->index != -1)\n\t\t\t\t{\n\t\t\t\t\texp_wTx[x->index-1] += w[i]*x->value;\n\t\t\t\t\tx++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(int i=0; i<l; i++)\n\t\t\t\texp_wTx[i] = exp(exp_wTx[i]);\n\t\t}\n\n\t\tif(iter == 1)\n\t\t\tinner_eps *= 0.25;\n\n\t\tnewton_iter++;\n\t\tGmax_old = Gmax_new;\n\n\t\tinfo(\"iter %3d  #CD cycles %d\\n\", newton_iter, iter);\n\t}\n\n\tinfo(\"=========================\\n\");\n\tinfo(\"optimization finished, #iter = %d\\n\", newton_iter);\n\tif(newton_iter >= max_newton_iter)\n\t\tinfo(\"WARNING: reaching max number of iterations\\n\");\n\n\t// calculate objective value\n\n\tdouble v = 0;\n\tint nnz = 0;\n\tfor(j=0; j<w_size; j++)\n\t\tif(w[j] != 0)\n\t\t{\n\t\t\tv += fabs(w[j]);\n\t\t\tnnz++;\n\t\t}\n\tfor(j=0; j<l; j++)\n\t\tif(y[j] == 1)\n\t\t\tv += C[GETI(j)]*log(1+1/exp_wTx[j]);\n\t\telse\n\t\t\tv += C[GETI(j)]*log(1+exp_wTx[j]);\n\n\tinfo(\"Objective value = %lf\\n\", v);\n\tinfo(\"#nonzeros/#features = %d/%d\\n\", nnz, w_size);\n\n\tdelete [] index;\n\tdelete [] y;\n\tdelete [] Hdiag;\n\tdelete [] Grad;\n\tdelete [] wpd;\n\tdelete [] xjneg_sum;\n\tdelete [] xTd;\n\tdelete [] exp_wTx;\n\tdelete [] exp_wTx_new;\n\tdelete [] tau;\n\tdelete [] D;\n}\n\n// transpose matrix X from row format to column format\nstatic void transpose(const problem *prob, feature_node **x_space_ret, problem *prob_col)\n{\n\tint i;\n\tint l = prob->l;\n\tint n = prob->n;\n\tsize_t nnz = 0;\n\tsize_t *col_ptr = new size_t [n+1];\n\tfeature_node *x_space;\n\tprob_col->l = l;\n\tprob_col->n = n;\n\tprob_col->y = new double[l];\n\tprob_col->x = new feature_node*[n];\n\n\tfor(i=0; i<l; i++)\n\t\tprob_col->y[i] = prob->y[i];\n\n\tfor(i=0; i<n+1; i++)\n\t\tcol_ptr[i] = 0;\n\tfor(i=0; i<l; i++)\n\t{\n\t\tfeature_node *x = prob->x[i];\n\t\twhile(x->index != -1)\n\t\t{\n\t\t\tnnz++;\n\t\t\tcol_ptr[x->index]++;\n\t\t\tx++;\n\t\t}\n\t}\n\tfor(i=1; i<n+1; i++)\n\t\tcol_ptr[i] += col_ptr[i-1] + 1;\n\n\tx_space = new feature_node[nnz+n];\n\tfor(i=0; i<n; i++)\n\t\tprob_col->x[i] = &x_space[col_ptr[i]];\n\n\tfor(i=0; i<l; i++)\n\t{\n\t\tfeature_node *x = prob->x[i];\n\t\twhile(x->index != -1)\n\t\t{\n\t\t\tint ind = x->index-1;\n\t\t\tx_space[col_ptr[ind]].index = i+1; // starts from 1\n\t\t\tx_space[col_ptr[ind]].value = x->value;\n\t\t\tcol_ptr[ind]++;\n\t\t\tx++;\n\t\t}\n\t}\n\tfor(i=0; i<n; i++)\n\t\tx_space[col_ptr[i]].index = -1;\n\n\t*x_space_ret = x_space;\n\n\tdelete [] col_ptr;\n}\n\n// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data\n// perm, length l, must be allocated before calling this subroutine\nstatic void group_classes(const problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm)\n{\n\tint l = prob->l;\n\tint max_nr_class = 16;\n\tint nr_class = 0;\n\tint *label = Malloc(int,max_nr_class);\n\tint *count = Malloc(int,max_nr_class);\n\tint *data_label = Malloc(int,l);\n\tint i;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tint this_label = (int)prob->y[i];\n\t\tint j;\n\t\tfor(j=0;j<nr_class;j++)\n\t\t{\n\t\t\tif(this_label == label[j])\n\t\t\t{\n\t\t\t\t++count[j];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tdata_label[i] = j;\n\t\tif(j == nr_class)\n\t\t{\n\t\t\tif(nr_class == max_nr_class)\n\t\t\t{\n\t\t\t\tmax_nr_class *= 2;\n\t\t\t\tlabel = (int *)realloc(label,max_nr_class*sizeof(int));\n\t\t\t\tcount = (int *)realloc(count,max_nr_class*sizeof(int));\n\t\t\t}\n\t\t\tlabel[nr_class] = this_label;\n\t\t\tcount[nr_class] = 1;\n\t\t\t++nr_class;\n\t\t}\n\t}\n\n\t//\n\t// Labels are ordered by their first occurrence in the training set. \n\t// However, for two-class sets with -1/+1 labels and -1 appears first, \n\t// we swap labels to ensure that internally the binary SVM has positive data corresponding to the +1 instances.\n\t//\n\tif (nr_class == 2 && label[0] == -1 && label[1] == 1)\n\t{\n\t\tswap(label[0],label[1]);\n\t\tswap(count[0],count[1]);\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tif(data_label[i] == 0)\n\t\t\t\tdata_label[i] = 1;\n\t\t\telse\n\t\t\t\tdata_label[i] = 0;\n\t\t}\n\t}\n\n\tint *start = Malloc(int,nr_class);\n\tstart[0] = 0;\n\tfor(i=1;i<nr_class;i++)\n\t\tstart[i] = start[i-1]+count[i-1];\n\tfor(i=0;i<l;i++)\n\t{\n\t\tperm[start[data_label[i]]] = i;\n\t\t++start[data_label[i]];\n\t}\n\tstart[0] = 0;\n\tfor(i=1;i<nr_class;i++)\n\t\tstart[i] = start[i-1]+count[i-1];\n\n\t*nr_class_ret = nr_class;\n\t*label_ret = label;\n\t*start_ret = start;\n\t*count_ret = count;\n\tfree(data_label);\n}\n\nstatic void train_one(const problem *prob, const parameter *param, double *w, double Cp, double Cn)\n{\n\tdouble eps=param->eps;\n\tint pos = 0;\n\tint neg = 0;\n\tfor(int i=0;i<prob->l;i++)\n\t\tif(prob->y[i] > 0)\n\t\t\tpos++;\n\tneg = prob->l - pos;\n\n\tdouble primal_solver_tol = eps*max(min(pos,neg), 1)/prob->l;\n\n\tfunction *fun_obj=NULL;\n\tswitch(param->solver_type)\n\t{\n\t\tcase L2R_LR:\n\t\t{\n\t\t\tdouble *C = new double[prob->l];\n\t\t\tfor(int i = 0; i < prob->l; i++)\n\t\t\t{\n\t\t\t\tif(prob->y[i] > 0)\n\t\t\t\t\tC[i] = Cp;\n\t\t\t\telse\n\t\t\t\t\tC[i] = Cn;\n\t\t\t}\n\t\t\tfun_obj=new l2r_lr_fun(prob, C);\n\t\t\tTRON tron_obj(fun_obj, primal_solver_tol);\n\t\t\ttron_obj.set_print_string(liblinear_print_string);\n\t\t\ttron_obj.tron(w);\n\t\t\tdelete fun_obj;\n\t\t\tdelete[] C;\n\t\t\tbreak;\n\t\t}\n\t\tcase L2R_L2LOSS_SVC:\n\t\t{\n\t\t\tdouble *C = new double[prob->l];\n\t\t\tfor(int i = 0; i < prob->l; i++)\n\t\t\t{\n\t\t\t\tif(prob->y[i] > 0)\n\t\t\t\t\tC[i] = Cp;\n\t\t\t\telse\n\t\t\t\t\tC[i] = Cn;\n\t\t\t}\n\t\t\tfun_obj=new l2r_l2_svc_fun(prob, C);\n\t\t\tTRON tron_obj(fun_obj, primal_solver_tol);\n\t\t\ttron_obj.set_print_string(liblinear_print_string);\n\t\t\ttron_obj.tron(w);\n\t\t\tdelete fun_obj;\n\t\t\tdelete[] C;\n\t\t\tbreak;\n\t\t}\n\t\tcase L2R_L2LOSS_SVC_DUAL:\n\t\t\tsolve_l2r_l1l2_svc(prob, w, eps, Cp, Cn, L2R_L2LOSS_SVC_DUAL);\n\t\t\tbreak;\n\t\tcase L2R_L1LOSS_SVC_DUAL:\n\t\t\tsolve_l2r_l1l2_svc(prob, w, eps, Cp, Cn, L2R_L1LOSS_SVC_DUAL);\n\t\t\tbreak;\n\t\tcase L1R_L2LOSS_SVC:\n\t\t{\n\t\t\tproblem prob_col;\n\t\t\tfeature_node *x_space = NULL;\n\t\t\ttranspose(prob, &x_space ,&prob_col);\n\t\t\tsolve_l1r_l2_svc(&prob_col, w, primal_solver_tol, Cp, Cn);\n\t\t\tdelete [] prob_col.y;\n\t\t\tdelete [] prob_col.x;\n\t\t\tdelete [] x_space;\n\t\t\tbreak;\n\t\t}\n\t\tcase L1R_LR:\n\t\t{\n\t\t\tproblem prob_col;\n\t\t\tfeature_node *x_space = NULL;\n\t\t\ttranspose(prob, &x_space ,&prob_col);\n\t\t\tsolve_l1r_lr(&prob_col, w, primal_solver_tol, Cp, Cn);\n\t\t\tdelete [] prob_col.y;\n\t\t\tdelete [] prob_col.x;\n\t\t\tdelete [] x_space;\n\t\t\tbreak;\n\t\t}\n\t\tcase L2R_LR_DUAL:\n\t\t\tsolve_l2r_lr_dual(prob, w, eps, Cp, Cn);\n\t\t\tbreak;\n\t\tcase L2R_L2LOSS_SVR:\n\t\t{\n\t\t\tdouble *C = new double[prob->l];\n\t\t\tfor(int i = 0; i < prob->l; i++)\n\t\t\t\tC[i] = param->C;\n\n\t\t\tfun_obj=new l2r_l2_svr_fun(prob, C, param->p);\n\t\t\tTRON tron_obj(fun_obj, param->eps);\n\t\t\ttron_obj.set_print_string(liblinear_print_string);\n\t\t\ttron_obj.tron(w);\n\t\t\tdelete fun_obj;\n\t\t\tdelete[] C;\n\t\t\tbreak;\n\n\t\t}\n\t\tcase L2R_L1LOSS_SVR_DUAL:\n\t\t\tsolve_l2r_l1l2_svr(prob, w, param, L2R_L1LOSS_SVR_DUAL);\n\t\t\tbreak;\n\t\tcase L2R_L2LOSS_SVR_DUAL:\n\t\t\tsolve_l2r_l1l2_svr(prob, w, param, L2R_L2LOSS_SVR_DUAL);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfprintf(stderr, \"ERROR: unknown solver_type\\n\");\n\t\t\tbreak;\n\t}\n}\n\n//\n// Interface functions\n//\nmodel* train(const problem *prob, const parameter *param)\n{\n\tint i,j;\n\tint l = prob->l;\n\tint n = prob->n;\n\tint w_size = prob->n;\n\tmodel *model_ = Malloc(model,1);\n\n\tif(prob->bias>=0)\n\t\tmodel_->nr_feature=n-1;\n\telse\n\t\tmodel_->nr_feature=n;\n\tmodel_->param = *param;\n\tmodel_->bias = prob->bias;\n\n\tif(check_regression_model(model_))\n\t{\n\t\tmodel_->w = Malloc(double, w_size);\n\t\tmodel_->nr_class = 2;\n\t\tmodel_->label = NULL;\n\t\ttrain_one(prob, param, &model_->w[0], 0, 0);\n\t}\n\telse\n\t{\n\t\tint nr_class;\n\t\tint *label = NULL;\n\t\tint *start = NULL;\n\t\tint *count = NULL;\n\t\tint *perm = Malloc(int,l);\n\n\t\t// group training data of the same class\n\t\tgroup_classes(prob,&nr_class,&label,&start,&count,perm);\n\n\t\tmodel_->nr_class=nr_class;\n\t\tmodel_->label = Malloc(int,nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tmodel_->label[i] = label[i];\n\n\t\t// calculate weighted C\n\t\tdouble *weighted_C = Malloc(double, nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tweighted_C[i] = param->C;\n\t\tfor(i=0;i<param->nr_weight;i++)\n\t\t{\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\tif(param->weight_label[i] == label[j])\n\t\t\t\t\tbreak;\n\t\t\tif(j == nr_class)\n\t\t\t\tfprintf(stderr,\"WARNING: class label %d specified in weight is not found\\n\", param->weight_label[i]);\n\t\t\telse\n\t\t\t\tweighted_C[j] *= param->weight[i];\n\t\t}\n\n\t\t// constructing the subproblem\n\t\tfeature_node **x = Malloc(feature_node *,l);\n\t\tfor(i=0;i<l;i++)\n\t\t\tx[i] = prob->x[perm[i]];\n\n\t\tint k;\n\t\tproblem sub_prob;\n\t\tsub_prob.l = l;\n\t\tsub_prob.n = n;\n\t\tsub_prob.x = Malloc(feature_node *,sub_prob.l);\n\t\tsub_prob.y = Malloc(double,sub_prob.l);\n\n\t\tfor(k=0; k<sub_prob.l; k++)\n\t\t\tsub_prob.x[k] = x[k];\n\n\t\t// multi-class svm by Crammer and Singer\n\t\tif(param->solver_type == MCSVM_CS)\n\t\t{\n\t\t\tmodel_->w=Malloc(double, n*nr_class);\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(j=start[i];j<start[i]+count[i];j++)\n\t\t\t\t\tsub_prob.y[j] = i;\n\t\t\tSolver_MCSVM_CS Solver(&sub_prob, nr_class, weighted_C, param->eps);\n\t\t\tSolver.Solve(model_->w);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(nr_class == 2)\n\t\t\t{\n\t\t\t\tmodel_->w=Malloc(double, w_size);\n\n\t\t\t\tint e0 = start[0]+count[0];\n\t\t\t\tk=0;\n\t\t\t\tfor(; k<e0; k++)\n\t\t\t\t\tsub_prob.y[k] = +1;\n\t\t\t\tfor(; k<sub_prob.l; k++)\n\t\t\t\t\tsub_prob.y[k] = -1;\n\n\t\t\t\ttrain_one(&sub_prob, param, &model_->w[0], weighted_C[0], weighted_C[1]);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tmodel_->w=Malloc(double, w_size*nr_class);\n\t\t\t\tdouble *w=Malloc(double, w_size);\n\t\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\t{\n\t\t\t\t\tint si = start[i];\n\t\t\t\t\tint ei = si+count[i];\n\n\t\t\t\t\tk=0;\n\t\t\t\t\tfor(; k<si; k++)\n\t\t\t\t\t\tsub_prob.y[k] = -1;\n\t\t\t\t\tfor(; k<ei; k++)\n\t\t\t\t\t\tsub_prob.y[k] = +1;\n\t\t\t\t\tfor(; k<sub_prob.l; k++)\n\t\t\t\t\t\tsub_prob.y[k] = -1;\n\n\t\t\t\t\ttrain_one(&sub_prob, param, w, weighted_C[i], param->C);\n\n\t\t\t\t\tfor(int j=0;j<w_size;j++)\n\t\t\t\t\t\tmodel_->w[j*nr_class+i] = w[j];\n\t\t\t\t}\n\t\t\t\tfree(w);\n\t\t\t}\n\n\t\t}\n\n\t\tfree(x);\n\t\tfree(label);\n\t\tfree(start);\n\t\tfree(count);\n\t\tfree(perm);\n\t\tfree(sub_prob.x);\n\t\tfree(sub_prob.y);\n\t\tfree(weighted_C);\n\t}\n\treturn model_;\n}\n\nvoid cross_validation(const problem *prob, const parameter *param, int nr_fold, double *target)\n{\n\tint i;\n\tint *fold_start;\n\tint l = prob->l;\n\tint *perm = Malloc(int,l);\n\tif (nr_fold > l)\n\t{\n\t\tnr_fold = l;\n\t\tfprintf(stderr,\"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\\n\");\n\t}\n\tfold_start = Malloc(int,nr_fold+1);\n\tfor(i=0;i<l;i++) perm[i]=i;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tint j = i+rand()%(l-i);\n\t\tswap(perm[i],perm[j]);\n\t}\n\tfor(i=0;i<=nr_fold;i++)\n\t\tfold_start[i]=i*l/nr_fold;\n\n\tfor(i=0;i<nr_fold;i++)\n\t{\n\t\tint begin = fold_start[i];\n\t\tint end = fold_start[i+1];\n\t\tint j,k;\n\t\tstruct problem subprob;\n\n\t\tsubprob.bias = prob->bias;\n\t\tsubprob.n = prob->n;\n\t\tsubprob.l = l-(end-begin);\n\t\tsubprob.x = Malloc(struct feature_node*,subprob.l);\n\t\tsubprob.y = Malloc(double,subprob.l);\n\n\t\tk=0;\n\t\tfor(j=0;j<begin;j++)\n\t\t{\n\t\t\tsubprob.x[k] = prob->x[perm[j]];\n\t\t\tsubprob.y[k] = prob->y[perm[j]];\n\t\t\t++k;\n\t\t}\n\t\tfor(j=end;j<l;j++)\n\t\t{\n\t\t\tsubprob.x[k] = prob->x[perm[j]];\n\t\t\tsubprob.y[k] = prob->y[perm[j]];\n\t\t\t++k;\n\t\t}\n\t\tstruct model *submodel = train(&subprob,param);\n\t\tfor(j=begin;j<end;j++)\n\t\t\ttarget[perm[j]] = predict(submodel,prob->x[perm[j]]);\n\t\tfree_and_destroy_model(&submodel);\n\t\tfree(subprob.x);\n\t\tfree(subprob.y);\n\t}\n\tfree(fold_start);\n\tfree(perm);\n}\n\ndouble predict_values(const struct model *model_, const struct feature_node *x, double *dec_values)\n{\n\tint idx;\n\tint n;\n\tif(model_->bias>=0)\n\t\tn=model_->nr_feature+1;\n\telse\n\t\tn=model_->nr_feature;\n\tdouble *w=model_->w;\n\tint nr_class=model_->nr_class;\n\tint i;\n\tint nr_w;\n\tif(nr_class==2 && model_->param.solver_type != MCSVM_CS)\n\t\tnr_w = 1;\n\telse\n\t\tnr_w = nr_class;\n\n\tconst feature_node *lx=x;\n\tfor(i=0;i<nr_w;i++)\n\t\tdec_values[i] = 0;\n\tfor(; (idx=lx->index)!=-1; lx++)\n\t{\n\t\t// the dimension of testing data may exceed that of training\n\t\tif(idx<=n)\n\t\t\tfor(i=0;i<nr_w;i++)\n\t\t\t\tdec_values[i] += w[(idx-1)*nr_w+i]*lx->value;\n\t}\n\n\tif(nr_class==2)\n\t{\n\t\tif(check_regression_model(model_))\n\t\t\treturn dec_values[0];\n\t\telse\n\t\t\treturn (dec_values[0]>0)?model_->label[0]:model_->label[1];\n\t}\n\telse\n\t{\n\t\tint dec_max_idx = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t{\n\t\t\tif(dec_values[i] > dec_values[dec_max_idx])\n\t\t\t\tdec_max_idx = i;\n\t\t}\n\t\treturn model_->label[dec_max_idx];\n\t}\n}\n\ndouble predict(const model *model_, const feature_node *x)\n{\n\tdouble *dec_values = Malloc(double, model_->nr_class);\n\tdouble label=predict_values(model_, x, dec_values);\n\tfree(dec_values);\n\treturn label;\n}\n\ndouble predict_probability(const struct model *model_, const struct feature_node *x, double* prob_estimates)\n{\n\tif(check_probability_model(model_))\n\t{\n\t\tint i;\n\t\tint nr_class=model_->nr_class;\n\t\tint nr_w;\n\t\tif(nr_class==2)\n\t\t\tnr_w = 1;\n\t\telse\n\t\t\tnr_w = nr_class;\n\n\t\tdouble label=predict_values(model_, x, prob_estimates);\n\t\tfor(i=0;i<nr_w;i++)\n\t\t\tprob_estimates[i]=1/(1+exp(-prob_estimates[i]));\n\n\t\tif(nr_class==2) // for binary classification\n\t\t\tprob_estimates[1]=1.-prob_estimates[0];\n\t\telse\n\t\t{\n\t\t\tdouble sum=0;\n\t\t\tfor(i=0; i<nr_class; i++)\n\t\t\t\tsum+=prob_estimates[i];\n\n\t\t\tfor(i=0; i<nr_class; i++)\n\t\t\t\tprob_estimates[i]=prob_estimates[i]/sum;\n\t\t}\n\n\t\treturn label;\n\t}\n\telse\n\t\treturn 0;\n}\n\nstatic const char *solver_type_table[]=\n{\n\t\"L2R_LR\", \"L2R_L2LOSS_SVC_DUAL\", \"L2R_L2LOSS_SVC\", \"L2R_L1LOSS_SVC_DUAL\", \"MCSVM_CS\",\n\t\"L1R_L2LOSS_SVC\", \"L1R_LR\", \"L2R_LR_DUAL\",\n\t\"\", \"\", \"\",\n\t\"L2R_L2LOSS_SVR\", \"L2R_L2LOSS_SVR_DUAL\", \"L2R_L1LOSS_SVR_DUAL\", NULL\n};\n\nint save_model(const char *model_file_name, const struct model *model_)\n{\n\tint i;\n\tint nr_feature=model_->nr_feature;\n\tint n;\n\tconst parameter& param = model_->param;\n\n\tif(model_->bias>=0)\n\t\tn=nr_feature+1;\n\telse\n\t\tn=nr_feature;\n\tint w_size = n;\n\tFILE *fp = fopen(model_file_name,\"w\");\n\tif(fp==NULL) return -1;\n\n\tchar *old_locale = strdup(setlocale(LC_ALL, NULL));\n\tsetlocale(LC_ALL, \"C\");\n\n\tint nr_w;\n\tif(model_->nr_class==2 && model_->param.solver_type != MCSVM_CS)\n\t\tnr_w=1;\n\telse\n\t\tnr_w=model_->nr_class;\n\n\tfprintf(fp, \"solver_type %s\\n\", solver_type_table[param.solver_type]);\n\tfprintf(fp, \"nr_class %d\\n\", model_->nr_class);\n\n\tif(model_->label)\n\t{\n\t\tfprintf(fp, \"label\");\n\t\tfor(i=0; i<model_->nr_class; i++)\n\t\t\tfprintf(fp, \" %d\", model_->label[i]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\n\tfprintf(fp, \"nr_feature %d\\n\", nr_feature);\n\n\tfprintf(fp, \"bias %.16g\\n\", model_->bias);\n\n\tfprintf(fp, \"w\\n\");\n\tfor(i=0; i<w_size; i++)\n\t{\n\t\tint j;\n\t\tfor(j=0; j<nr_w; j++)\n\t\t\tfprintf(fp, \"%.16g \", model_->w[i*nr_w+j]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\n\tsetlocale(LC_ALL, old_locale);\n\tfree(old_locale);\n\n\tif (ferror(fp) != 0 || fclose(fp) != 0) return -1;\n\telse return 0;\n}\n\nstruct model *load_model(const char *model_file_name)\n{\n\tFILE *fp = fopen(model_file_name,\"r\");\n\tif(fp==NULL) return NULL;\n\n\tint i;\n\tint nr_feature;\n\tint n;\n\tint nr_class;\n\tdouble bias;\n\tmodel *model_ = Malloc(model,1);\n\tparameter& param = model_->param;\n\n\tmodel_->label = NULL;\n\n\tchar *old_locale = strdup(setlocale(LC_ALL, NULL));\n\tsetlocale(LC_ALL, \"C\");\n\n\tchar cmd[81];\n\twhile(1)\n\t{\n\t\tfscanf(fp,\"%80s\",cmd);\n\t\tif(strcmp(cmd,\"solver_type\")==0)\n\t\t{\n\t\t\tfscanf(fp,\"%80s\",cmd);\n\t\t\tint i;\n\t\t\tfor(i=0;solver_type_table[i];i++)\n\t\t\t{\n\t\t\t\tif(strcmp(solver_type_table[i],cmd)==0)\n\t\t\t\t{\n\t\t\t\t\tparam.solver_type=i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(solver_type_table[i] == NULL)\n\t\t\t{\n\t\t\t\tfprintf(stderr,\"unknown solver type.\\n\");\n\n\t\t\t\tsetlocale(LC_ALL, old_locale);\n\t\t\t\tfree(model_->label);\n\t\t\t\tfree(model_);\n\t\t\t\tfree(old_locale);\n\t\t\t\treturn NULL;\n\t\t\t}\n\t\t}\n\t\telse if(strcmp(cmd,\"nr_class\")==0)\n\t\t{\n\t\t\tfscanf(fp,\"%d\",&nr_class);\n\t\t\tmodel_->nr_class=nr_class;\n\t\t}\n\t\telse if(strcmp(cmd,\"nr_feature\")==0)\n\t\t{\n\t\t\tfscanf(fp,\"%d\",&nr_feature);\n\t\t\tmodel_->nr_feature=nr_feature;\n\t\t}\n\t\telse if(strcmp(cmd,\"bias\")==0)\n\t\t{\n\t\t\tfscanf(fp,\"%lf\",&bias);\n\t\t\tmodel_->bias=bias;\n\t\t}\n\t\telse if(strcmp(cmd,\"w\")==0)\n\t\t{\n\t\t\tbreak;\n\t\t}\n\t\telse if(strcmp(cmd,\"label\")==0)\n\t\t{\n\t\t\tint nr_class = model_->nr_class;\n\t\t\tmodel_->label = Malloc(int,nr_class);\n\t\t\tfor(int i=0;i<nr_class;i++)\n\t\t\t\tfscanf(fp,\"%d\",&model_->label[i]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfprintf(stderr,\"unknown text in model file: [%s]\\n\",cmd);\n\t\t\tsetlocale(LC_ALL, old_locale);\n\t\t\tfree(model_->label);\n\t\t\tfree(model_);\n\t\t\tfree(old_locale);\n\t\t\treturn NULL;\n\t\t}\n\t}\n\n\tnr_feature=model_->nr_feature;\n\tif(model_->bias>=0)\n\t\tn=nr_feature+1;\n\telse\n\t\tn=nr_feature;\n\tint w_size = n;\n\tint nr_w;\n\tif(nr_class==2 && param.solver_type != MCSVM_CS)\n\t\tnr_w = 1;\n\telse\n\t\tnr_w = nr_class;\n\n\tmodel_->w=Malloc(double, w_size*nr_w);\n\tfor(i=0; i<w_size; i++)\n\t{\n\t\tint j;\n\t\tfor(j=0; j<nr_w; j++)\n\t\t\tfscanf(fp, \"%lf \", &model_->w[i*nr_w+j]);\n\t\tfscanf(fp, \"\\n\");\n\t}\n\n\tsetlocale(LC_ALL, old_locale);\n\tfree(old_locale);\n\n\tif (ferror(fp) != 0 || fclose(fp) != 0) return NULL;\n\n\treturn model_;\n}\n\nint get_nr_feature(const model *model_)\n{\n\treturn model_->nr_feature;\n}\n\nint get_nr_class(const model *model_)\n{\n\treturn model_->nr_class;\n}\n\nvoid get_labels(const model *model_, int* label)\n{\n\tif (model_->label != NULL)\n\t\tfor(int i=0;i<model_->nr_class;i++)\n\t\t\tlabel[i] = model_->label[i];\n}\n\n// use inline here for better performance (around 20% faster than the non-inline one)\nstatic inline double get_w_value(const struct model *model_, int idx, int label_idx) \n{\n\tint nr_class = model_->nr_class;\n\tint solver_type = model_->param.solver_type;\n\tconst double *w = model_->w;\n\n\tif(idx < 0 || idx > model_->nr_feature)\n\t\treturn 0;\n\tif(check_regression_model(model_))\n\t\treturn w[idx];\n\telse \n\t{\n\t\tif(label_idx < 0 || label_idx >= nr_class)\n\t\t\treturn 0;\n\t\tif(nr_class == 2 && solver_type != MCSVM_CS)\n\t\t{\n\t\t\tif(label_idx == 0)\n\t\t\t\treturn w[idx];\n\t\t\telse\n\t\t\t\treturn -w[idx];\n\t\t}\n\t\telse\n\t\t\treturn w[idx*nr_class+label_idx];\n\t}\n}\n\n// feat_idx: starting from 1 to nr_feature\n// label_idx: starting from 0 to nr_class-1 for classification models;\n//            for regression models, label_idx is ignored.\ndouble get_decfun_coef(const struct model *model_, int feat_idx, int label_idx)\n{\n\tif(feat_idx > model_->nr_feature)\n\t\treturn 0;\n\treturn get_w_value(model_, feat_idx-1, label_idx);\n}\n\ndouble get_decfun_bias(const struct model *model_, int label_idx)\n{\n\tint bias_idx = model_->nr_feature;\n\tdouble bias = model_->bias;\n\tif(bias <= 0)\n\t\treturn 0;\n\telse\n\t\treturn bias*get_w_value(model_, bias_idx, label_idx);\n}\n\nvoid free_model_content(struct model *model_ptr)\n{\n\tif(model_ptr->w != NULL)\n\t\tfree(model_ptr->w);\n\tif(model_ptr->label != NULL)\n\t\tfree(model_ptr->label);\n}\n\nvoid free_and_destroy_model(struct model **model_ptr_ptr)\n{\n\tstruct model *model_ptr = *model_ptr_ptr;\n\tif(model_ptr != NULL)\n\t{\n\t\tfree_model_content(model_ptr);\n\t\tfree(model_ptr);\n\t}\n}\n\nvoid destroy_param(parameter* param)\n{\n\tif(param->weight_label != NULL)\n\t\tfree(param->weight_label);\n\tif(param->weight != NULL)\n\t\tfree(param->weight);\n}\n\nconst char *check_parameter(const problem *prob, const parameter *param)\n{\n\tif(param->eps <= 0)\n\t\treturn \"eps <= 0\";\n\n\tif(param->C <= 0)\n\t\treturn \"C <= 0\";\n\n\tif(param->p < 0)\n\t\treturn \"p < 0\";\n\n\tif(param->solver_type != L2R_LR\n\t\t&& param->solver_type != L2R_L2LOSS_SVC_DUAL\n\t\t&& param->solver_type != L2R_L2LOSS_SVC\n\t\t&& param->solver_type != L2R_L1LOSS_SVC_DUAL\n\t\t&& param->solver_type != MCSVM_CS\n\t\t&& param->solver_type != L1R_L2LOSS_SVC\n\t\t&& param->solver_type != L1R_LR\n\t\t&& param->solver_type != L2R_LR_DUAL\n\t\t&& param->solver_type != L2R_L2LOSS_SVR\n\t\t&& param->solver_type != L2R_L2LOSS_SVR_DUAL\n\t\t&& param->solver_type != L2R_L1LOSS_SVR_DUAL)\n\t\treturn \"unknown solver type\";\n\n\treturn NULL;\n}\n\nint check_probability_model(const struct model *model_)\n{\n\treturn (model_->param.solver_type==L2R_LR ||\n\t\t\tmodel_->param.solver_type==L2R_LR_DUAL ||\n\t\t\tmodel_->param.solver_type==L1R_LR);\n}\n\nint check_regression_model(const struct model *model_)\n{\n\treturn (model_->param.solver_type==L2R_L2LOSS_SVR ||\n\t\t\tmodel_->param.solver_type==L2R_L1LOSS_SVR_DUAL ||\n\t\t\tmodel_->param.solver_type==L2R_L2LOSS_SVR_DUAL);\n}\n\nvoid set_print_string_function(void (*print_func)(const char*))\n{\n\tif (print_func == NULL)\n\t\tliblinear_print_string = &print_string_stdout;\n\telse\n\t\tliblinear_print_string = print_func;\n}\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/linear.def",
    "content": "LIBRARY liblinear\nEXPORTS\n\ttrain\t@1\n\tcross_validation\t@2\n\tsave_model\t@3\n\tload_model\t@4\n\tget_nr_feature\t@5\n\tget_nr_class\t@6\n\tget_labels\t@7\n\tpredict_values\t@8\n\tpredict\t@9\n\tpredict_probability\t@10\n\tfree_and_destroy_model\t@11\n\tfree_model_content\t@12\n\tdestroy_param\t@13\n\tcheck_parameter\t@14\n\tcheck_probability_model\t@15\n\tset_print_string_function\t@16\n    get_decfun_coef @17\n    get_decfun_bias @18\n    check_regression_model  @19\n"
  },
  {
    "path": "Matlab/liblinear-1.96/linear.h",
    "content": "#ifndef _LIBLINEAR_H\n#define _LIBLINEAR_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct feature_node\n{\n\tint index;\n\tdouble value;\n};\n\nstruct problem\n{\n\tint l, n;\n\tdouble *y;\n\tstruct feature_node **x;\n\tdouble bias;            /* < 0 if no bias term */  \n};\n\nenum { L2R_LR, L2R_L2LOSS_SVC_DUAL, L2R_L2LOSS_SVC, L2R_L1LOSS_SVC_DUAL, MCSVM_CS, L1R_L2LOSS_SVC, L1R_LR, L2R_LR_DUAL, L2R_L2LOSS_SVR = 11, L2R_L2LOSS_SVR_DUAL, L2R_L1LOSS_SVR_DUAL }; /* solver_type */\n\nstruct parameter\n{\n\tint solver_type;\n\n\t/* these are for training only */\n\tdouble eps;\t        /* stopping criteria */\n\tdouble C;\n\tint nr_weight;\n\tint *weight_label;\n\tdouble* weight;\n\tdouble p;\n};\n\nstruct model\n{\n\tstruct parameter param;\n\tint nr_class;\t\t/* number of classes */\n\tint nr_feature;\n\tdouble *w;\n\tint *label;\t\t/* label of each class */\n\tdouble bias;\n};\n\nstruct model* train(const struct problem *prob, const struct parameter *param);\nvoid cross_validation(const struct problem *prob, const struct parameter *param, int nr_fold, double *target);\n\ndouble predict_values(const struct model *model_, const struct feature_node *x, double* dec_values);\ndouble predict(const struct model *model_, const struct feature_node *x);\ndouble predict_probability(const struct model *model_, const struct feature_node *x, double* prob_estimates);\n\nint save_model(const char *model_file_name, const struct model *model_);\nstruct model *load_model(const char *model_file_name);\n\nint get_nr_feature(const struct model *model_);\nint get_nr_class(const struct model *model_);\nvoid get_labels(const struct model *model_, int* label);\ndouble get_decfun_coef(const struct model *model_, int feat_idx, int label_idx);\ndouble get_decfun_bias(const struct model *model_, int label_idx);\n\nvoid free_model_content(struct model *model_ptr);\nvoid free_and_destroy_model(struct model **model_ptr_ptr);\nvoid destroy_param(struct parameter *param);\n\nconst char *check_parameter(const struct problem *prob, const struct parameter *param);\nint check_probability_model(const struct model *model);\nint check_regression_model(const struct model *model);\nvoid set_print_string_function(void (*print_func) (const char*));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _LIBLINEAR_H */\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/Makefile",
    "content": "# This Makefile is used under Linux\n\nMATLABDIR ?= /usr/local/matlab\nCXX ?= g++\n#CXX = g++-3.3\nCC ?= gcc\nCFLAGS = -Wall -Wconversion -O3 -fPIC -I$(MATLABDIR)/extern/include -I..\n\nMEX = $(MATLABDIR)/bin/mex\nMEX_OPTION = CC=\"$(CXX)\" CXX=\"$(CXX)\" CFLAGS=\"$(CFLAGS)\" CXXFLAGS=\"$(CFLAGS)\"\n# comment the following line if you use MATLAB on a 32-bit computer\nMEX_OPTION += -largeArrayDims\nMEX_EXT = $(shell $(MATLABDIR)/bin/mexext)\n\nall:\tmatlab\n\nmatlab:\tbinary\n\noctave:\n\t@echo \"please type make under Octave\"\nbinary: train.$(MEX_EXT) predict.$(MEX_EXT) libsvmread.$(MEX_EXT) libsvmwrite.$(MEX_EXT)\n\ntrain.$(MEX_EXT): train.c ../linear.h ../tron.o ../linear.o linear_model_matlab.o ../blas/blas.a\n\t$(MEX) $(MEX_OPTION) train.c ../tron.o ../linear.o linear_model_matlab.o ../blas/blas.a\n\npredict.$(MEX_EXT): predict.c ../linear.h ../tron.o ../linear.o linear_model_matlab.o ../blas/blas.a\n\t$(MEX) $(MEX_OPTION) predict.c ../tron.o ../linear.o linear_model_matlab.o ../blas/blas.a\n\nlibsvmread.$(MEX_EXT):\tlibsvmread.c\n\t$(MEX) $(MEX_OPTION) libsvmread.c\n\nlibsvmwrite.$(MEX_EXT):\tlibsvmwrite.c\n\t$(MEX) $(MEX_OPTION) libsvmwrite.c\n\nlinear_model_matlab.o: linear_model_matlab.c ../linear.h\n\t$(CXX) $(CFLAGS) -c linear_model_matlab.c\n\n../linear.o: ../linear.cpp ../linear.h\n\tmake -C .. linear.o\n\n../tron.o: ../tron.cpp ../tron.h \n\tmake -C .. tron.o\n\n../blas/blas.a: ../blas/*.c ../blas/*.h\n\tmake -C ../blas OPTFLAGS='$(CFLAGS)' CC='$(CC)';\n\nclean:\n\tmake -C ../blas clean\n\trm -f *~ *.o *.mex* *.obj ../linear.o ../tron.o\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/README",
    "content": "--------------------------------------------\n--- MATLAB/OCTAVE interface of LIBLINEAR ---\n--------------------------------------------\n\nTable of Contents\n=================\n\n- Introduction\n- Installation\n- Usage\n- Returned Model Structure\n- Other Utilities\n- Examples\n- Additional Information\n\n\nIntroduction\n============\n\nThis tool provides a simple interface to LIBLINEAR, a library for\nlarge-scale regularized linear classification and regression\n(http://www.csie.ntu.edu.tw/~cjlin/liblinear). It is very easy to use\nas the usage and the way of specifying parameters are the same as that\nof LIBLINEAR.\n\nInstallation\n============\n\nOn Windows systems, pre-built binary files are already in the\ndirectory '..\\windows', so no need to conduct installation. Now we\nprovide binary files only for 64bit MATLAB on Windows. If you would\nlike to re-build the package, please rely on the following steps.\n\nWe recommend using make.m on both MATLAB and OCTAVE. Just type 'make'\nto build 'libsvmread.mex', 'libsvmwrite.mex', 'train.mex', and\n'predict.mex'.\n\nOn MATLAB or Octave:\n\n        >> make\n\nIf make.m does not work on MATLAB (especially for Windows), try 'mex\n-setup' to choose a suitable compiler for mex. Make sure your compiler\nis accessible and workable. Then type 'make' to start the\ninstallation.\n\nExample:\n\n        matlab>> mex -setup\n        (ps: MATLAB will show the following messages to setup default compiler.)\n        Please choose your compiler for building external interface (MEX) files:\n        Would you like mex to locate installed compilers [y]/n? y\n        Select a compiler:\n        [1] Microsoft Visual C/C++ version 7.1 in C:\\Program Files\\Microsoft Visual Studio\n        [0] None\n        Compiler: 1\n        Please verify your choices:\n        Compiler: Microsoft Visual C/C++ 7.1\n        Location: C:\\Program Files\\Microsoft Visual Studio\n        Are these correct?([y]/n): y\n\n        matlab>> make\n\nOn Unix systems, if neither make.m nor 'mex -setup' works, please use\nMakefile and type 'make' in a command window. Note that we assume\nyour MATLAB is installed in '/usr/local/matlab'. If not, please change\nMATLABDIR in Makefile.\n\nExample:\n        linux> make\n\nTo use octave, type 'make octave':\n\nExample:\n        linux> make octave\n\nFor a list of supported/compatible compilers for MATLAB, please check\nthe following page:\n\nhttp://www.mathworks.com/support/compilers/current_release/\n\nUsage\n=====\n\nmatlab> model = train(training_label_vector, training_instance_matrix [,'liblinear_options', 'col']);\n\n        -training_label_vector:\n            An m by 1 vector of training labels. (type must be double)\n        -training_instance_matrix:\n            An m by n matrix of m training instances with n features.\n            It must be a sparse matrix. (type must be double)\n        -liblinear_options:\n            A string of training options in the same format as that of LIBLINEAR.\n        -col:\n            if 'col' is set, each column of training_instance_matrix is a data instance. Otherwise each row is a data instance.\n\nmatlab> [predicted_label, accuracy, decision_values/prob_estimates] = predict(testing_label_vector, testing_instance_matrix, model [, 'liblinear_options', 'col']);\nmatlab> [predicted_label] = predict(testing_label_vector, testing_instance_matrix, model [, 'liblinear_options', 'col']);\n\n        -testing_label_vector:\n            An m by 1 vector of prediction labels. If labels of test\n            data are unknown, simply use any random values. (type must be double)\n        -testing_instance_matrix:\n            An m by n matrix of m testing instances with n features.\n            It must be a sparse matrix. (type must be double)\n        -model:\n            The output of train.\n        -liblinear_options:\n            A string of testing options in the same format as that of LIBLINEAR.\n        -col:\n            if 'col' is set, each column of testing_instance_matrix is a data instance. Otherwise each row is a data instance.\n\nReturned Model Structure\n========================\n\nThe 'train' function returns a model which can be used for future\nprediction.  It is a structure and is organized as [Parameters, nr_class,\nnr_feature, bias, Label, w]:\n\n        -Parameters: Parameters\n        -nr_class: number of classes; = 2 for regression\n        -nr_feature: number of features in training data (without including the bias term)\n        -bias: If >= 0, we assume one additional feature is added to the end\n            of each data instance.\n        -Label: label of each class; empty for regression\n        -w: a nr_w-by-n matrix for the weights, where n is nr_feature\n            or nr_feature+1 depending on the existence of the bias term.\n            nr_w is 1 if nr_class=2 and -s is not 4 (i.e., not\n            multi-class svm by Crammer and Singer). It is\n            nr_class otherwise.\n\nIf the '-v' option is specified, cross validation is conducted and the\nreturned model is just a scalar: cross-validation accuracy for \nclassification and mean-squared error for regression.\n\nResult of Prediction\n====================\n\nThe function 'predict' has three outputs. The first one,\npredicted_label, is a vector of predicted labels. The second output,\naccuracy, is a vector including accuracy (for classification), mean\nsquared error, and squared correlation coefficient (for regression).\nThe third is a matrix containing decision values or probability\nestimates (if '-b 1' is specified). If k is the number of classes\nand k' is the number of classifiers (k'=1 if k=2, otherwise k'=k), for decision values,\neach row includes results of k' binary linear classifiers. For probabilities,\neach row contains k values indicating the probability that the testing instance is in\neach class. Note that the order of classes here is the same as 'Label'\nfield in the model structure.\n\nOther Utilities\n===============\n\nA matlab function libsvmread reads files in LIBSVM format: \n\n[label_vector, instance_matrix] = libsvmread('data.txt'); \n\nTwo outputs are labels and instances, which can then be used as inputs\nof svmtrain or svmpredict. \n\nA matlab function libsvmwrite writes Matlab matrix to a file in LIBSVM format:\n\nlibsvmwrite('data.txt', label_vector, instance_matrix]\n\nThe instance_matrix must be a sparse matrix. (type must be double)\nFor windows, `libsvmread.mexw64' and `libsvmwrite.mexw64' are ready in \nthe directory `..\\windows'.\n\nThese codes are prepared by Rong-En Fan and Kai-Wei Chang from National\nTaiwan University.\n\nExamples\n========\n\nTrain and test on the provided data heart_scale:\n\nmatlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');\nmatlab> model = train(heart_scale_label, heart_scale_inst, '-c 1');\nmatlab> [predict_label, accuracy, dec_values] = predict(heart_scale_label, heart_scale_inst, model); % test the training data\n\nNote that for testing, you can put anything in the testing_label_vector.\n\nFor probability estimates, you need '-b 1' only in the testing phase:\n\nmatlab> [predict_label, accuracy, prob_estimates] = predict(heart_scale_label, heart_scale_inst, model, '-b 1');\n\nAdditional Information\n======================\n\nPlease cite LIBLINEAR as follows\n\nR.-E. Fan, K.-W. Chang, C.-J. Hsieh, X.-R. Wang, and C.-J. Lin.\nLIBLINEAR: A Library for Large Linear Classification, Journal of\nMachine Learning Research 9(2008), 1871-1874.Software available at\nhttp://www.csie.ntu.edu.tw/~cjlin/liblinear\n\nFor any question, please contact Chih-Jen Lin <cjlin@csie.ntu.edu.tw>.\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/libsvmread.c",
    "content": "#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <errno.h>\n\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif \n#endif \n#ifndef max\n#define max(x,y) (((x)>(y))?(x):(y))\n#endif\n#ifndef min\n#define min(x,y) (((x)<(y))?(x):(y))\n#endif\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\"Usage: [label_vector, instance_matrix] = libsvmread('filename');\\n\"\n\t);\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nstatic char *line;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\t\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line, max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\n// read in a problem (in libsvm format)\nvoid read_problem(const char *filename, int nlhs, mxArray *plhs[])\n{\n\tint max_index, min_index, inst_max_index;\n\tsize_t elements, k, i, l=0;\n\tFILE *fp = fopen(filename,\"r\");\n\tchar *endptr;\n\tmwIndex *ir, *jc;\n\tdouble *labels, *samples;\n\n\tif(fp == NULL)\n\t{\n\t\tmexPrintf(\"can't open input file %s\\n\",filename);\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tmax_line_len = 1024;\n\tline = (char *) malloc(max_line_len*sizeof(char));\n\n\tmax_index = 0;\n\tmin_index = 1; // our index starts from 1\n\telements = 0;\n\twhile(readline(fp) != NULL)\n\t{\n\t\tchar *idx, *val;\n\t\t// features\n\t\tint index = 0;\n\n\t\tinst_max_index = -1; // strtol gives 0 if wrong format, and precomputed kernel has <index> start from 0\n\t\tstrtok(line,\" \\t\"); // label\n\t\twhile (1)\n\t\t{\n\t\t\tidx = strtok(NULL,\":\"); // index:value\n\t\t\tval = strtok(NULL,\" \\t\");\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\n\t\t\terrno = 0;\n\t\t\tindex = (int) strtol(idx,&endptr,10);\n\t\t\tif(endptr == idx || errno != 0 || *endptr != '\\0' || index <= inst_max_index)\n\t\t\t{\n\t\t\t\tmexPrintf(\"Wrong input format at line %d\\n\",l+1);\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse\n\t\t\t\tinst_max_index = index;\n\n\t\t\tmin_index = min(min_index, index);\n\t\t\telements++;\n\t\t}\n\t\tmax_index = max(max_index, inst_max_index);\n\t\tl++;\n\t}\n\trewind(fp);\n\n\t// y\n\tplhs[0] = mxCreateDoubleMatrix(l, 1, mxREAL);\n\t// x^T\n\tif (min_index <= 0)\n\t\tplhs[1] = mxCreateSparse(max_index-min_index+1, l, elements, mxREAL);\n\telse\n\t\tplhs[1] = mxCreateSparse(max_index, l, elements, mxREAL);\n\n\tlabels = mxGetPr(plhs[0]);\n\tsamples = mxGetPr(plhs[1]);\n\tir = mxGetIr(plhs[1]);\n\tjc = mxGetJc(plhs[1]);\n\n\tk=0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tchar *idx, *val, *label;\n\t\tjc[i] = k;\n\n\t\treadline(fp);\n\n\t\tlabel = strtok(line,\" \\t\\n\");\n\t\tif(label == NULL)\n\t\t{\n\t\t\tmexPrintf(\"Empty line at line %d\\n\",i+1);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\t\tlabels[i] = strtod(label,&endptr);\n\t\tif(endptr == label || *endptr != '\\0')\n\t\t{\n\t\t\tmexPrintf(\"Wrong input format at line %d\\n\",i+1);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\t// features\n\t\twhile(1)\n\t\t{\n\t\t\tidx = strtok(NULL,\":\");\n\t\t\tval = strtok(NULL,\" \\t\");\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\n\t\t\tir[k] = (mwIndex) (strtol(idx,&endptr,10) - min_index); // precomputed kernel has <index> start from 0\n\n\t\t\terrno = 0;\n\t\t\tsamples[k] = strtod(val,&endptr);\n\t\t\tif (endptr == val || errno != 0 || (*endptr != '\\0' && !isspace(*endptr)))\n\t\t\t{\n\t\t\t\tmexPrintf(\"Wrong input format at line %d\\n\",i+1);\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t++k;\n\t\t}\n\t}\n\tjc[l] = k;\n\n\tfclose(fp);\n\tfree(line);\n\n\t{\n\t\tmxArray *rhs[1], *lhs[1];\n\t\trhs[0] = plhs[1];\n\t\tif(mexCallMATLAB(1, lhs, 1, rhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose problem\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\t\tplhs[1] = lhs[0];\n\t}\n}\n\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tchar filename[256];\n\n\tif(nrhs != 1 || nlhs != 2)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tmxGetString(prhs[0], filename, mxGetN(prhs[0]) + 1);\n\n\tif(filename == NULL)\n\t{\n\t\tmexPrintf(\"Error: filename is NULL\\n\");\n\t\treturn;\n\t}\n\n\tread_problem(filename, nlhs, plhs);\n\n\treturn;\n}\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/libsvmwrite.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\"Usage: libsvmwrite('filename', label_vector, instance_matrix);\\n\"\n\t);\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nvoid libsvmwrite(const char *filename, const mxArray *label_vec, const mxArray *instance_mat)\n{\n\tFILE *fp = fopen(filename,\"w\");\n\tmwIndex *ir, *jc, k, low, high;\n\tsize_t i, l, label_vector_row_num;\n\tdouble *samples, *labels;\n\tmxArray *instance_mat_col; // instance sparse matrix in column format\n\n\tif(fp ==NULL)\n\t{\n\t\tmexPrintf(\"can't open output file %s\\n\",filename);\t\t\t\n\t\treturn;\n\t}\n\n\t// transpose instance matrix\n\t{\n\t\tmxArray *prhs[1], *plhs[1];\n\t\tprhs[0] = mxDuplicateArray(instance_mat);\n\t\tif(mexCallMATLAB(1, plhs, 1, prhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose instance matrix\\n\");\n\t\t\treturn;\n\t\t}\n\t\tinstance_mat_col = plhs[0];\n\t\tmxDestroyArray(prhs[0]);\n\t}\n\n\t// the number of instance\n\tl = mxGetN(instance_mat_col);\n\tlabel_vector_row_num = mxGetM(label_vec);\n\n\tif(label_vector_row_num!=l)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\treturn;\n\t}\n\n\t// each column is one instance\n\tlabels = mxGetPr(label_vec);\n\tsamples = mxGetPr(instance_mat_col);\n\tir = mxGetIr(instance_mat_col);\n\tjc = mxGetJc(instance_mat_col);\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tfprintf(fp,\"%g\", labels[i]);\n\n\t\tlow = jc[i], high = jc[i+1];\n\t\tfor(k=low;k<high;k++)\n\t\t\tfprintf(fp,\" %lu:%g\", (size_t)ir[k]+1, samples[k]);\t\t\n\n\t\tfprintf(fp,\"\\n\");\n\t}\n\n\tfclose(fp);\n\treturn;\n}\n\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tif(nlhs > 0)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\t\n\t// Transform the input Matrix to libsvm format\n\tif(nrhs == 3)\n\t{\n\t\tchar filename[256];\n\t\tif(!mxIsDouble(prhs[1]) || !mxIsDouble(prhs[2]))\n\t\t{\n\t\t\tmexPrintf(\"Error: label vector and instance matrix must be double\\n\");\t\t\t\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmxGetString(prhs[0], filename, mxGetN(prhs[0])+1);\t\t\n\n\t\tif(mxIsSparse(prhs[2]))\n\t\t\tlibsvmwrite(filename, prhs[1], prhs[2]);\n\t\telse\n\t\t{\n\t\t\tmexPrintf(\"Instance_matrix must be sparse\\n\");\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\telse\n\t{\n\t\texit_with_help();\t\t\n\t\treturn;\n\t}\n}\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/linear_model_matlab.c",
    "content": "#include <stdlib.h>\n#include <string.h>\n#include \"../linear.h\"\n\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n\n#define NUM_OF_RETURN_FIELD 6\n\nstatic const char *field_names[] = {\n\t\"Parameters\",\n\t\"nr_class\",\n\t\"nr_feature\",\n\t\"bias\",\n\t\"Label\",\n\t\"w\",\n};\n\nconst char *model_to_matlab_structure(mxArray *plhs[], struct model *model_)\n{\n\tint i;\n\tint nr_w;\n\tdouble *ptr;\n\tmxArray *return_model, **rhs;\n\tint out_id = 0;\n\tint n, w_size;\n\n\trhs = (mxArray **)mxMalloc(sizeof(mxArray *)*NUM_OF_RETURN_FIELD);\n\n\t// Parameters\n\t// for now, only solver_type is needed\n\trhs[out_id] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model_->param.solver_type;\n\tout_id++;\n\n\t// nr_class\n\trhs[out_id] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model_->nr_class;\n\tout_id++;\n\n\tif(model_->nr_class==2 && model_->param.solver_type != MCSVM_CS)\n\t\tnr_w=1;\n\telse\n\t\tnr_w=model_->nr_class;\n\n\t// nr_feature\n\trhs[out_id] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model_->nr_feature;\n\tout_id++;\n\n\t// bias\n\trhs[out_id] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model_->bias;\n\tout_id++;\n\n\tif(model_->bias>=0)\n\t\tn=model_->nr_feature+1;\n\telse\n\t\tn=model_->nr_feature;\n\n\tw_size = n;\n\t// Label\n\tif(model_->label)\n\t{\n\t\trhs[out_id] = mxCreateDoubleMatrix(model_->nr_class, 1, mxREAL);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tfor(i = 0; i < model_->nr_class; i++)\n\t\t\tptr[i] = model_->label[i];\n\t}\n\telse\n\t\trhs[out_id] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\tout_id++;\n\n\t// w\n\trhs[out_id] = mxCreateDoubleMatrix(nr_w, w_size, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tfor(i = 0; i < w_size*nr_w; i++)\n\t\tptr[i]=model_->w[i];\n\tout_id++;\n\n\t/* Create a struct matrix contains NUM_OF_RETURN_FIELD fields */\n\treturn_model = mxCreateStructMatrix(1, 1, NUM_OF_RETURN_FIELD, field_names);\n\n\t/* Fill struct matrix with input arguments */\n\tfor(i = 0; i < NUM_OF_RETURN_FIELD; i++)\n\t\tmxSetField(return_model,0,field_names[i],mxDuplicateArray(rhs[i]));\n\t/* return */\n\tplhs[0] = return_model;\n\tmxFree(rhs);\n\n\treturn NULL;\n}\n\nconst char *matlab_matrix_to_model(struct model *model_, const mxArray *matlab_struct)\n{\n\tint i, num_of_fields;\n\tint nr_w;\n\tdouble *ptr;\n\tint id = 0;\n\tint n, w_size;\n\tmxArray **rhs;\n\n\tnum_of_fields = mxGetNumberOfFields(matlab_struct);\n\trhs = (mxArray **) mxMalloc(sizeof(mxArray *)*num_of_fields);\n\n\tfor(i=0;i<num_of_fields;i++)\n\t\trhs[i] = mxGetFieldByNumber(matlab_struct, 0, i);\n\n\tmodel_->nr_class=0;\n\tnr_w=0;\n\tmodel_->nr_feature=0;\n\tmodel_->w=NULL;\n\tmodel_->label=NULL;\n\n\t// Parameters\n\tptr = mxGetPr(rhs[id]);\n\tmodel_->param.solver_type = (int)ptr[0];\n\tid++;\n\n\t// nr_class\n\tptr = mxGetPr(rhs[id]);\n\tmodel_->nr_class = (int)ptr[0];\n\tid++;\n\n\tif(model_->nr_class==2 && model_->param.solver_type != MCSVM_CS)\n\t\tnr_w=1;\n\telse\n\t\tnr_w=model_->nr_class;\n\n\t// nr_feature\n\tptr = mxGetPr(rhs[id]);\n\tmodel_->nr_feature = (int)ptr[0];\n\tid++;\n\n\t// bias\n\tptr = mxGetPr(rhs[id]);\n\tmodel_->bias = ptr[0];\n\tid++;\n\n\tif(model_->bias>=0)\n\t\tn=model_->nr_feature+1;\n\telse\n\t\tn=model_->nr_feature;\n\tw_size = n;\n\n\t// Label\n\tif(mxIsEmpty(rhs[id]) == 0)\n\t{\n\t\tmodel_->label = Malloc(int, model_->nr_class);\n\t\tptr = mxGetPr(rhs[id]);\n\t\tfor(i=0;i<model_->nr_class;i++)\n\t\t\tmodel_->label[i] = (int)ptr[i];\n\t}\n\tid++;\n\n\tptr = mxGetPr(rhs[id]);\n\tmodel_->w=Malloc(double, w_size*nr_w);\n\tfor(i = 0; i < w_size*nr_w; i++)\n\t\tmodel_->w[i]=ptr[i];\n\tid++;\n\tmxFree(rhs);\n\n\treturn NULL;\n}\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/linear_model_matlab.h",
    "content": "const char *model_to_matlab_structure(mxArray *plhs[], struct model *model_);\nconst char *matlab_matrix_to_model(struct model *model_, const mxArray *matlab_struct);\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/make.m",
    "content": "% This make.m is for MATLAB and OCTAVE under Windows, Mac, and Unix\n\ntry\n\tType = ver;\n\t% This part is for OCTAVE\n\tif(strcmp(Type(1).Name, 'Octave') == 1)\n\t\tmex libsvmread.c\n\t\tmex libsvmwrite.c\n\t\tmex train.c linear_model_matlab.c ../linear.cpp ../tron.cpp ../blas/daxpy.c ../blas/ddot.c ../blas/dnrm2.c ../blas/dscal.c\n\t\tmex predict.c linear_model_matlab.c ../linear.cpp ../tron.cpp ../blas/daxpy.c ../blas/ddot.c ../blas/dnrm2.c ../blas/dscal.c\n\t% This part is for MATLAB\n\t% Add -largeArrayDims on 64-bit machines of MATLAB\n\telse\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims libsvmread.c\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims libsvmwrite.c\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims train.c linear_model_matlab.c ../linear.cpp ../tron.cpp ../blas/daxpy.c ../blas/ddot.c ../blas/dnrm2.c ../blas/dscal.c\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims predict.c linear_model_matlab.c ../linear.cpp ../tron.cpp ../blas/daxpy.c ../blas/ddot.c ../blas/dnrm2.c ../blas/dscal.c\n\tend\ncatch\n\tfprintf('If make.m fails, please check README about detailed instructions.\\n');\nend\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/predict.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../linear.h\"\n\n#include \"mex.h\"\n#include \"linear_model_matlab.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\n#define CMD_LEN 2048\n\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n\nint print_null(const char *s,...) {}\nint (*info)(const char *fmt,...);\n\nint col_format_flag;\n\nvoid read_sparse_instance(const mxArray *prhs, int index, struct feature_node *x, int feature_number, double bias)\n{\n\tint j;\n\tmwIndex *ir, *jc, low, high, i;\n\tdouble *samples;\n\n\tir = mxGetIr(prhs);\n\tjc = mxGetJc(prhs);\n\tsamples = mxGetPr(prhs);\n\n\t// each column is one instance\n\tj = 0;\n\tlow = jc[index], high = jc[index+1];\n\tfor(i=low; i<high && (int) (ir[i])<feature_number; i++)\n\t{\n\t\tx[j].index = (int) ir[i]+1;\n\t\tx[j].value = samples[i];\n\t\tj++;\n\t}\n\tif(bias>=0)\n\t{\n\t\tx[j].index = feature_number+1;\n\t\tx[j].value = bias;\n\t\tj++;\n\t}\n\tx[j].index = -1;\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nvoid do_predict(int nlhs, mxArray *plhs[], const mxArray *prhs[], struct model *model_, const int predict_probability_flag)\n{\n\tint label_vector_row_num, label_vector_col_num;\n\tint feature_number, testing_instance_number;\n\tint instance_index;\n\tdouble *ptr_label, *ptr_predict_label;\n\tdouble *ptr_prob_estimates, *ptr_dec_values, *ptr;\n\tstruct feature_node *x;\n\tmxArray *pplhs[1]; // instance sparse matrix in row format\n\tmxArray *tplhs[3]; // temporary storage for plhs[]\n\n\tint correct = 0;\n\tint total = 0;\n\tdouble error = 0;\n\tdouble sump = 0, sumt = 0, sumpp = 0, sumtt = 0, sumpt = 0;\n\n\tint nr_class=get_nr_class(model_);\n\tint nr_w;\n\tdouble *prob_estimates=NULL;\n\n\tif(nr_class==2 && model_->param.solver_type!=MCSVM_CS)\n\t\tnr_w=1;\n\telse\n\t\tnr_w=nr_class;\n\n\t// prhs[1] = testing instance matrix\n\tfeature_number = get_nr_feature(model_);\n\ttesting_instance_number = (int) mxGetM(prhs[1]);\n\tif(col_format_flag)\n\t{\n\t\tfeature_number = (int) mxGetM(prhs[1]);\n\t\ttesting_instance_number = (int) mxGetN(prhs[1]);\n\t}\n\n\tlabel_vector_row_num = (int) mxGetM(prhs[0]);\n\tlabel_vector_col_num = (int) mxGetN(prhs[0]);\n\n\tif(label_vector_row_num!=testing_instance_number)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\tif(label_vector_col_num!=1)\n\t{\n\t\tmexPrintf(\"label (1st argument) should be a vector (# of column is 1).\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tptr_label    = mxGetPr(prhs[0]);\n\n\t// transpose instance matrix\n\tif(col_format_flag)\n\t\tpplhs[0] = (mxArray *)prhs[1];\n\telse\n\t{\n\t\tmxArray *pprhs[1];\n\t\tpprhs[0] = mxDuplicateArray(prhs[1]);\n\t\tif(mexCallMATLAB(1, pplhs, 1, pprhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose testing instance matrix\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\t}\n\n\n\tprob_estimates = Malloc(double, nr_class);\n\n\ttplhs[0] = mxCreateDoubleMatrix(testing_instance_number, 1, mxREAL);\n\tif(predict_probability_flag)\n\t\ttplhs[2] = mxCreateDoubleMatrix(testing_instance_number, nr_class, mxREAL);\n\telse\n\t\ttplhs[2] = mxCreateDoubleMatrix(testing_instance_number, nr_w, mxREAL);\n\n\tptr_predict_label = mxGetPr(tplhs[0]);\n\tptr_prob_estimates = mxGetPr(tplhs[2]);\n\tptr_dec_values = mxGetPr(tplhs[2]);\n\tx = Malloc(struct feature_node, feature_number+2);\n\tfor(instance_index=0;instance_index<testing_instance_number;instance_index++)\n\t{\n\t\tint i;\n\t\tdouble target_label, predict_label;\n\n\t\ttarget_label = ptr_label[instance_index];\n\n\t\t// prhs[1] and prhs[1]^T are sparse\n\t\tread_sparse_instance(pplhs[0], instance_index, x, feature_number, model_->bias);\n\n\t\tif(predict_probability_flag)\n\t\t{\n\t\t\tpredict_label = predict_probability(model_, x, prob_estimates);\n\t\t\tptr_predict_label[instance_index] = predict_label;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tptr_prob_estimates[instance_index + i * testing_instance_number] = prob_estimates[i];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdouble *dec_values = Malloc(double, nr_class);\n\t\t\tpredict_label = predict_values(model_, x, dec_values);\n\t\t\tptr_predict_label[instance_index] = predict_label;\n\n\t\t\tfor(i=0;i<nr_w;i++)\n\t\t\t\tptr_dec_values[instance_index + i * testing_instance_number] = dec_values[i];\n\t\t\tfree(dec_values);\n\t\t}\n\n\t\tif(predict_label == target_label)\n\t\t\t++correct;\n\t\terror += (predict_label-target_label)*(predict_label-target_label);\n\t\tsump += predict_label;\n\t\tsumt += target_label;\n\t\tsumpp += predict_label*predict_label;\n\t\tsumtt += target_label*target_label;\n\t\tsumpt += predict_label*target_label;\n\n\t\t++total;\n\t}\n\n\tif(check_regression_model(model_))\n\t{\n\t\tinfo(\"Mean squared error = %g (regression)\\n\",error/total);\n\t\tinfo(\"Squared correlation coefficient = %g (regression)\\n\",\n\t\t\t((total*sumpt-sump*sumt)*(total*sumpt-sump*sumt))/\n\t\t\t((total*sumpp-sump*sump)*(total*sumtt-sumt*sumt))\n\t\t\t);\n\t}\n\telse\n\t\tinfo(\"Accuracy = %g%% (%d/%d)\\n\", (double) correct/total*100,correct,total);\n\n\t// return accuracy, mean squared error, squared correlation coefficient\n\ttplhs[1] = mxCreateDoubleMatrix(3, 1, mxREAL);\n\tptr = mxGetPr(tplhs[1]);\n\tptr[0] = (double)correct/total*100;\n\tptr[1] = error/total;\n\tptr[2] = ((total*sumpt-sump*sumt)*(total*sumpt-sump*sumt))/\n\t\t\t\t((total*sumpp-sump*sump)*(total*sumtt-sumt*sumt));\n\n\tfree(x);\n\tif(prob_estimates != NULL)\n\t\tfree(prob_estimates);\n\n\tswitch(nlhs)\n\t{\n\t\tcase 3:\n\t\t\tplhs[2] = tplhs[2];\n\t\t\tplhs[1] = tplhs[1];\n\t\tcase 1:\n\t\tcase 0:\n\t\t\tplhs[0] = tplhs[0];\n\t}\n}\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\t\t\"Usage: [predicted_label, accuracy, decision_values/prob_estimates] = predict(testing_label_vector, testing_instance_matrix, model, 'liblinear_options','col')\\n\"\n\t\t\t\"       [predicted_label] = predict(testing_label_vector, testing_instance_matrix, model, 'liblinear_options','col')\\n\"\n\t\t\t\"liblinear_options:\\n\"\n\t\t\t\"-b probability_estimates: whether to output probability estimates, 0 or 1 (default 0); currently for logistic regression only\\n\"\n\t\t\t\"-q quiet mode (no outputs)\\n\"\n\t\t\t\"col: if 'col' is setted testing_instance_matrix is parsed in column format, otherwise is in row format\\n\"\n\t\t\t\"Returns:\\n\"\n\t\t\t\"  predicted_label: prediction output vector.\\n\"\n\t\t\t\"  accuracy: a vector with accuracy, mean squared error, squared correlation coefficient.\\n\"\n\t\t\t\"  prob_estimates: If selected, probability estimate vector.\\n\"\n\t\t\t);\n}\n\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tint prob_estimate_flag = 0;\n\tstruct model *model_;\n\tchar cmd[CMD_LEN];\n\tinfo = &mexPrintf;\n\tcol_format_flag = 0;\n\n\tif(nlhs == 2 || nlhs > 3 || nrhs > 5 || nrhs < 3)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\tif(nrhs == 5)\n\t{\n\t\tmxGetString(prhs[4], cmd, mxGetN(prhs[4])+1);\n\t\tif(strcmp(cmd, \"col\") == 0)\n\t\t{\n\t\t\tcol_format_flag = 1;\n\t\t}\n\t}\n\n\tif(!mxIsDouble(prhs[0]) || !mxIsDouble(prhs[1])) {\n\t\tmexPrintf(\"Error: label vector and instance matrix must be double\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tif(mxIsStruct(prhs[2]))\n\t{\n\t\tconst char *error_msg;\n\n\t\t// parse options\n\t\tif(nrhs>=4)\n\t\t{\n\t\t\tint i, argc = 1;\n\t\t\tchar *argv[CMD_LEN/2];\n\n\t\t\t// put options in argv[]\n\t\t\tmxGetString(prhs[3], cmd,  mxGetN(prhs[3]) + 1);\n\t\t\tif((argv[argc] = strtok(cmd, \" \")) != NULL)\n\t\t\t\twhile((argv[++argc] = strtok(NULL, \" \")) != NULL)\n\t\t\t\t\t;\n\n\t\t\tfor(i=1;i<argc;i++)\n\t\t\t{\n\t\t\t\tif(argv[i][0] != '-') break;\n\t\t\t\t++i;\n\t\t\t\tif(i>=argc && argv[i-1][1] != 'q')\n\t\t\t\t{\n\t\t\t\t\texit_with_help();\n\t\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch(argv[i-1][1])\n\t\t\t\t{\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tprob_estimate_flag = atoi(argv[i]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tinfo = &print_null;\n\t\t\t\t\t\ti--;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmexPrintf(\"unknown option\\n\");\n\t\t\t\t\t\texit_with_help();\n\t\t\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmodel_ = Malloc(struct model, 1);\n\t\terror_msg = matlab_matrix_to_model(model_, prhs[2]);\n\t\tif(error_msg)\n\t\t{\n\t\t\tmexPrintf(\"Error: can't read model: %s\\n\", error_msg);\n\t\t\tfree_and_destroy_model(&model_);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(prob_estimate_flag)\n\t\t{\n\t\t\tif(!check_probability_model(model_))\n\t\t\t{\n\t\t\t\tmexPrintf(\"probability output is only supported for logistic regression\\n\");\n\t\t\t\tprob_estimate_flag=0;\n\t\t\t}\n\t\t}\n\n\t\tif(mxIsSparse(prhs[1]))\n\t\t\tdo_predict(nlhs, plhs, prhs, model_, prob_estimate_flag);\n\t\telse\n\t\t{\n\t\t\tmexPrintf(\"Testing_instance_matrix must be sparse; \"\n\t\t\t\t\"use sparse(Testing_instance_matrix) first\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t}\n\n\t\t// destroy model_\n\t\tfree_and_destroy_model(&model_);\n\t}\n\telse\n\t{\n\t\tmexPrintf(\"model file should be a struct array\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t}\n\n\treturn;\n}\n"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/train.c",
    "content": "#include <stdio.h>\n#include <math.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include \"../linear.h\"\n\n#include \"mex.h\"\n#include \"linear_model_matlab.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\n#define CMD_LEN 2048\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n#define INF HUGE_VAL\n\nvoid print_null(const char *s) {}\nvoid print_string_matlab(const char *s) {mexPrintf(s);}\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\"Usage: model = train(training_label_vector, training_instance_matrix, 'liblinear_options', 'col');\\n\"\n\t\"liblinear_options:\\n\"\n\t\"-s type : set type of solver (default 1)\\n\"\n\t\"  for multi-class classification\\n\"\n\t\"\t 0 -- L2-regularized logistic regression (primal)\\n\"\n\t\"\t 1 -- L2-regularized L2-loss support vector classification (dual)\\n\"\t\n\t\"\t 2 -- L2-regularized L2-loss support vector classification (primal)\\n\"\n\t\"\t 3 -- L2-regularized L1-loss support vector classification (dual)\\n\"\n\t\"\t 4 -- support vector classification by Crammer and Singer\\n\"\n\t\"\t 5 -- L1-regularized L2-loss support vector classification\\n\"\n\t\"\t 6 -- L1-regularized logistic regression\\n\"\n\t\"\t 7 -- L2-regularized logistic regression (dual)\\n\"\n\t\"  for regression\\n\"\n\t\"\t11 -- L2-regularized L2-loss support vector regression (primal)\\n\"\n\t\"\t12 -- L2-regularized L2-loss support vector regression (dual)\\n\"\n\t\"\t13 -- L2-regularized L1-loss support vector regression (dual)\\n\"\n\t\"-c cost : set the parameter C (default 1)\\n\"\n\t\"-p epsilon : set the epsilon in loss function of SVR (default 0.1)\\n\"\n\t\"-e epsilon : set tolerance of termination criterion\\n\"\n\t\"\t-s 0 and 2\\n\" \n\t\"\t\t|f'(w)|_2 <= eps*min(pos,neg)/l*|f'(w0)|_2,\\n\" \n\t\"\t\twhere f is the primal function and pos/neg are # of\\n\" \n\t\"\t\tpositive/negative data (default 0.01)\\n\"\n\t\"\t-s 11\\n\"\n\t\"\t\t|f'(w)|_2 <= eps*|f'(w0)|_2 (default 0.001)\\n\" \n\t\"\t-s 1, 3, 4 and 7\\n\"\n\t\"\t\tDual maximal violation <= eps; similar to libsvm (default 0.1)\\n\"\n\t\"\t-s 5 and 6\\n\"\n\t\"\t\t|f'(w)|_1 <= eps*min(pos,neg)/l*|f'(w0)|_1,\\n\"\n\t\"\t\twhere f is the primal function (default 0.01)\\n\"\n\t\"\t-s 12 and 13\\n\"\n\t\"\t\t|f'(alpha)|_1 <= eps |f'(alpha0)|,\\n\"\n\t\"\t\twhere f is the dual function (default 0.1)\\n\"\n\t\"-B bias : if bias >= 0, instance x becomes [x; bias]; if < 0, no bias term added (default -1)\\n\"\n\t\"-wi weight: weights adjust the parameter C of different classes (see README for details)\\n\"\n\t\"-v n: n-fold cross validation mode\\n\"\n\t\"-q : quiet mode (no outputs)\\n\"\n\t\"col:\\n\"\n\t\"\tif 'col' is setted, training_instance_matrix is parsed in column format, otherwise is in row format\\n\"\n\t);\n}\n\n// liblinear arguments\nstruct parameter param;\t\t// set by parse_command_line\nstruct problem prob;\t\t// set by read_problem\nstruct model *model_;\nstruct feature_node *x_space;\nint cross_validation_flag;\nint col_format_flag;\nint nr_fold;\ndouble bias;\n\ndouble do_cross_validation()\n{\n\tint i;\n\tint total_correct = 0;\n\tdouble total_error = 0;\n\tdouble sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;\n\tdouble *target = Malloc(double, prob.l);\n\tdouble retval = 0.0;\n\n\tcross_validation(&prob,&param,nr_fold,target);\n\tif(param.solver_type == L2R_L2LOSS_SVR || \n\t   param.solver_type == L2R_L1LOSS_SVR_DUAL || \n\t   param.solver_type == L2R_L2LOSS_SVR_DUAL)\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n                {\n                        double y = prob.y[i];\n                        double v = target[i];\n                        total_error += (v-y)*(v-y);\n                        sumv += v;\n                        sumy += y;\n                        sumvv += v*v;\n                        sumyy += y*y;\n                        sumvy += v*y;\n                }\n                printf(\"Cross Validation Mean squared error = %g\\n\",total_error/prob.l);\n                printf(\"Cross Validation Squared correlation coefficient = %g\\n\",\n                        ((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/\n                        ((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))\n                        );\n\t\tretval = total_error/prob.l;\n\t}\n\telse\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t\tif(target[i] == prob.y[i])\n\t\t\t\t++total_correct;\n\t\tprintf(\"Cross Validation Accuracy = %g%%\\n\",100.0*total_correct/prob.l);\n\t\tretval = 100.0*total_correct/prob.l;\n\t}\n\n\tfree(target);\n\treturn retval;\n}\n\n// nrhs should be 3\nint parse_command_line(int nrhs, const mxArray *prhs[], char *model_file_name)\n{\n\tint i, argc = 1;\n\tchar cmd[CMD_LEN];\n\tchar *argv[CMD_LEN/2];\n\tvoid (*print_func)(const char *) = print_string_matlab;\t// default printing to matlab display\n\n\t// default values\n\tparam.solver_type = L2R_L2LOSS_SVC_DUAL;\n\tparam.C = 1;\n\tparam.eps = INF; // see setting below\n\tparam.p = 0.1;\n\tparam.nr_weight = 0;\n\tparam.weight_label = NULL;\n\tparam.weight = NULL;\n\tcross_validation_flag = 0;\n\tcol_format_flag = 0;\n\tbias = -1;\n\n\n\tif(nrhs <= 1)\n\t\treturn 1;\n\n\tif(nrhs == 4)\n\t{\n\t\tmxGetString(prhs[3], cmd, mxGetN(prhs[3])+1);\n\t\tif(strcmp(cmd, \"col\") == 0)\n\t\t\tcol_format_flag = 1;\n\t}\n\n\t// put options in argv[]\n\tif(nrhs > 2)\n\t{\n\t\tmxGetString(prhs[2], cmd,  mxGetN(prhs[2]) + 1);\n\t\tif((argv[argc] = strtok(cmd, \" \")) != NULL)\n\t\t\twhile((argv[++argc] = strtok(NULL, \" \")) != NULL)\n\t\t\t\t;\n\t}\n\n\t// parse options\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\t++i;\n\t\tif(i>=argc && argv[i-1][1] != 'q') // since option -q has no parameter\n\t\t\treturn 1;\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 's':\n\t\t\t\tparam.solver_type = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tparam.C = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'p':\n\t\t\t\tparam.p = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'e':\n\t\t\t\tparam.eps = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'B':\n\t\t\t\tbias = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'v':\n\t\t\t\tcross_validation_flag = 1;\n\t\t\t\tnr_fold = atoi(argv[i]);\n\t\t\t\tif(nr_fold < 2)\n\t\t\t\t{\n\t\t\t\t\tmexPrintf(\"n-fold cross validation: n must >= 2\\n\");\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'w':\n\t\t\t\t++param.nr_weight;\n\t\t\t\tparam.weight_label = (int *) realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\tparam.weight = (double *) realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(&argv[i-1][2]);\n\t\t\t\tparam.weight[param.nr_weight-1] = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tprint_func = &print_null;\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmexPrintf(\"unknown option\\n\");\n\t\t\t\treturn 1;\n\t\t}\n\t}\n\n\tset_print_string_function(print_func);\n\n\tif(param.eps == INF)\n\t{\n\t\tswitch(param.solver_type)\n\t\t{\n\t\t\tcase L2R_LR: \n\t\t\tcase L2R_L2LOSS_SVC:\n\t\t\t\tparam.eps = 0.01;\n\t\t\t\tbreak;\n\t\t\tcase L2R_L2LOSS_SVR:\n\t\t\t\tparam.eps = 0.001;\n\t\t\t\tbreak;\n\t\t\tcase L2R_L2LOSS_SVC_DUAL: \n\t\t\tcase L2R_L1LOSS_SVC_DUAL: \n\t\t\tcase MCSVM_CS: \n\t\t\tcase L2R_LR_DUAL: \n\t\t\t\tparam.eps = 0.1;\n\t\t\t\tbreak;\n\t\t\tcase L1R_L2LOSS_SVC: \n\t\t\tcase L1R_LR:\n\t\t\t\tparam.eps = 0.01;\n\t\t\t\tbreak;\n\t\t\tcase L2R_L1LOSS_SVR_DUAL:\n\t\t\tcase L2R_L2LOSS_SVR_DUAL:\n\t\t\t\tparam.eps = 0.1;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn 0;\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nint read_problem_sparse(const mxArray *label_vec, const mxArray *instance_mat)\n{\n\tmwIndex *ir, *jc, low, high, k;\n\t// using size_t due to the output type of matlab functions\n\tsize_t i, j, l, elements, max_index, label_vector_row_num;\n\tmwSize num_samples;\n\tdouble *samples, *labels;\n\tmxArray *instance_mat_col; // instance sparse matrix in column format\n\n\tprob.x = NULL;\n\tprob.y = NULL;\n\tx_space = NULL;\n\n\tif(col_format_flag)\n\t\tinstance_mat_col = (mxArray *)instance_mat;\n\telse\n\t{\n\t\t// transpose instance matrix\n\t\tmxArray *prhs[1], *plhs[1];\n\t\tprhs[0] = mxDuplicateArray(instance_mat);\n\t\tif(mexCallMATLAB(1, plhs, 1, prhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose training instance matrix\\n\");\n\t\t\treturn -1;\n\t\t}\n\t\tinstance_mat_col = plhs[0];\n\t\tmxDestroyArray(prhs[0]);\n\t}\n\n\t// the number of instance\n\tl = mxGetN(instance_mat_col);\n\tlabel_vector_row_num = mxGetM(label_vec);\n\tprob.l = (int) l;\n\n\tif(label_vector_row_num!=l)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\treturn -1;\n\t}\n\t\n\t// each column is one instance\n\tlabels = mxGetPr(label_vec);\n\tsamples = mxGetPr(instance_mat_col);\n\tir = mxGetIr(instance_mat_col);\n\tjc = mxGetJc(instance_mat_col);\n\n\tnum_samples = mxGetNzmax(instance_mat_col);\n\n\telements = num_samples + l*2;\n\tmax_index = mxGetM(instance_mat_col);\n\n\tprob.y = Malloc(double, l);\n\tprob.x = Malloc(struct feature_node*, l);\n\tx_space = Malloc(struct feature_node, elements);\n\n\tprob.bias=bias;\n\n\tj = 0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tprob.x[i] = &x_space[j];\n\t\tprob.y[i] = labels[i];\n\t\tlow = jc[i], high = jc[i+1];\n\t\tfor(k=low;k<high;k++)\n\t\t{\n\t\t\tx_space[j].index = (int) ir[k]+1;\n\t\t\tx_space[j].value = samples[k];\n\t\t\tj++;\n\t \t}\n\t\tif(prob.bias>=0)\n\t\t{\n\t\t\tx_space[j].index = (int) max_index+1;\n\t\t\tx_space[j].value = prob.bias;\n\t\t\tj++;\n\t\t}\n\t\tx_space[j++].index = -1;\n\t}\n\n\tif(prob.bias>=0)\n\t\tprob.n = (int) max_index+1;\n\telse\n\t\tprob.n = (int) max_index;\n\n\treturn 0;\n}\n\n// Interface function of matlab\n// now assume prhs[0]: label prhs[1]: features\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tconst char *error_msg;\n\t// fix random seed to have same results for each run\n\t// (for cross validation)\n\tsrand(1);\n\n\tif(nlhs > 1)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\t// Transform the input Matrix to libsvm format\n\tif(nrhs > 1 && nrhs < 5)\n\t{\n\t\tint err=0;\n\n\t\tif(!mxIsDouble(prhs[0]) || !mxIsDouble(prhs[1]))\n\t\t{\n\t\t\tmexPrintf(\"Error: label vector and instance matrix must be double\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(mxIsSparse(prhs[0]))\n\t\t{\n\t\t\tmexPrintf(\"Error: label vector should not be in sparse format\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(parse_command_line(nrhs, prhs, NULL))\n\t\t{\n\t\t\texit_with_help();\n\t\t\tdestroy_param(&param);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(mxIsSparse(prhs[1]))\n\t\t\terr = read_problem_sparse(prhs[0], prhs[1]);\n\t\telse\n\t\t{\n\t\t\tmexPrintf(\"Training_instance_matrix must be sparse; \"\n\t\t\t\t\"use sparse(Training_instance_matrix) first\\n\");\n\t\t\tdestroy_param(&param);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\t// train's original code\n\t\terror_msg = check_parameter(&prob, &param);\n\n\t\tif(err || error_msg)\n\t\t{\n\t\t\tif (error_msg != NULL)\n\t\t\t\tmexPrintf(\"Error: %s\\n\", error_msg);\n\t\t\tdestroy_param(&param);\n\t\t\tfree(prob.y);\n\t\t\tfree(prob.x);\n\t\t\tfree(x_space);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(cross_validation_flag)\n\t\t{\n\t\t\tdouble *ptr;\n\t\t\tplhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\t\t\tptr = mxGetPr(plhs[0]);\n\t\t\tptr[0] = do_cross_validation();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst char *error_msg;\n\n\t\t\tmodel_ = train(&prob, &param);\n\t\t\terror_msg = model_to_matlab_structure(plhs, model_);\n\t\t\tif(error_msg)\n\t\t\t\tmexPrintf(\"Error: can't convert libsvm model to matrix structure: %s\\n\", error_msg);\n\t\t\tfree_and_destroy_model(&model_);\n\t\t}\n\t\tdestroy_param(&param);\n\t\tfree(prob.y);\n\t\tfree(prob.x);\n\t\tfree(x_space);\n\t}\n\telse\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n}\n"
  },
  {
    "path": "Matlab/liblinear-1.96/predict.c",
    "content": "#include <stdio.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include \"linear.h\"\n\nint print_null(const char *s,...) {return 0;}\n\nstatic int (*info)(const char *fmt,...) = &printf;\n\nstruct feature_node *x;\nint max_nr_attr = 64;\n\nstruct model* model_;\nint flag_predict_probability=0;\n\nvoid exit_input_error(int line_num)\n{\n\tfprintf(stderr,\"Wrong input format at line %d\\n\", line_num);\n\texit(1);\n}\n\nstatic char *line = NULL;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line,max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\nvoid do_predict(FILE *input, FILE *output)\n{\n\tint correct = 0;\n\tint total = 0;\n\tdouble error = 0;\n\tdouble sump = 0, sumt = 0, sumpp = 0, sumtt = 0, sumpt = 0;\n\n\tint nr_class=get_nr_class(model_);\n\tdouble *prob_estimates=NULL;\n\tint j, n;\n\tint nr_feature=get_nr_feature(model_);\n\tif(model_->bias>=0)\n\t\tn=nr_feature+1;\n\telse\n\t\tn=nr_feature;\n\n\tif(flag_predict_probability)\n\t{\n\t\tint *labels;\n\n\t\tif(!check_probability_model(model_))\n\t\t{\n\t\t\tfprintf(stderr, \"probability output is only supported for logistic regression\\n\");\n\t\t\texit(1);\n\t\t}\n\n\t\tlabels=(int *) malloc(nr_class*sizeof(int));\n\t\tget_labels(model_,labels);\n\t\tprob_estimates = (double *) malloc(nr_class*sizeof(double));\n\t\tfprintf(output,\"labels\");\n\t\tfor(j=0;j<nr_class;j++)\n\t\t\tfprintf(output,\" %d\",labels[j]);\n\t\tfprintf(output,\"\\n\");\n\t\tfree(labels);\n\t}\n\n\tmax_line_len = 1024;\n\tline = (char *)malloc(max_line_len*sizeof(char));\n\twhile(readline(input) != NULL)\n\t{\n\t\tint i = 0;\n\t\tdouble target_label, predict_label;\n\t\tchar *idx, *val, *label, *endptr;\n\t\tint inst_max_index = 0; // strtol gives 0 if wrong format\n\n\t\tlabel = strtok(line,\" \\t\\n\");\n\t\tif(label == NULL) // empty line\n\t\t\texit_input_error(total+1);\n\n\t\ttarget_label = strtod(label,&endptr);\n\t\tif(endptr == label || *endptr != '\\0')\n\t\t\texit_input_error(total+1);\n\n\t\twhile(1)\n\t\t{\n\t\t\tif(i>=max_nr_attr-2)\t// need one more for index = -1\n\t\t\t{\n\t\t\t\tmax_nr_attr *= 2;\n\t\t\t\tx = (struct feature_node *) realloc(x,max_nr_attr*sizeof(struct feature_node));\n\t\t\t}\n\n\t\t\tidx = strtok(NULL,\":\");\n\t\t\tval = strtok(NULL,\" \\t\");\n\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\t\t\terrno = 0;\n\t\t\tx[i].index = (int) strtol(idx,&endptr,10);\n\t\t\tif(endptr == idx || errno != 0 || *endptr != '\\0' || x[i].index <= inst_max_index)\n\t\t\t\texit_input_error(total+1);\n\t\t\telse\n\t\t\t\tinst_max_index = x[i].index;\n\n\t\t\terrno = 0;\n\t\t\tx[i].value = strtod(val,&endptr);\n\t\t\tif(endptr == val || errno != 0 || (*endptr != '\\0' && !isspace(*endptr)))\n\t\t\t\texit_input_error(total+1);\n\n\t\t\t// feature indices larger than those in training are not used\n\t\t\tif(x[i].index <= nr_feature)\n\t\t\t\t++i;\n\t\t}\n\n\t\tif(model_->bias>=0)\n\t\t{\n\t\t\tx[i].index = n;\n\t\t\tx[i].value = model_->bias;\n\t\t\ti++;\n\t\t}\n\t\tx[i].index = -1;\n\n\t\tif(flag_predict_probability)\n\t\t{\n\t\t\tint j;\n\t\t\tpredict_label = predict_probability(model_,x,prob_estimates);\n\t\t\tfprintf(output,\"%g\",predict_label);\n\t\t\tfor(j=0;j<model_->nr_class;j++)\n\t\t\t\tfprintf(output,\" %g\",prob_estimates[j]);\n\t\t\tfprintf(output,\"\\n\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tpredict_label = predict(model_,x);\n\t\t\tfprintf(output,\"%g\\n\",predict_label);\n\t\t}\n\n\t\tif(predict_label == target_label)\n\t\t\t++correct;\n\t\terror += (predict_label-target_label)*(predict_label-target_label);\n\t\tsump += predict_label;\n\t\tsumt += target_label;\n\t\tsumpp += predict_label*predict_label;\n\t\tsumtt += target_label*target_label;\n\t\tsumpt += predict_label*target_label;\n\t\t++total;\n\t}\n\tif(check_regression_model(model_))\n\t{\n\t\tinfo(\"Mean squared error = %g (regression)\\n\",error/total);\n\t\tinfo(\"Squared correlation coefficient = %g (regression)\\n\",\n\t\t\t((total*sumpt-sump*sumt)*(total*sumpt-sump*sumt))/\n\t\t\t((total*sumpp-sump*sump)*(total*sumtt-sumt*sumt))\n\t\t\t);\n\t}\n\telse\n\t\tinfo(\"Accuracy = %g%% (%d/%d)\\n\",(double) correct/total*100,correct,total);\n\tif(flag_predict_probability)\n\t\tfree(prob_estimates);\n}\n\nvoid exit_with_help()\n{\n\tprintf(\n\t\"Usage: predict [options] test_file model_file output_file\\n\"\n\t\"options:\\n\"\n\t\"-b probability_estimates: whether to output probability estimates, 0 or 1 (default 0); currently for logistic regression only\\n\"\n\t\"-q : quiet mode (no outputs)\\n\"\n\t);\n\texit(1);\n}\n\nint main(int argc, char **argv)\n{\n\tFILE *input, *output;\n\tint i;\n\n\t// parse options\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\t++i;\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 'b':\n\t\t\t\tflag_predict_probability = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tinfo = &print_null;\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfprintf(stderr,\"unknown option: -%c\\n\", argv[i-1][1]);\n\t\t\t\texit_with_help();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif(i>=argc)\n\t\texit_with_help();\n\n\tinput = fopen(argv[i],\"r\");\n\tif(input == NULL)\n\t{\n\t\tfprintf(stderr,\"can't open input file %s\\n\",argv[i]);\n\t\texit(1);\n\t}\n\n\toutput = fopen(argv[i+2],\"w\");\n\tif(output == NULL)\n\t{\n\t\tfprintf(stderr,\"can't open output file %s\\n\",argv[i+2]);\n\t\texit(1);\n\t}\n\n\tif((model_=load_model(argv[i+1]))==0)\n\t{\n\t\tfprintf(stderr,\"can't open model file %s\\n\",argv[i+1]);\n\t\texit(1);\n\t}\n\n\tx = (struct feature_node *) malloc(max_nr_attr*sizeof(struct feature_node));\n\tdo_predict(input, output);\n\tfree_and_destroy_model(&model_);\n\tfree(line);\n\tfree(x);\n\tfclose(input);\n\tfclose(output);\n\treturn 0;\n}\n\n"
  },
  {
    "path": "Matlab/liblinear-1.96/python/Makefile",
    "content": "all = lib\n\nlib:\n\tmake -C .. lib\n"
  },
  {
    "path": "Matlab/liblinear-1.96/python/README",
    "content": "-------------------------------------\n--- Python interface of LIBLINEAR ---\n-------------------------------------\n\nTable of Contents\n=================\n\n- Introduction\n- Installation\n- Quick Start\n- Design Description\n- Data Structures\n- Utility Functions\n- Additional Information\n\nIntroduction\n============\n\nPython (http://www.python.org/) is a programming language suitable for rapid\ndevelopment. This tool provides a simple Python interface to LIBLINEAR, a library\nfor support vector machines (http://www.csie.ntu.edu.tw/~cjlin/liblinear). The\ninterface is very easy to use as the usage is the same as that of LIBLINEAR. The\ninterface is developed with the built-in Python library \"ctypes.\"\n\nInstallation\n============\n\nOn Unix systems, type\n\n> make\n\nThe interface needs only LIBLINEAR shared library, which is generated by\nthe above command. We assume that the shared library is on the LIBLINEAR\nmain directory or in the system path.\n\nFor windows, the shared library liblinear.dll is ready in the directory\n`..\\windows'. You can also copy it to the system directory (e.g.,\n`C:\\WINDOWS\\system32\\' for Windows XP). To regenerate the shared library,\nplease follow the instruction of building windows binaries in LIBLINEAR README.\n\nQuick Start\n===========\n\nThere are two levels of usage. The high-level one uses utility functions\nin liblinearutil.py and the usage is the same as the LIBLINEAR MATLAB interface.\n\n>>> from liblinearutil import *\n# Read data in LIBSVM format\n>>> y, x = svm_read_problem('../heart_scale')\n>>> m = train(y[:200], x[:200], '-c 4')\n>>> p_label, p_acc, p_val = predict(y[200:], x[200:], m)\n\n# Construct problem in python format\n# Dense data\n>>> y, x = [1,-1], [[1,0,1], [-1,0,-1]]\n# Sparse data\n>>> y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}]\n>>> prob  = problem(y, x)\n>>> param = parameter('-s 0 -c 4 -B 1')\n>>> m = train(prob, param)\n\n# Other utility functions\n>>> save_model('heart_scale.model', m)\n>>> m = load_model('heart_scale.model')\n>>> p_label, p_acc, p_val = predict(y, x, m, '-b 1')\n>>> ACC, MSE, SCC = evaluations(y, p_label)\n\n# Getting online help\n>>> help(train)\n\nThe low-level use directly calls C interfaces imported by liblinear.py. Note that\nall arguments and return values are in ctypes format. You need to handle them\ncarefully.\n\n>>> from liblinear import *\n>>> prob = problem([1,-1], [{1:1, 3:1}, {1:-1,3:-1}])\n>>> param = parameter('-c 4')\n>>> m = liblinear.train(prob, param) # m is a ctype pointer to a model\n# Convert a Python-format instance to feature_nodearray, a ctypes structure\n>>> x0, max_idx = gen_feature_nodearray({1:1, 3:1})\n>>> label = liblinear.predict(m, x0)\n\nDesign Description\n==================\n\nThere are two files liblinear.py and liblinearutil.py, which respectively correspond to\nlow-level and high-level use of the interface.\n\nIn liblinear.py, we adopt the Python built-in library \"ctypes,\" so that\nPython can directly access C structures and interface functions defined\nin linear.h.\n\nWhile advanced users can use structures/functions in liblinear.py, to\navoid handling ctypes structures, in liblinearutil.py we provide some easy-to-use\nfunctions. The usage is similar to LIBLINEAR MATLAB interface.\n\nData Structures\n===============\n\nThree data structures derived from linear.h are node, problem, and\nparameter. They all contain fields with the same names in\nlinear.h. Access these fields carefully because you directly use a C structure\ninstead of a Python object. The following description introduces additional\nfields and methods.\n\nBefore using the data structures, execute the following command to load the\nLIBLINEAR shared library:\n\n    >>> from liblinear import *\n\n- class feature_node:\n\n    Construct a feature_node.\n\n    >>> node = feature_node(idx, val)\n\n    idx: an integer indicates the feature index.\n\n    val: a float indicates the feature value.\n\n    Show the index and the value of a node.\n\n    >>> print(node) \n\n- Function: gen_feature_nodearray(xi [,feature_max=None [,issparse=True]])\n\n    Generate a feature vector from a Python list/tuple or a dictionary:\n\n    >>> xi, max_idx = gen_feature_nodearray({1:1, 3:1, 5:-2})\n\n    xi: the returned feature_nodearray (a ctypes structure)\n\n    max_idx: the maximal feature index of xi\n\n    issparse: if issparse == True, zero feature values are removed. The default\n              value is True for the sparsity.\n\n    feature_max: if feature_max is assigned, features with indices larger than\n                 feature_max are removed.\n\n- class problem:\n\n    Construct a problem instance\n\n    >>> prob = problem(y, x [,bias=-1])\n\n    y: a Python list/tuple of l labels (type must be int/double).\n\n    x: a Python list/tuple of l data instances. Each element of x must be\n       an instance of list/tuple/dictionary type.\n\n    bias: if bias >= 0, instance x becomes [x; bias]; if < 0, no bias term \n          added (default -1)\n\n    You can also modify the bias value by\n\n    >>> prob.set_bias(1)\n\n    Note that if your x contains sparse data (i.e., dictionary), the internal\n    ctypes data format is still sparse.\n\n- class parameter:\n\n    Construct a parameter instance\n\n    >>> param = parameter('training_options')\n\n    If 'training_options' is empty, LIBLINEAR default values are applied.\n\n    Set param to LIBLINEAR default values.\n\n    >>> param.set_to_default_values()\n\n    Parse a string of options.\n\n    >>> param.parse_options('training_options')\n\n    Show values of parameters.\n\n    >>> print(param)\n\n- class model:\n\n    There are two ways to obtain an instance of model:\n\n    >>> model_ = train(y, x)\n    >>> model_ = load_model('model_file_name')\n\n    Note that the returned structure of interface functions\n    liblinear.train and liblinear.load_model is a ctypes pointer of\n    model, which is different from the model object returned\n    by train and load_model in liblinearutil.py. We provide a\n    function toPyModel for the conversion:\n\n    >>> model_ptr = liblinear.train(prob, param)\n    >>> model_ = toPyModel(model_ptr)\n\n    If you obtain a model in a way other than the above approaches,\n    handle it carefully to avoid memory leak or segmentation fault.\n\n    Some interface functions to access LIBLINEAR models are wrapped as\n    members of the class model:\n\n    >>> nr_feature =  model_.get_nr_feature()\n    >>> nr_class = model_.get_nr_class()\n    >>> class_labels = model_.get_labels()\n    >>> is_prob_model = model_.is_probability_model()\n    >>> is_regression_model = model_.is_regression_model()\n\n    The decision function is W*x + b, where\n        W is an nr_class-by-nr_feature matrix, and\n        b is a vector of size nr_class.\n    To access W_kj (i.e., coefficient for the k-th class and the j-th feature)\n    and b_k (i.e., bias for the k-th class), use the following functions.\n\n    >>> W_kj = model_.get_decfun_coef(feat_idx=j, label_idx=k)\n    >>> b_k = model_.get_decfun_bias(label_idx=k)\n\n    We also provide a function to extract w_k (i.e., the k-th row of W) and\n    b_k directly as follows.\n\n    >>> [w_k, b_k] = model_.get_decfun(label_idx=k)\n\n    Note that w_k is a Python list of length nr_feature, which means that\n        w_k[0] = W_k1.\n    For regression models, W is just a vector of length nr_feature. Either\n\tset label_idx=0 or omit the label_idx parameter to access the coefficients.\n\n    >>> W_j = model_.get_decfun_coef(feat_idx=j)\n    >>> b = model_.get_decfun_bias()\n    >>> [W, b] = model_.get_decfun()\n\n    Note that in get_decfun_coef, get_decfun_bias, and get_decfun, feat_idx\n    starts from 1, while label_idx starts from 0. If label_idx is not in the\n    valid range (0 to nr_class-1), then a NaN will be returned; and if feat_idx\n    is not in the valid range (1 to nr_feature), then a zero value will be\n    returned. For regression models, label_idx is ignored.\n\nUtility Functions\n=================\n\nTo use utility functions, type\n\n    >>> from liblinearutil import *\n\nThe above command loads\n    train()            : train a linear model\n    predict()          : predict testing data\n    svm_read_problem() : read the data from a LIBSVM-format file.\n    load_model()       : load a LIBLINEAR model.\n    save_model()       : save model to a file.\n    evaluations()      : evaluate prediction results.\n\n- Function: train\n\n    There are three ways to call train()\n\n    >>> model = train(y, x [, 'training_options'])\n    >>> model = train(prob [, 'training_options'])\n    >>> model = train(prob, param)\n\n    y: a list/tuple of l training labels (type must be int/double).\n\n    x: a list/tuple of l training instances. The feature vector of\n       each training instance is an instance of list/tuple or dictionary.\n\n    training_options: a string in the same form as that for LIBLINEAR command\n                      mode.\n\n    prob: a problem instance generated by calling\n          problem(y, x).\n\n    param: a parameter instance generated by calling\n           parameter('training_options')\n\n    model: the returned model instance. See linear.h for details of this\n           structure. If '-v' is specified, cross validation is\n           conducted and the returned model is just a scalar: cross-validation\n           accuracy for classification and mean-squared error for regression.\n\n    To train the same data many times with different\n    parameters, the second and the third ways should be faster..\n\n    Examples:\n\n    >>> y, x = svm_read_problem('../heart_scale')\n    >>> prob = problem(y, x)\n    >>> param = parameter('-s 3 -c 5 -q')\n    >>> m = train(y, x, '-c 5')\n    >>> m = train(prob, '-w1 5 -c 5')\n    >>> m = train(prob, param)\n    >>> CV_ACC = train(y, x, '-v 3')\n\n- Function: predict\n\n    To predict testing data with a model, use\n\n    >>> p_labs, p_acc, p_vals = predict(y, x, model [,'predicting_options'])\n\n    y: a list/tuple of l true labels (type must be int/double). It is used\n       for calculating the accuracy. Use [] if true labels are\n       unavailable.\n\n    x: a list/tuple of l predicting instances. The feature vector of\n       each predicting instance is an instance of list/tuple or dictionary.\n\n    predicting_options: a string of predicting options in the same format as\n                        that of LIBLINEAR.\n\n    model: a model instance.\n\n    p_labels: a list of predicted labels\n\n    p_acc: a tuple including accuracy (for classification), mean\n           squared error, and squared correlation coefficient (for\n           regression).\n\n    p_vals: a list of decision values or probability estimates (if '-b 1' \n            is specified). If k is the number of classes, for decision values,\n            each element includes results of predicting k binary-class\n            SVMs. If k = 2 and solver is not MCSVM_CS, only one decision value \n            is returned. For probabilities, each element contains k values \n            indicating the probability that the testing instance is in each class.\n            Note that the order of classes here is the same as 'model.label'\n            field in the model structure.\n\n    Example:\n\n    >>> m = train(y, x, '-c 5')\n    >>> p_labels, p_acc, p_vals = predict(y, x, m)\n\n- Functions: svm_read_problem/load_model/save_model\n\n    See the usage by examples:\n\n    >>> y, x = svm_read_problem('data.txt')\n    >>> m = load_model('model_file')\n    >>> save_model('model_file', m)\n\n- Function: evaluations\n\n    Calculate some evaluations using the true values (ty) and predicted\n    values (pv):\n\n    >>> (ACC, MSE, SCC) = evaluations(ty, pv)\n\n    ty: a list of true values.\n\n    pv: a list of predict values.\n\n    ACC: accuracy.\n\n    MSE: mean squared error.\n\n    SCC: squared correlation coefficient.\n\n\nAdditional Information\n======================\n\nThis interface was written by Hsiang-Fu Yu from Department of Computer\nScience, National Taiwan University. If you find this tool useful, please\ncite LIBLINEAR as follows\n\nR.-E. Fan, K.-W. Chang, C.-J. Hsieh, X.-R. Wang, and C.-J. Lin.\nLIBLINEAR: A Library for Large Linear Classification, Journal of\nMachine Learning Research 9(2008), 1871-1874. Software available at\nhttp://www.csie.ntu.edu.tw/~cjlin/liblinear\n\nFor any question, please contact Chih-Jen Lin <cjlin@csie.ntu.edu.tw>,\nor check the FAQ page:\n\nhttp://www.csie.ntu.edu.tw/~cjlin/liblinear/faq.html\n"
  },
  {
    "path": "Matlab/liblinear-1.96/python/liblinear.py",
    "content": "#!/usr/bin/env python\n\nfrom ctypes import *\nfrom ctypes.util import find_library\nfrom os import path\nimport sys\n\n__all__ = ['liblinear', 'feature_node', 'gen_feature_nodearray', 'problem',\n           'parameter', 'model', 'toPyModel', 'L2R_LR', 'L2R_L2LOSS_SVC_DUAL',\n           'L2R_L2LOSS_SVC', 'L2R_L1LOSS_SVC_DUAL', 'MCSVM_CS', \n           'L1R_L2LOSS_SVC', 'L1R_LR', 'L2R_LR_DUAL', 'L2R_L2LOSS_SVR', \n           'L2R_L2LOSS_SVR_DUAL', 'L2R_L1LOSS_SVR_DUAL', 'print_null']\n\ntry:\n\tdirname = path.dirname(path.abspath(__file__))\n\tif sys.platform == 'win32':\n\t\tliblinear = CDLL(path.join(dirname, r'..\\windows\\liblinear.dll'))\n\telse:\n\t\tliblinear = CDLL(path.join(dirname, '../liblinear.so.2'))\nexcept:\n# For unix the prefix 'lib' is not considered.\n\tif find_library('linear'):\n\t\tliblinear = CDLL(find_library('linear'))\n\telif find_library('liblinear'):\n\t\tliblinear = CDLL(find_library('liblinear'))\n\telse:\n\t\traise Exception('LIBLINEAR library not found.')\n\nL2R_LR = 0\nL2R_L2LOSS_SVC_DUAL = 1 \nL2R_L2LOSS_SVC = 2 \nL2R_L1LOSS_SVC_DUAL = 3\nMCSVM_CS = 4 \nL1R_L2LOSS_SVC = 5 \nL1R_LR = 6 \nL2R_LR_DUAL = 7  \nL2R_L2LOSS_SVR = 11\nL2R_L2LOSS_SVR_DUAL = 12\nL2R_L1LOSS_SVR_DUAL = 13\n\nPRINT_STRING_FUN = CFUNCTYPE(None, c_char_p)\ndef print_null(s): \n\treturn \n\ndef genFields(names, types): \n\treturn list(zip(names, types))\n\ndef fillprototype(f, restype, argtypes): \n\tf.restype = restype\n\tf.argtypes = argtypes\n\nclass feature_node(Structure):\n\t_names = [\"index\", \"value\"]\n\t_types = [c_int, c_double]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __str__(self):\n\t\treturn '%d:%g' % (self.index, self.value)\n\ndef gen_feature_nodearray(xi, feature_max=None, issparse=True):\n\tif isinstance(xi, dict):\n\t\tindex_range = xi.keys()\n\telif isinstance(xi, (list, tuple)):\n\t\txi = [0] + xi  # idx should start from 1\n\t\tindex_range = range(1, len(xi))\n\telse:\n\t\traise TypeError('xi should be a dictionary, list or tuple')\n\n\tif feature_max:\n\t\tassert(isinstance(feature_max, int))\n\t\tindex_range = filter(lambda j: j <= feature_max, index_range)\n\tif issparse: \n\t\tindex_range = filter(lambda j:xi[j] != 0, index_range)\n\n\tindex_range = sorted(index_range)\n\tret = (feature_node * (len(index_range)+2))()\n\tret[-1].index = -1 # for bias term\n\tret[-2].index = -1\n\tfor idx, j in enumerate(index_range):\n\t\tret[idx].index = j\n\t\tret[idx].value = xi[j]\n\tmax_idx = 0\n\tif index_range : \n\t\tmax_idx = index_range[-1]\n\treturn ret, max_idx\n\nclass problem(Structure):\n\t_names = [\"l\", \"n\", \"y\", \"x\", \"bias\"]\n\t_types = [c_int, c_int, POINTER(c_double), POINTER(POINTER(feature_node)), c_double]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __init__(self, y, x, bias = -1):\n\t\tif len(y) != len(x) :\n\t\t\traise ValueError(\"len(y) != len(x)\")\n\t\tself.l = l = len(y)\n\t\tself.bias = -1\n\n\t\tmax_idx = 0\n\t\tx_space = self.x_space = []\n\t\tfor i, xi in enumerate(x):\n\t\t\ttmp_xi, tmp_idx = gen_feature_nodearray(xi)\n\t\t\tx_space += [tmp_xi]\n\t\t\tmax_idx = max(max_idx, tmp_idx)\n\t\tself.n = max_idx\n\n\t\tself.y = (c_double * l)()\n\t\tfor i, yi in enumerate(y): self.y[i] = y[i]\n\n\t\tself.x = (POINTER(feature_node) * l)() \n\t\tfor i, xi in enumerate(self.x_space): self.x[i] = xi\n\n\t\tself.set_bias(bias)\n\n\tdef set_bias(self, bias):\n\t\tif self.bias == bias:\n\t\t\treturn \n\t\tif bias >= 0 and self.bias < 0: \n\t\t\tself.n += 1\n\t\t\tnode = feature_node(self.n, bias)\n\t\tif bias < 0 and self.bias >= 0: \n\t\t\tself.n -= 1\n\t\t\tnode = feature_node(-1, bias)\n\n\t\tfor xi in self.x_space:\n\t\t\txi[-2] = node\n\t\tself.bias = bias\n\n\nclass parameter(Structure):\n\t_names = [\"solver_type\", \"eps\", \"C\", \"nr_weight\", \"weight_label\", \"weight\", \"p\"]\n\t_types = [c_int, c_double, c_double, c_int, POINTER(c_int), POINTER(c_double), c_double]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __init__(self, options = None):\n\t\tif options == None:\n\t\t\toptions = ''\n\t\tself.parse_options(options)\n\n\tdef __str__(self):\n\t\ts = ''\n\t\tattrs = parameter._names + list(self.__dict__.keys())\n\t\tvalues = map(lambda attr: getattr(self, attr), attrs) \n\t\tfor attr, val in zip(attrs, values):\n\t\t\ts += (' %s: %s\\n' % (attr, val))\n\t\ts = s.strip()\n\n\t\treturn s\n\n\tdef set_to_default_values(self):\n\t\tself.solver_type = L2R_L2LOSS_SVC_DUAL\n\t\tself.eps = float('inf')\n\t\tself.C = 1\n\t\tself.p = 0.1\n\t\tself.nr_weight = 0\n\t\tself.weight_label = (c_int * 0)()\n\t\tself.weight = (c_double * 0)()\n\t\tself.bias = -1\n\t\tself.cross_validation = False\n\t\tself.nr_fold = 0\n\t\tself.print_func = cast(None, PRINT_STRING_FUN)\n\n\tdef parse_options(self, options):\n\t\tif isinstance(options, list):\n\t\t\targv = options\n\t\telif isinstance(options, str):\n\t\t\targv = options.split()\n\t\telse:\n\t\t\traise TypeError(\"arg 1 should be a list or a str.\")\n\t\tself.set_to_default_values()\n\t\tself.print_func = cast(None, PRINT_STRING_FUN)\n\t\tweight_label = []\n\t\tweight = []\n\n\t\ti = 0\n\t\twhile i < len(argv) :\n\t\t\tif argv[i] == \"-s\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.solver_type = int(argv[i])\n\t\t\telif argv[i] == \"-c\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.C = float(argv[i])\n\t\t\telif argv[i] == \"-p\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.p = float(argv[i])\n\t\t\telif argv[i] == \"-e\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.eps = float(argv[i])\n\t\t\telif argv[i] == \"-B\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.bias = float(argv[i])\n\t\t\telif argv[i] == \"-v\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.cross_validation = 1\n\t\t\t\tself.nr_fold = int(argv[i])\n\t\t\t\tif self.nr_fold < 2 :\n\t\t\t\t\traise ValueError(\"n-fold cross validation: n must >= 2\")\n\t\t\telif argv[i].startswith(\"-w\"):\n\t\t\t\ti = i + 1\n\t\t\t\tself.nr_weight += 1\n\t\t\t\tnr_weight = self.nr_weight\n\t\t\t\tweight_label += [int(argv[i-1][2:])]\n\t\t\t\tweight += [float(argv[i])]\n\t\t\telif argv[i] == \"-q\":\n\t\t\t\tself.print_func = PRINT_STRING_FUN(print_null)\n\t\t\telse :\n\t\t\t\traise ValueError(\"Wrong options\")\n\t\t\ti += 1\n\n\t\tliblinear.set_print_string_function(self.print_func)\n\t\tself.weight_label = (c_int*self.nr_weight)()\n\t\tself.weight = (c_double*self.nr_weight)()\n\t\tfor i in range(self.nr_weight): \n\t\t\tself.weight[i] = weight[i]\n\t\t\tself.weight_label[i] = weight_label[i]\n\n\t\tif self.eps == float('inf'):\n\t\t\tif self.solver_type in [L2R_LR, L2R_L2LOSS_SVC]:\n\t\t\t\tself.eps = 0.01\n\t\t\telif self.solver_type in [L2R_L2LOSS_SVR]:\n\t\t\t\tself.eps = 0.001\n\t\t\telif self.solver_type in [L2R_L2LOSS_SVC_DUAL, L2R_L1LOSS_SVC_DUAL, MCSVM_CS, L2R_LR_DUAL]:\n\t\t\t\tself.eps = 0.1\n\t\t\telif self.solver_type in [L1R_L2LOSS_SVC, L1R_LR]:\n\t\t\t\tself.eps = 0.01\n\t\t\telif self.solver_type in [L2R_L2LOSS_SVR_DUAL, L2R_L1LOSS_SVR_DUAL]:\n\t\t\t\tself.eps = 0.1\n\nclass model(Structure):\n\t_names = [\"param\", \"nr_class\", \"nr_feature\", \"w\", \"label\", \"bias\"]\n\t_types = [parameter, c_int, c_int, POINTER(c_double), POINTER(c_int), c_double]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __init__(self):\n\t\tself.__createfrom__ = 'python'\n\n\tdef __del__(self):\n\t\t# free memory created by C to avoid memory leak\n\t\tif hasattr(self, '__createfrom__') and self.__createfrom__ == 'C':\n\t\t\tliblinear.free_and_destroy_model(pointer(self))\n\n\tdef get_nr_feature(self):\n\t\treturn liblinear.get_nr_feature(self)\n\n\tdef get_nr_class(self):\n\t\treturn liblinear.get_nr_class(self)\n\n\tdef get_labels(self):\n\t\tnr_class = self.get_nr_class()\n\t\tlabels = (c_int * nr_class)()\n\t\tliblinear.get_labels(self, labels)\n\t\treturn labels[:nr_class]\n\n\tdef get_decfun_coef(self, feat_idx, label_idx=0):\n\t\treturn liblinear.get_decfun_coef(self, feat_idx, label_idx)\n\n\tdef get_decfun_bias(self, label_idx=0):\n\t\treturn liblinear.get_decfun_bias(self, label_idx)\n\n\tdef get_decfun(self, label_idx=0):\n\t\tw = [liblinear.get_decfun_coef(self, feat_idx, label_idx) for feat_idx in range(1, self.nr_feature+1)]\n\t\tb = liblinear.get_decfun_bias(self, label_idx)\n\t\treturn (w, b)\n\n\tdef is_probability_model(self):\n\t\treturn (liblinear.check_probability_model(self) == 1)\n\n\tdef is_regression_model(self):\n\t\treturn (liblinear.check_regression_model(self) == 1)\n\ndef toPyModel(model_ptr):\n\t\"\"\"\n\ttoPyModel(model_ptr) -> model\n\n\tConvert a ctypes POINTER(model) to a Python model\n\t\"\"\"\n\tif bool(model_ptr) == False:\n\t\traise ValueError(\"Null pointer\")\n\tm = model_ptr.contents\n\tm.__createfrom__ = 'C'\n\treturn m\n\nfillprototype(liblinear.train, POINTER(model), [POINTER(problem), POINTER(parameter)])\nfillprototype(liblinear.cross_validation, None, [POINTER(problem), POINTER(parameter), c_int, POINTER(c_double)])\n\nfillprototype(liblinear.predict_values, c_double, [POINTER(model), POINTER(feature_node), POINTER(c_double)])\nfillprototype(liblinear.predict, c_double, [POINTER(model), POINTER(feature_node)])\nfillprototype(liblinear.predict_probability, c_double, [POINTER(model), POINTER(feature_node), POINTER(c_double)])\n\nfillprototype(liblinear.save_model, c_int, [c_char_p, POINTER(model)])\nfillprototype(liblinear.load_model, POINTER(model), [c_char_p])\n\nfillprototype(liblinear.get_nr_feature, c_int, [POINTER(model)])\nfillprototype(liblinear.get_nr_class, c_int, [POINTER(model)])\nfillprototype(liblinear.get_labels, None, [POINTER(model), POINTER(c_int)])\nfillprototype(liblinear.get_decfun_coef, c_double, [POINTER(model), c_int, c_int])\nfillprototype(liblinear.get_decfun_bias, c_double, [POINTER(model), c_int])\n\nfillprototype(liblinear.free_model_content, None, [POINTER(model)])\nfillprototype(liblinear.free_and_destroy_model, None, [POINTER(POINTER(model))])\nfillprototype(liblinear.destroy_param, None, [POINTER(parameter)])\nfillprototype(liblinear.check_parameter, c_char_p, [POINTER(problem), POINTER(parameter)])\nfillprototype(liblinear.check_probability_model, c_int, [POINTER(model)])\nfillprototype(liblinear.check_regression_model, c_int, [POINTER(model)])\nfillprototype(liblinear.set_print_string_function, None, [CFUNCTYPE(None, c_char_p)])\n"
  },
  {
    "path": "Matlab/liblinear-1.96/python/liblinearutil.py",
    "content": "#!/usr/bin/env python\n\nimport os, sys\nsys.path = [os.path.dirname(os.path.abspath(__file__))] + sys.path \nfrom liblinear import *\nfrom liblinear import __all__ as liblinear_all\nfrom ctypes import c_double\n\n__all__ = ['svm_read_problem', 'load_model', 'save_model', 'evaluations',\n           'train', 'predict'] + liblinear_all\n\n\ndef svm_read_problem(data_file_name):\n\t\"\"\"\n\tsvm_read_problem(data_file_name) -> [y, x]\n\n\tRead LIBSVM-format data from data_file_name and return labels y\n\tand data instances x.\n\t\"\"\"\n\tprob_y = []\n\tprob_x = []\n\tfor line in open(data_file_name):\n\t\tline = line.split(None, 1)\n\t\t# In case an instance with all zero features\n\t\tif len(line) == 1: line += ['']\n\t\tlabel, features = line\n\t\txi = {}\n\t\tfor e in features.split():\n\t\t\tind, val = e.split(\":\")\n\t\t\txi[int(ind)] = float(val)\n\t\tprob_y += [float(label)]\n\t\tprob_x += [xi]\n\treturn (prob_y, prob_x)\n\ndef load_model(model_file_name):\n\t\"\"\"\n\tload_model(model_file_name) -> model\n\n\tLoad a LIBLINEAR model from model_file_name and return.\n\t\"\"\"\n\tmodel = liblinear.load_model(model_file_name.encode())\n\tif not model:\n\t\tprint(\"can't open model file %s\" % model_file_name)\n\t\treturn None\n\tmodel = toPyModel(model)\n\treturn model\n\ndef save_model(model_file_name, model):\n\t\"\"\"\n\tsave_model(model_file_name, model) -> None\n\n\tSave a LIBLINEAR model to the file model_file_name.\n\t\"\"\"\n\tliblinear.save_model(model_file_name.encode(), model)\n\ndef evaluations(ty, pv):\n\t\"\"\"\n\tevaluations(ty, pv) -> (ACC, MSE, SCC)\n\n\tCalculate accuracy, mean squared error and squared correlation coefficient\n\tusing the true values (ty) and predicted values (pv).\n\t\"\"\"\n\tif len(ty) != len(pv):\n\t\traise ValueError(\"len(ty) must equal to len(pv)\")\n\ttotal_correct = total_error = 0\n\tsumv = sumy = sumvv = sumyy = sumvy = 0\n\tfor v, y in zip(pv, ty):\n\t\tif y == v:\n\t\t\ttotal_correct += 1\n\t\ttotal_error += (v-y)*(v-y)\n\t\tsumv += v\n\t\tsumy += y\n\t\tsumvv += v*v\n\t\tsumyy += y*y\n\t\tsumvy += v*y\n\tl = len(ty)\n\tACC = 100.0*total_correct/l\n\tMSE = total_error/l\n\ttry:\n\t\tSCC = ((l*sumvy-sumv*sumy)*(l*sumvy-sumv*sumy))/((l*sumvv-sumv*sumv)*(l*sumyy-sumy*sumy))\n\texcept:\n\t\tSCC = float('nan')\n\treturn (ACC, MSE, SCC)\n\ndef train(arg1, arg2=None, arg3=None):\n\t\"\"\"\n\ttrain(y, x [, options]) -> model | ACC\n\ttrain(prob [, options]) -> model | ACC\n\ttrain(prob, param) -> model | ACC\n\n\tTrain a model from data (y, x) or a problem prob using\n\t'options' or a parameter param.\n\tIf '-v' is specified in 'options' (i.e., cross validation)\n\teither accuracy (ACC) or mean-squared error (MSE) is returned.\n\n\toptions:\n\t\t-s type : set type of solver (default 1)\n\t\t  for multi-class classification\n\t\t\t 0 -- L2-regularized logistic regression (primal)\n\t\t\t 1 -- L2-regularized L2-loss support vector classification (dual)\n\t\t\t 2 -- L2-regularized L2-loss support vector classification (primal)\n\t\t\t 3 -- L2-regularized L1-loss support vector classification (dual)\n\t\t\t 4 -- support vector classification by Crammer and Singer\n\t\t\t 5 -- L1-regularized L2-loss support vector classification\n\t\t\t 6 -- L1-regularized logistic regression\n\t\t\t 7 -- L2-regularized logistic regression (dual)\n\t\t  for regression\n\t\t\t11 -- L2-regularized L2-loss support vector regression (primal)\n\t\t\t12 -- L2-regularized L2-loss support vector regression (dual)\n\t\t\t13 -- L2-regularized L1-loss support vector regression (dual)\n\t\t-c cost : set the parameter C (default 1)\n\t\t-p epsilon : set the epsilon in loss function of SVR (default 0.1)\n\t\t-e epsilon : set tolerance of termination criterion\n\t\t\t-s 0 and 2\n\t\t\t\t|f'(w)|_2 <= eps*min(pos,neg)/l*|f'(w0)|_2,\n\t\t\t\twhere f is the primal function, (default 0.01)\n\t\t\t-s 11\n\t\t\t\t|f'(w)|_2 <= eps*|f'(w0)|_2 (default 0.001)\n\t\t\t-s 1, 3, 4, and 7\n\t\t\t\tDual maximal violation <= eps; similar to liblinear (default 0.)\n\t\t\t-s 5 and 6\n\t\t\t\t|f'(w)|_inf <= eps*min(pos,neg)/l*|f'(w0)|_inf,\n\t\t\t\twhere f is the primal function (default 0.01)\n\t\t\t-s 12 and 13\n\t\t\t\t|f'(alpha)|_1 <= eps |f'(alpha0)|,\n\t\t\t\twhere f is the dual function (default 0.1)\n\t\t-B bias : if bias >= 0, instance x becomes [x; bias]; if < 0, no bias term added (default -1)\n\t\t-wi weight: weights adjust the parameter C of different classes (see README for details)\n\t\t-v n: n-fold cross validation mode\n\t    -q : quiet mode (no outputs)\n\t\"\"\"\n\tprob, param = None, None\n\tif isinstance(arg1, (list, tuple)):\n\t\tassert isinstance(arg2, (list, tuple))\n\t\ty, x, options = arg1, arg2, arg3\n\t\tprob = problem(y, x)\n\t\tparam = parameter(options)\n\telif isinstance(arg1, problem):\n\t\tprob = arg1\n\t\tif isinstance(arg2, parameter):\n\t\t\tparam = arg2\n\t\telse :\n\t\t\tparam = parameter(arg2)\n\tif prob == None or param == None :\n\t\traise TypeError(\"Wrong types for the arguments\")\n\n\tprob.set_bias(param.bias)\n\tliblinear.set_print_string_function(param.print_func)\n\terr_msg = liblinear.check_parameter(prob, param)\n\tif err_msg :\n\t\traise ValueError('Error: %s' % err_msg)\n\n\tif param.cross_validation:\n\t\tl, nr_fold = prob.l, param.nr_fold\n\t\ttarget = (c_double * l)()\n\t\tliblinear.cross_validation(prob, param, nr_fold, target)\n\t\tACC, MSE, SCC = evaluations(prob.y[:l], target[:l])\n\t\tif param.solver_type in [L2R_L2LOSS_SVR, L2R_L2LOSS_SVR_DUAL, L2R_L1LOSS_SVR_DUAL]:\n\t\t\tprint(\"Cross Validation Mean squared error = %g\" % MSE)\n\t\t\tprint(\"Cross Validation Squared correlation coefficient = %g\" % SCC)\n\t\t\treturn MSE\n\t\telse:\n\t\t\tprint(\"Cross Validation Accuracy = %g%%\" % ACC)\n\t\t\treturn ACC\n\telse :\n\t\tm = liblinear.train(prob, param)\n\t\tm = toPyModel(m)\n\n\t\treturn m\n\ndef predict(y, x, m, options=\"\"):\n\t\"\"\"\n\tpredict(y, x, m [, options]) -> (p_labels, p_acc, p_vals)\n\n\tPredict data (y, x) with the SVM model m.\n\toptions:\n\t    -b probability_estimates: whether to output probability estimates, 0 or 1 (default 0); currently for logistic regression only\n\t    -q quiet mode (no outputs)\n\n\tThe return tuple contains\n\tp_labels: a list of predicted labels\n\tp_acc: a tuple including  accuracy (for classification), mean-squared\n\t       error, and squared correlation coefficient (for regression).\n\tp_vals: a list of decision values or probability estimates (if '-b 1'\n\t        is specified). If k is the number of classes, for decision values,\n\t        each element includes results of predicting k binary-class\n\t        SVMs. if k = 2 and solver is not MCSVM_CS, only one decision value\n\t        is returned. For probabilities, each element contains k values\n\t        indicating the probability that the testing instance is in each class.\n\t        Note that the order of classes here is the same as 'model.label'\n\t        field in the model structure.\n\t\"\"\"\n\n\tdef info(s):\n\t\tprint(s)\n\n\tpredict_probability = 0\n\targv = options.split()\n\ti = 0\n\twhile i < len(argv):\n\t\tif argv[i] == '-b':\n\t\t\ti += 1\n\t\t\tpredict_probability = int(argv[i])\n\t\telif argv[i] == '-q':\n\t\t\tinfo = print_null\n\t\telse:\n\t\t\traise ValueError(\"Wrong options\")\n\t\ti+=1\n\n\tsolver_type = m.param.solver_type\n\tnr_class = m.get_nr_class()\n\tnr_feature = m.get_nr_feature()\n\tis_prob_model = m.is_probability_model()\n\tbias = m.bias\n\tif bias >= 0:\n\t\tbiasterm = feature_node(nr_feature+1, bias)\n\telse:\n\t\tbiasterm = feature_node(-1, bias)\n\tpred_labels = []\n\tpred_values = []\n\n\tif predict_probability:\n\t\tif not is_prob_model:\n\t\t\traise TypeError('probability output is only supported for logistic regression')\n\t\tprob_estimates = (c_double * nr_class)()\n\t\tfor xi in x:\n\t\t\txi, idx = gen_feature_nodearray(xi, feature_max=nr_feature)\n\t\t\txi[-2] = biasterm\n\t\t\tlabel = liblinear.predict_probability(m, xi, prob_estimates)\n\t\t\tvalues = prob_estimates[:nr_class]\n\t\t\tpred_labels += [label]\n\t\t\tpred_values += [values]\n\telse:\n\t\tif nr_class <= 2:\n\t\t\tnr_classifier = 1\n\t\telse:\n\t\t\tnr_classifier = nr_class\n\t\tdec_values = (c_double * nr_classifier)()\n\t\tfor xi in x:\n\t\t\txi, idx = gen_feature_nodearray(xi, feature_max=nr_feature)\n\t\t\txi[-2] = biasterm\n\t\t\tlabel = liblinear.predict_values(m, xi, dec_values)\n\t\t\tvalues = dec_values[:nr_classifier]\n\t\t\tpred_labels += [label]\n\t\t\tpred_values += [values]\n\tif len(y) == 0:\n\t\ty = [0] * len(x)\n\tACC, MSE, SCC = evaluations(y, pred_labels)\n\tl = len(y)\n\tif m.is_regression_model():\n\t\tinfo(\"Mean squared error = %g (regression)\" % MSE)\n\t\tinfo(\"Squared correlation coefficient = %g (regression)\" % SCC)\n\telse:\n\t\tinfo(\"Accuracy = %g%% (%d/%d) (classification)\" % (ACC, int(l*ACC/100), l))\n\n\treturn pred_labels, (ACC, MSE, SCC), pred_values\n"
  },
  {
    "path": "Matlab/liblinear-1.96/train.c",
    "content": "#include <stdio.h>\n#include <math.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include \"linear.h\"\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n#define INF HUGE_VAL\n\nvoid print_null(const char *s) {}\n\nvoid exit_with_help()\n{\n\tprintf(\n\t\"Usage: train [options] training_set_file [model_file]\\n\"\n\t\"options:\\n\"\n\t\"-s type : set type of solver (default 1)\\n\"\n\t\"  for multi-class classification\\n\"\n\t\"\t 0 -- L2-regularized logistic regression (primal)\\n\"\n\t\"\t 1 -- L2-regularized L2-loss support vector classification (dual)\\n\"\n\t\"\t 2 -- L2-regularized L2-loss support vector classification (primal)\\n\"\n\t\"\t 3 -- L2-regularized L1-loss support vector classification (dual)\\n\"\n\t\"\t 4 -- support vector classification by Crammer and Singer\\n\"\n\t\"\t 5 -- L1-regularized L2-loss support vector classification\\n\"\n\t\"\t 6 -- L1-regularized logistic regression\\n\"\n\t\"\t 7 -- L2-regularized logistic regression (dual)\\n\"\n\t\"  for regression\\n\"\n\t\"\t11 -- L2-regularized L2-loss support vector regression (primal)\\n\"\n\t\"\t12 -- L2-regularized L2-loss support vector regression (dual)\\n\"\n\t\"\t13 -- L2-regularized L1-loss support vector regression (dual)\\n\"\n\t\"-c cost : set the parameter C (default 1)\\n\"\n\t\"-p epsilon : set the epsilon in loss function of SVR (default 0.1)\\n\"\n\t\"-e epsilon : set tolerance of termination criterion\\n\"\n\t\"\t-s 0 and 2\\n\"\n\t\"\t\t|f'(w)|_2 <= eps*min(pos,neg)/l*|f'(w0)|_2,\\n\"\n\t\"\t\twhere f is the primal function and pos/neg are # of\\n\"\n\t\"\t\tpositive/negative data (default 0.01)\\n\"\n\t\"\t-s 11\\n\"\n\t\"\t\t|f'(w)|_2 <= eps*|f'(w0)|_2 (default 0.001)\\n\"\n\t\"\t-s 1, 3, 4, and 7\\n\"\n\t\"\t\tDual maximal violation <= eps; similar to libsvm (default 0.1)\\n\"\n\t\"\t-s 5 and 6\\n\"\n\t\"\t\t|f'(w)|_1 <= eps*min(pos,neg)/l*|f'(w0)|_1,\\n\"\n\t\"\t\twhere f is the primal function (default 0.01)\\n\"\n\t\"\t-s 12 and 13\\n\"\n\t\"\t\t|f'(alpha)|_1 <= eps |f'(alpha0)|,\\n\"\n\t\"\t\twhere f is the dual function (default 0.1)\\n\"\n\t\"-B bias : if bias >= 0, instance x becomes [x; bias]; if < 0, no bias term added (default -1)\\n\"\n\t\"-wi weight: weights adjust the parameter C of different classes (see README for details)\\n\"\n\t\"-v n: n-fold cross validation mode\\n\"\n\t\"-q : quiet mode (no outputs)\\n\"\n\t);\n\texit(1);\n}\n\nvoid exit_input_error(int line_num)\n{\n\tfprintf(stderr,\"Wrong input format at line %d\\n\", line_num);\n\texit(1);\n}\n\nstatic char *line = NULL;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line,max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\nvoid parse_command_line(int argc, char **argv, char *input_file_name, char *model_file_name);\nvoid read_problem(const char *filename);\nvoid do_cross_validation();\n\nstruct feature_node *x_space;\nstruct parameter param;\nstruct problem prob;\nstruct model* model_;\nint flag_cross_validation;\nint nr_fold;\ndouble bias;\n\nint main(int argc, char **argv)\n{\n\tchar input_file_name[1024];\n\tchar model_file_name[1024];\n\tconst char *error_msg;\n\n\tparse_command_line(argc, argv, input_file_name, model_file_name);\n\tread_problem(input_file_name);\n\terror_msg = check_parameter(&prob,&param);\n\n\tif(error_msg)\n\t{\n\t\tfprintf(stderr,\"ERROR: %s\\n\",error_msg);\n\t\texit(1);\n\t}\n\n\tif(flag_cross_validation)\n\t{\n\t\tdo_cross_validation();\n\t}\n\telse\n\t{\n\t\tmodel_=train(&prob, &param);\n\t\tif(save_model(model_file_name, model_))\n\t\t{\n\t\t\tfprintf(stderr,\"can't save model to file %s\\n\",model_file_name);\n\t\t\texit(1);\n\t\t}\n\t\tfree_and_destroy_model(&model_);\n\t}\n\tdestroy_param(&param);\n\tfree(prob.y);\n\tfree(prob.x);\n\tfree(x_space);\n\tfree(line);\n\n\treturn 0;\n}\n\nvoid do_cross_validation()\n{\n\tint i;\n\tint total_correct = 0;\n\tdouble total_error = 0;\n\tdouble sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;\n\tdouble *target = Malloc(double, prob.l);\n\n\tcross_validation(&prob,&param,nr_fold,target);\n\tif(param.solver_type == L2R_L2LOSS_SVR ||\n\t   param.solver_type == L2R_L1LOSS_SVR_DUAL ||\n\t   param.solver_type == L2R_L2LOSS_SVR_DUAL)\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tdouble y = prob.y[i];\n\t\t\tdouble v = target[i];\n\t\t\ttotal_error += (v-y)*(v-y);\n\t\t\tsumv += v;\n\t\t\tsumy += y;\n\t\t\tsumvv += v*v;\n\t\t\tsumyy += y*y;\n\t\t\tsumvy += v*y;\n\t\t}\n\t\tprintf(\"Cross Validation Mean squared error = %g\\n\",total_error/prob.l);\n\t\tprintf(\"Cross Validation Squared correlation coefficient = %g\\n\",\n\t\t\t\t((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/\n\t\t\t\t((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))\n\t\t\t  );\n\t}\n\telse\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t\tif(target[i] == prob.y[i])\n\t\t\t\t++total_correct;\n\t\tprintf(\"Cross Validation Accuracy = %g%%\\n\",100.0*total_correct/prob.l);\n\t}\n\n\tfree(target);\n}\n\nvoid parse_command_line(int argc, char **argv, char *input_file_name, char *model_file_name)\n{\n\tint i;\n\tvoid (*print_func)(const char*) = NULL;\t// default printing to stdout\n\n\t// default values\n\tparam.solver_type = L2R_L2LOSS_SVC_DUAL;\n\tparam.C = 1;\n\tparam.eps = INF; // see setting below\n\tparam.p = 0.1;\n\tparam.nr_weight = 0;\n\tparam.weight_label = NULL;\n\tparam.weight = NULL;\n\tflag_cross_validation = 0;\n\tbias = -1;\n\n\t// parse options\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\tif(++i>=argc)\n\t\t\texit_with_help();\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 's':\n\t\t\t\tparam.solver_type = atoi(argv[i]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'c':\n\t\t\t\tparam.C = atof(argv[i]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'p':\n\t\t\t\tparam.p = atof(argv[i]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'e':\n\t\t\t\tparam.eps = atof(argv[i]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'B':\n\t\t\t\tbias = atof(argv[i]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'w':\n\t\t\t\t++param.nr_weight;\n\t\t\t\tparam.weight_label = (int *) realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\tparam.weight = (double *) realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(&argv[i-1][2]);\n\t\t\t\tparam.weight[param.nr_weight-1] = atof(argv[i]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'v':\n\t\t\t\tflag_cross_validation = 1;\n\t\t\t\tnr_fold = atoi(argv[i]);\n\t\t\t\tif(nr_fold < 2)\n\t\t\t\t{\n\t\t\t\t\tfprintf(stderr,\"n-fold cross validation: n must >= 2\\n\");\n\t\t\t\t\texit_with_help();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'q':\n\t\t\t\tprint_func = &print_null;\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tfprintf(stderr,\"unknown option: -%c\\n\", argv[i-1][1]);\n\t\t\t\texit_with_help();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tset_print_string_function(print_func);\n\n\t// determine filenames\n\tif(i>=argc)\n\t\texit_with_help();\n\n\tstrcpy(input_file_name, argv[i]);\n\n\tif(i<argc-1)\n\t\tstrcpy(model_file_name,argv[i+1]);\n\telse\n\t{\n\t\tchar *p = strrchr(argv[i],'/');\n\t\tif(p==NULL)\n\t\t\tp = argv[i];\n\t\telse\n\t\t\t++p;\n\t\tsprintf(model_file_name,\"%s.model\",p);\n\t}\n\n\tif(param.eps == INF)\n\t{\n\t\tswitch(param.solver_type)\n\t\t{\n\t\t\tcase L2R_LR:\n\t\t\tcase L2R_L2LOSS_SVC:\n\t\t\t\tparam.eps = 0.01;\n\t\t\t\tbreak;\n\t\t\tcase L2R_L2LOSS_SVR:\n\t\t\t\tparam.eps = 0.001;\n\t\t\t\tbreak;\n\t\t\tcase L2R_L2LOSS_SVC_DUAL:\n\t\t\tcase L2R_L1LOSS_SVC_DUAL:\n\t\t\tcase MCSVM_CS:\n\t\t\tcase L2R_LR_DUAL:\n\t\t\t\tparam.eps = 0.1;\n\t\t\t\tbreak;\n\t\t\tcase L1R_L2LOSS_SVC:\n\t\t\tcase L1R_LR:\n\t\t\t\tparam.eps = 0.01;\n\t\t\t\tbreak;\n\t\t\tcase L2R_L1LOSS_SVR_DUAL:\n\t\t\tcase L2R_L2LOSS_SVR_DUAL:\n\t\t\t\tparam.eps = 0.1;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// read in a problem (in libsvm format)\nvoid read_problem(const char *filename)\n{\n\tint max_index, inst_max_index, i;\n\tsize_t elements, j;\n\tFILE *fp = fopen(filename,\"r\");\n\tchar *endptr;\n\tchar *idx, *val, *label;\n\n\tif(fp == NULL)\n\t{\n\t\tfprintf(stderr,\"can't open input file %s\\n\",filename);\n\t\texit(1);\n\t}\n\n\tprob.l = 0;\n\telements = 0;\n\tmax_line_len = 1024;\n\tline = Malloc(char,max_line_len);\n\twhile(readline(fp)!=NULL)\n\t{\n\t\tchar *p = strtok(line,\" \\t\"); // label\n\n\t\t// features\n\t\twhile(1)\n\t\t{\n\t\t\tp = strtok(NULL,\" \\t\");\n\t\t\tif(p == NULL || *p == '\\n') // check '\\n' as ' ' may be after the last feature\n\t\t\t\tbreak;\n\t\t\telements++;\n\t\t}\n\t\telements++; // for bias term\n\t\tprob.l++;\n\t}\n\trewind(fp);\n\n\tprob.bias=bias;\n\n\tprob.y = Malloc(double,prob.l);\n\tprob.x = Malloc(struct feature_node *,prob.l);\n\tx_space = Malloc(struct feature_node,elements+prob.l);\n\n\tmax_index = 0;\n\tj=0;\n\tfor(i=0;i<prob.l;i++)\n\t{\n\t\tinst_max_index = 0; // strtol gives 0 if wrong format\n\t\treadline(fp);\n\t\tprob.x[i] = &x_space[j];\n\t\tlabel = strtok(line,\" \\t\\n\");\n\t\tif(label == NULL) // empty line\n\t\t\texit_input_error(i+1);\n\n\t\tprob.y[i] = strtod(label,&endptr);\n\t\tif(endptr == label || *endptr != '\\0')\n\t\t\texit_input_error(i+1);\n\n\t\twhile(1)\n\t\t{\n\t\t\tidx = strtok(NULL,\":\");\n\t\t\tval = strtok(NULL,\" \\t\");\n\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\n\t\t\terrno = 0;\n\t\t\tx_space[j].index = (int) strtol(idx,&endptr,10);\n\t\t\tif(endptr == idx || errno != 0 || *endptr != '\\0' || x_space[j].index <= inst_max_index)\n\t\t\t\texit_input_error(i+1);\n\t\t\telse\n\t\t\t\tinst_max_index = x_space[j].index;\n\n\t\t\terrno = 0;\n\t\t\tx_space[j].value = strtod(val,&endptr);\n\t\t\tif(endptr == val || errno != 0 || (*endptr != '\\0' && !isspace(*endptr)))\n\t\t\t\texit_input_error(i+1);\n\n\t\t\t++j;\n\t\t}\n\n\t\tif(inst_max_index > max_index)\n\t\t\tmax_index = inst_max_index;\n\n\t\tif(prob.bias >= 0)\n\t\t\tx_space[j++].value = prob.bias;\n\n\t\tx_space[j++].index = -1;\n\t}\n\n\tif(prob.bias >= 0)\n\t{\n\t\tprob.n=max_index+1;\n\t\tfor(i=1;i<prob.l;i++)\n\t\t\t(prob.x[i]-2)->index = prob.n;\n\t\tx_space[j-2].index = prob.n;\n\t}\n\telse\n\t\tprob.n=max_index;\n\n\tfclose(fp);\n}\n"
  },
  {
    "path": "Matlab/liblinear-1.96/tron.cpp",
    "content": "#include <math.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include \"tron.h\"\n\n#ifndef min\ntemplate <class T> static inline T min(T x,T y) { return (x<y)?x:y; }\n#endif\n\n#ifndef max\ntemplate <class T> static inline T max(T x,T y) { return (x>y)?x:y; }\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern double dnrm2_(int *, double *, int *);\nextern double ddot_(int *, double *, int *, double *, int *);\nextern int daxpy_(int *, double *, double *, int *, double *, int *);\nextern int dscal_(int *, double *, double *, int *);\n\n#ifdef __cplusplus\n}\n#endif\n\nstatic void default_print(const char *buf)\n{\n\tfputs(buf,stdout);\n\tfflush(stdout);\n}\n\nvoid TRON::info(const char *fmt,...)\n{\n\tchar buf[BUFSIZ];\n\tva_list ap;\n\tva_start(ap,fmt);\n\tvsprintf(buf,fmt,ap);\n\tva_end(ap);\n\t(*tron_print_string)(buf);\n}\n\nTRON::TRON(const function *fun_obj, double eps, int max_iter)\n{\n\tthis->fun_obj=const_cast<function *>(fun_obj);\n\tthis->eps=eps;\n\tthis->max_iter=max_iter;\n\ttron_print_string = default_print;\n}\n\nTRON::~TRON()\n{\n}\n\nvoid TRON::tron(double *w)\n{\n\t// Parameters for updating the iterates.\n\tdouble eta0 = 1e-4, eta1 = 0.25, eta2 = 0.75;\n\n\t// Parameters for updating the trust region size delta.\n\tdouble sigma1 = 0.25, sigma2 = 0.5, sigma3 = 4;\n\n\tint n = fun_obj->get_nr_variable();\n\tint i, cg_iter;\n\tdouble delta, snorm, one=1.0;\n\tdouble alpha, f, fnew, prered, actred, gs;\n\tint search = 1, iter = 1, inc = 1;\n\tdouble *s = new double[n];\n\tdouble *r = new double[n];\n\tdouble *w_new = new double[n];\n\tdouble *g = new double[n];\n\n\tfor (i=0; i<n; i++)\n\t\tw[i] = 0;\n\n\tf = fun_obj->fun(w);\n\tfun_obj->grad(w, g);\n\tdelta = dnrm2_(&n, g, &inc);\n\tdouble gnorm1 = delta;\n\tdouble gnorm = gnorm1;\n\n\tif (gnorm <= eps*gnorm1)\n\t\tsearch = 0;\n\n\titer = 1;\n\n\twhile (iter <= max_iter && search)\n\t{\n\t\tcg_iter = trcg(delta, g, s, r);\n\n\t\tmemcpy(w_new, w, sizeof(double)*n);\n\t\tdaxpy_(&n, &one, s, &inc, w_new, &inc);\n\n\t\tgs = ddot_(&n, g, &inc, s, &inc);\n\t\tprered = -0.5*(gs-ddot_(&n, s, &inc, r, &inc));\n\t\tfnew = fun_obj->fun(w_new);\n\n\t\t// Compute the actual reduction.\n\t\tactred = f - fnew;\n\n\t\t// On the first iteration, adjust the initial step bound.\n\t\tsnorm = dnrm2_(&n, s, &inc);\n\t\tif (iter == 1)\n\t\t\tdelta = min(delta, snorm);\n\n\t\t// Compute prediction alpha*snorm of the step.\n\t\tif (fnew - f - gs <= 0)\n\t\t\talpha = sigma3;\n\t\telse\n\t\t\talpha = max(sigma1, -0.5*(gs/(fnew - f - gs)));\n\n\t\t// Update the trust region bound according to the ratio of actual to predicted reduction.\n\t\tif (actred < eta0*prered)\n\t\t\tdelta = min(max(alpha, sigma1)*snorm, sigma2*delta);\n\t\telse if (actred < eta1*prered)\n\t\t\tdelta = max(sigma1*delta, min(alpha*snorm, sigma2*delta));\n\t\telse if (actred < eta2*prered)\n\t\t\tdelta = max(sigma1*delta, min(alpha*snorm, sigma3*delta));\n\t\telse\n\t\t\tdelta = max(delta, min(alpha*snorm, sigma3*delta));\n\n\t\tinfo(\"iter %2d act %5.3e pre %5.3e delta %5.3e f %5.3e |g| %5.3e CG %3d\\n\", iter, actred, prered, delta, f, gnorm, cg_iter);\n\n\t\tif (actred > eta0*prered)\n\t\t{\n\t\t\titer++;\n\t\t\tmemcpy(w, w_new, sizeof(double)*n);\n\t\t\tf = fnew;\n\t\t\tfun_obj->grad(w, g);\n\n\t\t\tgnorm = dnrm2_(&n, g, &inc);\n\t\t\tif (gnorm <= eps*gnorm1)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (f < -1.0e+32)\n\t\t{\n\t\t\tinfo(\"WARNING: f < -1.0e+32\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif (fabs(actred) <= 0 && prered <= 0)\n\t\t{\n\t\t\tinfo(\"WARNING: actred and prered <= 0\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif (fabs(actred) <= 1.0e-12*fabs(f) &&\n\t\t    fabs(prered) <= 1.0e-12*fabs(f))\n\t\t{\n\t\t\tinfo(\"WARNING: actred and prered too small\\n\");\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tdelete[] g;\n\tdelete[] r;\n\tdelete[] w_new;\n\tdelete[] s;\n}\n\nint TRON::trcg(double delta, double *g, double *s, double *r)\n{\n\tint i, inc = 1;\n\tint n = fun_obj->get_nr_variable();\n\tdouble one = 1;\n\tdouble *d = new double[n];\n\tdouble *Hd = new double[n];\n\tdouble rTr, rnewTrnew, alpha, beta, cgtol;\n\n\tfor (i=0; i<n; i++)\n\t{\n\t\ts[i] = 0;\n\t\tr[i] = -g[i];\n\t\td[i] = r[i];\n\t}\n\tcgtol = 0.1*dnrm2_(&n, g, &inc);\n\n\tint cg_iter = 0;\n\trTr = ddot_(&n, r, &inc, r, &inc);\n\twhile (1)\n\t{\n\t\tif (dnrm2_(&n, r, &inc) <= cgtol)\n\t\t\tbreak;\n\t\tcg_iter++;\n\t\tfun_obj->Hv(d, Hd);\n\n\t\talpha = rTr/ddot_(&n, d, &inc, Hd, &inc);\n\t\tdaxpy_(&n, &alpha, d, &inc, s, &inc);\n\t\tif (dnrm2_(&n, s, &inc) > delta)\n\t\t{\n\t\t\tinfo(\"cg reaches trust region boundary\\n\");\n\t\t\talpha = -alpha;\n\t\t\tdaxpy_(&n, &alpha, d, &inc, s, &inc);\n\n\t\t\tdouble std = ddot_(&n, s, &inc, d, &inc);\n\t\t\tdouble sts = ddot_(&n, s, &inc, s, &inc);\n\t\t\tdouble dtd = ddot_(&n, d, &inc, d, &inc);\n\t\t\tdouble dsq = delta*delta;\n\t\t\tdouble rad = sqrt(std*std + dtd*(dsq-sts));\n\t\t\tif (std >= 0)\n\t\t\t\talpha = (dsq - sts)/(std + rad);\n\t\t\telse\n\t\t\t\talpha = (rad - std)/dtd;\n\t\t\tdaxpy_(&n, &alpha, d, &inc, s, &inc);\n\t\t\talpha = -alpha;\n\t\t\tdaxpy_(&n, &alpha, Hd, &inc, r, &inc);\n\t\t\tbreak;\n\t\t}\n\t\talpha = -alpha;\n\t\tdaxpy_(&n, &alpha, Hd, &inc, r, &inc);\n\t\trnewTrnew = ddot_(&n, r, &inc, r, &inc);\n\t\tbeta = rnewTrnew/rTr;\n\t\tdscal_(&n, &beta, d, &inc);\n\t\tdaxpy_(&n, &one, r, &inc, d, &inc);\n\t\trTr = rnewTrnew;\n\t}\n\n\tdelete[] d;\n\tdelete[] Hd;\n\n\treturn(cg_iter);\n}\n\ndouble TRON::norm_inf(int n, double *x)\n{\n\tdouble dmax = fabs(x[0]);\n\tfor (int i=1; i<n; i++)\n\t\tif (fabs(x[i]) >= dmax)\n\t\t\tdmax = fabs(x[i]);\n\treturn(dmax);\n}\n\nvoid TRON::set_print_string(void (*print_string) (const char *buf))\n{\n\ttron_print_string = print_string;\n}\n"
  },
  {
    "path": "Matlab/liblinear-1.96/tron.h",
    "content": "#ifndef _TRON_H\n#define _TRON_H\n\nclass function\n{\npublic:\n\tvirtual double fun(double *w) = 0 ;\n\tvirtual void grad(double *w, double *g) = 0 ;\n\tvirtual void Hv(double *s, double *Hs) = 0 ;\n\n\tvirtual int get_nr_variable(void) = 0 ;\n\tvirtual ~function(void){}\n};\n\nclass TRON\n{\npublic:\n\tTRON(const function *fun_obj, double eps = 0.1, int max_iter = 1000);\n\t~TRON();\n\n\tvoid tron(double *w);\n\tvoid set_print_string(void (*i_print) (const char *buf));\n\nprivate:\n\tint trcg(double delta, double *g, double *s, double *r);\n\tdouble norm_inf(int n, double *x);\n\n\tdouble eps;\n\tint max_iter;\n\tfunction *fun_obj;\n\tvoid info(const char *fmt,...);\n\tvoid (*tron_print_string)(const char *buf);\n};\n#endif\n"
  },
  {
    "path": "Matlab/libsvm-3.19/COPYRIGHT",
    "content": "\nCopyright (c) 2000-2014 Chih-Chung Chang and Chih-Jen Lin\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\n3. Neither name of copyright holders nor the names of its contributors\nmay be used to endorse or promote products derived from this software\nwithout specific prior written permission.\n\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "Matlab/libsvm-3.19/FAQ.html",
    "content": "\r\n\r\n<html>\n<head>\n<title>LIBSVM FAQ</title>\n</head>\n<body bgcolor=\"#ffffcc\">\n\n<a name=\"_TOP\"><b><h1><a\nhref=http://www.csie.ntu.edu.tw/~cjlin/libsvm>LIBSVM</a>  FAQ </h1></b></a>\n<b>last modified : </b>\nThu, 20 Mar 2014 16:05:14 GMT\n<class=\"categories\">\n<li><a\nhref=\"#_TOP\">All Questions</a>(81)</li>\n<ul><b>\n<li><a\nhref=\"#/Q01:_Some_sample_uses_of_libsvm\">Q01:_Some_sample_uses_of_libsvm</a>(2)</li>\n<li><a\nhref=\"#/Q02:_Installation_and_running_the_program\">Q02:_Installation_and_running_the_program</a>(13)</li>\n<li><a\nhref=\"#/Q03:_Data_preparation\">Q03:_Data_preparation</a>(7)</li>\n<li><a\nhref=\"#/Q04:_Training_and_prediction\">Q04:_Training_and_prediction</a>(28)</li>\n<li><a\nhref=\"#/Q05:_Cross_validation_and_parameter_selection\">Q05:_Cross_validation_and_parameter_selection</a>(8)</li>\n<li><a\nhref=\"#/Q06:_Probability_outputs\">Q06:_Probability_outputs</a>(3)</li>\n<li><a\nhref=\"#/Q07:_Graphic_interface\">Q07:_Graphic_interface</a>(3)</li>\n<li><a\nhref=\"#/Q08:_Java_version_of_libsvm\">Q08:_Java_version_of_libsvm</a>(4)</li>\n<li><a\nhref=\"#/Q09:_Python_interface\">Q09:_Python_interface</a>(1)</li>\n<li><a\nhref=\"#/Q10:_MATLAB_interface\">Q10:_MATLAB_interface</a>(12)</li>\n</b></ul>\n</li>\n\n<ul><ul class=\"headlines\">\n<li class=\"headlines_item\"><a href=\"#faq101\">Some courses which have used libsvm as a tool</a></li>\n<li class=\"headlines_item\"><a href=\"#faq102\">Some applications/tools which have used libsvm </a></li>\n<li class=\"headlines_item\"><a href=\"#f201\">Where can I find documents/videos of libsvm ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f202\">Where are change log and earlier versions?</a></li>\n<li class=\"headlines_item\"><a href=\"#f203\">How to cite LIBSVM?</a></li>\n<li class=\"headlines_item\"><a href=\"#f204\">I would like to use libsvm in my software. Is there any license problem?</a></li>\n<li class=\"headlines_item\"><a href=\"#f205\">Is there a repository of additional tools based on libsvm?</a></li>\n<li class=\"headlines_item\"><a href=\"#f206\">On unix machines, I got \"error in loading shared libraries\" or \"cannot open shared object file.\" What happened ? </a></li>\n<li class=\"headlines_item\"><a href=\"#f207\">I have modified the source and would like to build the graphic interface \"svm-toy\" on MS windows. How should I do it ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f208\">I am an MS windows user but why only one (svm-toy) of those precompiled .exe actually runs ?  </a></li>\n<li class=\"headlines_item\"><a href=\"#f209\">What is the difference between \".\" and \"*\" outputed during training? </a></li>\n<li class=\"headlines_item\"><a href=\"#f210\">Why occasionally the program (including MATLAB or other interfaces) crashes and gives a segmentation fault?</a></li>\n<li class=\"headlines_item\"><a href=\"#f211\">How to build a dynamic library (.dll file) on MS windows?</a></li>\n<li class=\"headlines_item\"><a href=\"#f212\">On some systems (e.g., Ubuntu), compiling LIBSVM gives many warning messages. Is this a problem and how to disable the warning message?</a></li>\n<li class=\"headlines_item\"><a href=\"#f213\">In LIBSVM, why you don't use certain C/C++ library functions to make the code shorter?</a></li>\n<li class=\"headlines_item\"><a href=\"#f301\">Why sometimes not all attributes of a data appear in the training/model files ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f302\">What if my data are non-numerical ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f303\">Why do you consider sparse format ? Will the training of dense data be much slower ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f304\">Why sometimes the last line of my data is not read by svm-train?</a></li>\n<li class=\"headlines_item\"><a href=\"#f305\">Is there a program to check if my data are in the correct format?</a></li>\n<li class=\"headlines_item\"><a href=\"#f306\">May I put comments in data files?</a></li>\n<li class=\"headlines_item\"><a href=\"#f307\">How to convert other data formats to LIBSVM format?</a></li>\n<li class=\"headlines_item\"><a href=\"#f401\">The output of training C-SVM is like the following. What do they mean?</a></li>\n<li class=\"headlines_item\"><a href=\"#f402\">Can you explain more about the model file?</a></li>\n<li class=\"headlines_item\"><a href=\"#f403\">Should I use float or double to store numbers in the cache ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f405\">Does libsvm have special treatments for linear SVM?</a></li>\n<li class=\"headlines_item\"><a href=\"#f406\">The number of free support vectors is large. What should I do?</a></li>\n<li class=\"headlines_item\"><a href=\"#f407\">Should I scale training and testing data in a similar way?</a></li>\n<li class=\"headlines_item\"><a href=\"#f408\">Does it make a big difference  if I scale each attribute to [0,1] instead of [-1,1]?</a></li>\n<li class=\"headlines_item\"><a href=\"#f409\">The prediction rate is low. How could I improve it?</a></li>\n<li class=\"headlines_item\"><a href=\"#f410\">My data are unbalanced. Could libsvm handle such problems?</a></li>\n<li class=\"headlines_item\"><a href=\"#f411\">What is the difference between nu-SVC and C-SVC?</a></li>\n<li class=\"headlines_item\"><a href=\"#f412\">The program keeps running (without showing any output). What should I do?</a></li>\n<li class=\"headlines_item\"><a href=\"#f413\">The program keeps running (with output, i.e. many dots). What should I do?</a></li>\n<li class=\"headlines_item\"><a href=\"#f414\">The training time is too long. What should I do?</a></li>\n<li class=\"headlines_item\"><a href=\"#f4141\">Does shrinking always help?</a></li>\n<li class=\"headlines_item\"><a href=\"#f415\">How do I get the decision value(s)?</a></li>\n<li class=\"headlines_item\"><a href=\"#f4151\">How do I get the distance between a point and the hyperplane?</a></li>\n<li class=\"headlines_item\"><a href=\"#f416\">On 32-bit machines, if I use a large cache (i.e. large -m) on a linux machine, why sometimes I get \"segmentation fault ?\"</a></li>\n<li class=\"headlines_item\"><a href=\"#f417\">How do I disable screen output of svm-train?</a></li>\n<li class=\"headlines_item\"><a href=\"#f418\">I would like to use my own kernel. Any example? In svm.cpp, there are two subroutines for kernel evaluations: k_function() and kernel_function(). Which one should I modify ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f419\">What method does libsvm use for multi-class SVM ? Why don't you use the \"1-against-the rest\" method?</a></li>\n<li class=\"headlines_item\"><a href=\"#f422\">I would like to solve L2-loss SVM (i.e., error term is quadratic). How should I modify the code ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f425\">In one-class SVM, parameter nu should be an upper bound of the training error rate. Why sometimes I get a training error rate bigger than nu?</a></li>\n<li class=\"headlines_item\"><a href=\"#f427\">Why the code gives NaN (not a number) results?</a></li>\n<li class=\"headlines_item\"><a href=\"#f430\">Why the sign of predicted labels and decision values are sometimes reversed?</a></li>\n<li class=\"headlines_item\"><a href=\"#f431\">I don't know class labels of test data. What should I put in the first column of the test file?</a></li>\n<li class=\"headlines_item\"><a href=\"#f432\">How can I use OpenMP to parallelize LIBSVM on a multicore/shared-memory computer?</a></li>\n<li class=\"headlines_item\"><a href=\"#f433\">How could I know which training instances are support vectors?</a></li>\n<li class=\"headlines_item\"><a href=\"#f434\">Why sv_indices (indices of support vectors) are not stored in the saved model file?</a></li>\n<li class=\"headlines_item\"><a href=\"#f501\">After doing cross validation, why there is no model file outputted ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f502\">Why my cross-validation results are different from those in the Practical Guide?</a></li>\n<li class=\"headlines_item\"><a href=\"#f503\">On some systems CV accuracy is the same in several runs. How could I use different data partitions? In other words, how do I set random seed in LIBSVM?</a></li>\n<li class=\"headlines_item\"><a href=\"#f504\">Why on windows sometimes grid.py fails?</a></li>\n<li class=\"headlines_item\"><a href=\"#f505\">Why grid.py/easy.py sometimes generates the following warning message?</a></li>\n<li class=\"headlines_item\"><a href=\"#f506\">How do I choose the kernel?</a></li>\n<li class=\"headlines_item\"><a href=\"#f507\">How does LIBSVM perform parameter selection for multi-class problems? </a></li>\n<li class=\"headlines_item\"><a href=\"#f508\">How do I choose parameters for one-class SVM as training data are in only one class?</a></li>\n<li class=\"headlines_item\"><a href=\"#f425\">Why training a probability model (i.e., -b 1) takes a longer time?</a></li>\n<li class=\"headlines_item\"><a href=\"#f426\">Why using the -b option does not give me better accuracy?</a></li>\n<li class=\"headlines_item\"><a href=\"#f427\">Why using svm-predict -b 0 and -b 1 gives different accuracy values?</a></li>\n<li class=\"headlines_item\"><a href=\"#f501\">How can I save images drawn by svm-toy?</a></li>\n<li class=\"headlines_item\"><a href=\"#f502\">I press the \"load\" button to load data points but why svm-toy does not draw them ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f503\">I would like svm-toy to handle more than three classes of data, what should I do ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f601\">What is the difference between Java version and C++ version of libsvm?</a></li>\n<li class=\"headlines_item\"><a href=\"#f602\">Is the Java version significantly slower than the C++ version?</a></li>\n<li class=\"headlines_item\"><a href=\"#f603\">While training I get the following error message: java.lang.OutOfMemoryError. What is wrong?</a></li>\n<li class=\"headlines_item\"><a href=\"#f604\">Why you have the main source file svm.m4 and then transform it to svm.java?</a></li>\n<li class=\"headlines_item\"><a href=\"#f704\">Except the python-C++ interface provided, could I use Jython to call libsvm ?</a></li>\n<li class=\"headlines_item\"><a href=\"#f801\">I compile the MATLAB interface without problem, but why errors occur while running it?</a></li>\n<li class=\"headlines_item\"><a href=\"#f8011\">On 64bit Windows I compile the MATLAB interface without problem, but why errors occur while running it?</a></li>\n<li class=\"headlines_item\"><a href=\"#f802\">Does the MATLAB interface provide a function to do scaling?</a></li>\n<li class=\"headlines_item\"><a href=\"#f803\">How could I use MATLAB interface for parameter selection?</a></li>\n<li class=\"headlines_item\"><a href=\"#f8031\">I use MATLAB parallel programming toolbox on a multi-core environment for parameter selection. Why the program is even slower?</a></li>\n<li class=\"headlines_item\"><a href=\"#f8032\">How do I use LIBSVM with OpenMP under MATLAB?</a></li>\n<li class=\"headlines_item\"><a href=\"#f804\">How could I generate the primal variable w of linear SVM?</a></li>\n<li class=\"headlines_item\"><a href=\"#f805\">Is there an OCTAVE interface for libsvm?</a></li>\n<li class=\"headlines_item\"><a href=\"#f806\">How to handle the name conflict between svmtrain in the libsvm matlab interface and that in MATLAB bioinformatics toolbox?</a></li>\n<li class=\"headlines_item\"><a href=\"#f807\">On Windows I got an error message \"Invalid MEX-file: Specific module not found\" when running the pre-built MATLAB interface in the windows sub-directory. What should I do?</a></li>\n<li class=\"headlines_item\"><a href=\"#f808\">LIBSVM supports 1-vs-1 multi-class classification. If instead I would like to use 1-vs-rest, how to implement it using MATLAB interface?</a></li>\n<li class=\"headlines_item\"><a href=\"#f809\">I tried to install matlab interface on mac, but failed. What should I do?</a></li>\n</ul></ul>\n\n\n<hr size=\"5\" noshade />\n<p/>\n  \n<a name=\"/Q01:_Some_sample_uses_of_libsvm\"></a>\n<a name=\"faq101\"><b>Q: Some courses which have used libsvm as a tool</b></a>\n<br/>                                                                                \n<ul>\n<li><a href=http://lmb.informatik.uni-freiburg.de/lectures/svm_seminar/>Institute for Computer Science,           \nFaculty of Applied Science, University of Freiburg, Germany \n</a>\n<li> <a href=http://www.cs.vu.nl/~elena/ml.html>\nDivision of Mathematics and Computer Science. \nFaculteit der Exacte Wetenschappen \nVrije Universiteit, The Netherlands. </a>\n<li>\n<a href=http://www.cae.wisc.edu/~ece539/matlab/>\nElectrical and Computer Engineering Department, \nUniversity of Wisconsin-Madison \n</a>\n<li>\n<a href=http://www.hpl.hp.com/personal/Carl_Staelin/cs236601/project.html>\nTechnion (Israel Institute of Technology), Israel.\n<li>\n<a href=http://www.cise.ufl.edu/~fu/learn.html>\nComputer and Information Sciences Dept., University of Florida</a>\n<li>\n<a href=http://www.uonbi.ac.ke/acad_depts/ics/course_material/machine_learning/ML_and_DM_Resources.html>\nThe Institute of Computer Science,\nUniversity of Nairobi, Kenya.</a>\n<li>\n<a href=http://cerium.raunvis.hi.is/~tpr/courseware/svm/hugbunadur.html>\nApplied Mathematics and Computer Science, University of Iceland.\n<li>\n<a href=http://chicago05.mlss.cc/tiki/tiki-read_article.php?articleId=2>\nSVM tutorial in machine learning\nsummer school, University of Chicago, 2005.\n</a>\n</ul>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q01:_Some_sample_uses_of_libsvm\"></a>\n<a name=\"faq102\"><b>Q: Some applications/tools which have used libsvm </b></a>\n<br/>                                                                                \n(and maybe liblinear).\n<ul>\n<li>\n<a href=http://people.csail.mit.edu/jjl/libpmk/>LIBPMK: A Pyramid Match Toolkit</a>\n</li>\n<li><a href=http://maltparser.org/>Maltparser</a>:\na system for data-driven dependency parsing\n</li>\n<li>\n<a href=http://www.pymvpa.org/>PyMVPA: python tool for classifying neuroimages</a>\n</li>\n<li>\n<a href=http://solpro.proteomics.ics.uci.edu/>\nSOLpro: protein solubility predictor\n</a>\n</li>\n<li>\n<a href=http://bdval.campagnelab.org>\nBDVal</a>: biomarker discovery in high-throughput datasets.\n</li>\n<li><a href=http://johel.m.free.fr/demo_045.htm>\nRealtime object recognition</a>\n</li>\n<li><a href=http://scikit-learn.sourceforge.net/>\nscikits.learn: machine learning in Python</a>\n</li>\n</ul>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f201\"><b>Q: Where can I find documents/videos of libsvm ?</b></a>\n<br/>                                                                                \n<p>\n\n<ul>\n<li>\nOfficial implementation document:\n<br>\nC.-C. Chang and\nC.-J. Lin.\nLIBSVM\n: a library for support vector machines.\nACM Transactions on Intelligent\nSystems and Technology, 2:27:1--27:27, 2011.\n<a href=\"http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf\">pdf</a>, <a href=http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.ps.gz>ps.gz</a>,\n<a href=http://portal.acm.org/citation.cfm?id=1961199&CFID=29950432&CFTOKEN=30974232>ACM digital lib</a>.\n\n\n<li> Instructions for using LIBSVM are in the README files in the main directory and some sub-directories.\n<br>\nREADME in the main directory: details all options, data format, and library calls.\n<br>\ntools/README: parameter selection and other tools\n<li>\nA guide for beginners:\n<br>\nC.-W. Hsu, C.-C. Chang, and\nC.-J. Lin.\n<A HREF=\"http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf\">\nA practical guide to support vector classification\n</A> \n<li> An <a href=http://www.youtube.com/watch?v=gePWtNAQcK8>introductory video</a>\nfor windows users.\n\n</ul>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f202\"><b>Q: Where are change log and earlier versions?</b></a>\n<br/>                                                                                \n<p>See <a href=\"http://www.csie.ntu.edu.tw/~cjlin/libsvm/log\">the change log</a>.\n\n<p> You can download earlier versions \n<a href=\"http://www.csie.ntu.edu.tw/~cjlin/libsvm/oldfiles\">here</a>.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f203\"><b>Q: How to cite LIBSVM?</b></a>\n<br/>                                                                                \n<p>\nPlease cite the following paper:\n<p>\nChih-Chung Chang and Chih-Jen Lin, LIBSVM\n: a library for support vector machines.\nACM Transactions on Intelligent Systems and Technology, 2:27:1--27:27, 2011.\nSoftware available at http://www.csie.ntu.edu.tw/~cjlin/libsvm\n<p>\nThe bibtex format is \n<pre>\n@article{CC01a,\n author = {Chang, Chih-Chung and Lin, Chih-Jen},\n title = {{LIBSVM}: A library for support vector machines},\n journal = {ACM Transactions on Intelligent Systems and Technology},\n volume = {2},\n issue = {3},\n year = {2011},\n pages = {27:1--27:27},\n note =\t {Software available at \\url{http://www.csie.ntu.edu.tw/~cjlin/libsvm}}\n}\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f204\"><b>Q: I would like to use libsvm in my software. Is there any license problem?</b></a>\n<br/>                                                                                \n<p>\nThe libsvm license (\"the modified BSD license\")\nis compatible with many\nfree software licenses such as GPL. Hence, it is very easy to\nuse libsvm in your software.\nPlease check the COPYRIGHT file in detail. Basically\nyou need to \n<ol>\n<li>\nClearly indicate that LIBSVM is used.\n</li>\n<li>\nRetain the LIBSVM COPYRIGHT file in your software.\n</li>\n</ol>\nIt can also be used in commercial products.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f205\"><b>Q: Is there a repository of additional tools based on libsvm?</b></a>\n<br/>                                                                                \n<p>\nYes, see <a href=\"http://www.csie.ntu.edu.tw/~cjlin/libsvmtools\">libsvm \ntools</a>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f206\"><b>Q: On unix machines, I got \"error in loading shared libraries\" or \"cannot open shared object file.\" What happened ? </b></a>\n<br/>                                                                                \n\n<p>\nThis usually happens if you compile the code\non one machine and run it on another which has incompatible\nlibraries.\nTry to recompile the program on that machine or use static linking.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f207\"><b>Q: I have modified the source and would like to build the graphic interface \"svm-toy\" on MS windows. How should I do it ?</b></a>\n<br/>                                                                                \n\n<p>\nBuild it as a project by choosing \"Win32 Project.\"\nOn the other hand, for \"svm-train\" and \"svm-predict\"\nyou want to choose \"Win32 Console Project.\"\nAfter libsvm 2.5, you can also use the file Makefile.win.\nSee details in README.\n\n\n<p>\nIf you are not using Makefile.win and see the following \nlink error\n<pre>\nLIBCMTD.lib(wwincrt0.obj) : error LNK2001: unresolved external symbol\n_wWinMain@16\n</pre>\nyou may have selected a wrong project type.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f208\"><b>Q: I am an MS windows user but why only one (svm-toy) of those precompiled .exe actually runs ?  </b></a>\n<br/>                                                                                \n\n<p>\nYou need to open a command window \nand type  svmtrain.exe to see all options.\nSome examples are in README file.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f209\"><b>Q: What is the difference between \".\" and \"*\" outputed during training? </b></a>\n<br/>                                                                                \n\n<p>\n\".\" means every 1,000 iterations (or every #data \niterations is your #data is less than 1,000).\n\"*\" means that after iterations of using\na smaller shrunk problem, \nwe reset to use the whole set. See the \n<a href=../papers/libsvm.pdf>implementation document</a> for details.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f210\"><b>Q: Why occasionally the program (including MATLAB or other interfaces) crashes and gives a segmentation fault?</b></a>\n<br/>                                                                                \n\n<p>\nVery likely the program consumes too much memory than what the \noperating system can provide. Try a smaller data and see if the \nprogram still crashes.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f211\"><b>Q: How to build a dynamic library (.dll file) on MS windows?</b></a>\n<br/>                                                                                \n<p>\n\nThe easiest way is to use Makefile.win.\nSee details in README.\n\nAlternatively, you can use Visual C++. Here is \nthe example using Visual Studio .Net 2008:\n<ol>\n<li>Create a Win32 empty DLL project and set (in Project->$Project_Name\nProperties...->Configuration) to \"Release.\"\n   About how to create a new dynamic link library, please refer to\n<a href=http://msdn2.microsoft.com/en-us/library/ms235636(VS.80).aspx>http://msdn2.microsoft.com/en-us/library/ms235636(VS.80).aspx</a>\n\n<li> Add svm.cpp, svm.h to your project.\n<li> Add __WIN32__ and _CRT_SECURE_NO_DEPRECATE to Preprocessor definitions (in\nProject->$Project_Name Properties...->C/C++->Preprocessor)\n<li> Set Create/Use Precompiled Header to Not Using Precompiled Headers\n(in Project->$Project_Name Properties...->C/C++->Precompiled Headers)\n<li> Set the path for the Modulation Definition File svm.def (in \nProject->$Project_Name Properties...->Linker->input\n<li> Build the DLL.\n<li> Rename the dll file to libsvm.dll and move it to the correct path.\n</ol>\n\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f212\"><b>Q: On some systems (e.g., Ubuntu), compiling LIBSVM gives many warning messages. Is this a problem and how to disable the warning message?</b></a>\n<br/>                                                                                \n\n<p>\nIf you are using a version before 3.18, probably you see\na warning message like\n<pre>\nsvm.cpp:2730: warning: ignoring return value of int fscanf(FILE*, const char*, ...), declared with attribute warn_unused_result\n</pre>\nThis is not a problem; see <a href=https://wiki.ubuntu.com/CompilerFlags#-D_FORTIFY_SOURCE=2>this page</a> for more \ndetails of ubuntu systems.\nTo disable the warning message you can replace\n<pre>\nCFLAGS = -Wall -Wconversion -O3 -fPIC\n</pre>\nwith\n<pre>\nCFLAGS = -Wall -Wconversion -O3 -fPIC -U_FORTIFY_SOURCE\n</pre>\nin Makefile.\n<p> After version 3.18, we have a better setting so that such warning messages do not appear.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q02:_Installation_and_running_the_program\"></a>\n<a name=\"f213\"><b>Q: In LIBSVM, why you don't use certain C/C++ library functions to make the code shorter?</b></a>\n<br/>                                                                                \n\n<p>\nFor portability, we use only features defined in ISO C89. Note that features in ISO C99 may not be available everywhere. \nEven the newest gcc lacks some features in C99 (see <a href=http://gcc.gnu.org/c99status.html>http://gcc.gnu.org/c99status.html</a> for details).\nIf the situation changes in the future, \nwe might consider using these newer features.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f301\"><b>Q: Why sometimes not all attributes of a data appear in the training/model files ?</b></a>\n<br/>                                                                                \n<p>\nlibsvm uses the so called \"sparse\" format where zero\nvalues do not need to be stored. Hence a data with attributes\n<pre>\n1 0 2 0\n</pre>\nis represented as\n<pre>\n1:1 3:2\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f302\"><b>Q: What if my data are non-numerical ?</b></a>\n<br/>                                                                                \n<p>\nCurrently libsvm supports only numerical data.\nYou may have to change non-numerical data to \nnumerical. For example, you can use several\nbinary attributes to represent a categorical\nattribute.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f303\"><b>Q: Why do you consider sparse format ? Will the training of dense data be much slower ?</b></a>\n<br/>                                                                                \n<p>\nThis is a controversial issue. The kernel\nevaluation (i.e. inner product) of sparse vectors is slower \nso the total training time can be at least twice or three times\nof that using the dense format.\nHowever, we cannot support only dense format as then we CANNOT\nhandle extremely sparse cases. Simplicity of the code is another\nconcern. Right now we decide to support\nthe sparse format only.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f304\"><b>Q: Why sometimes the last line of my data is not read by svm-train?</b></a>\n<br/>                                                                                \n\n<p>\nWe assume that you have '\\n' in the end of\neach line. So please press enter in the end\nof your last line.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f305\"><b>Q: Is there a program to check if my data are in the correct format?</b></a>\n<br/>                                                                                \n\n<p>\nThe svm-train program in libsvm conducts only a simple check of the input data. To do a\ndetailed check, after libsvm 2.85, you can use the python script tools/checkdata.py. See tools/README for details.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f306\"><b>Q: May I put comments in data files?</b></a>\n<br/>                                                                                \n\n<p>\nWe don't officially support this. But, currently LIBSVM\nis able to process data in the following\nformat:\n<pre>\n1 1:2 2:1 # your comments\n</pre>\nNote that the character \":\" should not appear in your\ncomments.\n<!--\nNo, for simplicity we don't support that.\nHowever, you can easily preprocess your data before\nusing libsvm. For example,\nif you have the following data\n<pre>\ntest.txt\n1 1:2 2:1 # proten A\n</pre>\nthen on unix machines you can do\n<pre>\ncut -d '#' -f 1 < test.txt > test.features\ncut -d '#' -f 2 < test.txt > test.comments\nsvm-predict test.feature train.model test.predicts\npaste -d '#' test.predicts test.comments | sed 's/#/ #/' > test.results\n</pre>\n-->\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q03:_Data_preparation\"></a>\n<a name=\"f307\"><b>Q: How to convert other data formats to LIBSVM format?</b></a>\n<br/>                                                                                \n\n<p>\nIt depends on your data format. A simple way is to use\nlibsvmwrite in the libsvm matlab/octave interface.\n\nTake a CSV (comma-separated values) file\nin UCI machine learning repository as an example.\nWe download <a href=http://archive.ics.uci.edu/ml/machine-learning-databases/spect/SPECTF.train>SPECTF.train</a>. \nLabels are in the first column. The following steps produce\na file in the libsvm format.\n<pre>\nmatlab> SPECTF = csvread('SPECTF.train'); % read a csv file\nmatlab> labels = SPECTF(:, 1); % labels from the 1st column\nmatlab> features = SPECTF(:, 2:end); \nmatlab> features_sparse = sparse(features); % features must be in a sparse matrix\nmatlab> libsvmwrite('SPECTFlibsvm.train', labels, features_sparse);\n</pre>\nThe tranformed data are stored in SPECTFlibsvm.train.\n\n<p>\nAlternatively, you can use <a href=\"./faqfiles/convert.c\">convert.c</a> \nto convert CSV format to libsvm format.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f401\"><b>Q: The output of training C-SVM is like the following. What do they mean?</b></a>\n<br/>                                                                                \n<br>optimization finished, #iter = 219\n<br>nu = 0.431030\n<br>obj = -100.877286, rho = 0.424632\n<br>nSV = 132, nBSV = 107\n<br>Total nSV = 132\n<p>\nobj is the optimal objective value of the dual SVM problem.\nrho is the bias term in the decision function\nsgn(w^Tx - rho).\nnSV and nBSV are number of support vectors and bounded support\nvectors (i.e., alpha_i = C). nu-svm is a somewhat equivalent\nform of C-SVM where C is replaced by nu. nu simply shows the\ncorresponding parameter. More details are in\n<a href=\"http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf\">\nlibsvm document</a>.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f402\"><b>Q: Can you explain more about the model file?</b></a>\n<br/>                                                                                \n\n<p>\nIn the model file, after parameters and other informations such as labels , each line represents a support vector.\nSupport vectors are listed in the order of \"labels\" shown earlier.\n(i.e., those from the first class in the \"labels\" list are\ngrouped first, and so on.) \nIf k is the total number of classes,\nin front of a support vector in class j, there are\nk-1 coefficients \ny*alpha where alpha are dual solution of the\nfollowing two class problems:\n<br>\n1 vs j, 2 vs j, ..., j-1 vs j, j vs j+1, j vs j+2, ..., j vs k\n<br>\nand y=1 in first j-1 coefficients, y=-1 in the remaining\nk-j coefficients.\n\nFor example, if there are 4 classes, the file looks like:\n\n<pre>\n+-+-+-+--------------------+\n|1|1|1|                    |\n|v|v|v|  SVs from class 1  |\n|2|3|4|                    |\n+-+-+-+--------------------+\n|1|2|2|                    |\n|v|v|v|  SVs from class 2  |\n|2|3|4|                    |\n+-+-+-+--------------------+\n|1|2|3|                    |\n|v|v|v|  SVs from class 3  |\n|3|3|4|                    |\n+-+-+-+--------------------+\n|1|2|3|                    |\n|v|v|v|  SVs from class 4  |\n|4|4|4|                    |\n+-+-+-+--------------------+\n</pre>\nSee also\n<a href=\"#f804\"> an illustration using\nMATLAB/OCTAVE.</a>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f403\"><b>Q: Should I use float or double to store numbers in the cache ?</b></a>\n<br/>                                                                                \n\n<p>\nWe have float as the default as you can store more numbers\nin the cache. \nIn general this is good enough but for few difficult\ncases (e.g. C very very large) where solutions are huge\nnumbers, it might be possible that the numerical precision is not\nenough using only float.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f405\"><b>Q: Does libsvm have special treatments for linear SVM?</b></a>\n<br/>                                                                                \n\n<p>\n\nNo, libsvm solves linear/nonlinear SVMs by the\nsame way.\nSome tricks may save training/testing time if the\nlinear kernel is used,\nso libsvm is <b>NOT</b> particularly efficient for linear SVM,\nespecially when\nC is large and\nthe number of data is much larger\nthan the number of attributes.\nYou can either\n<ul>\n<li>\nUse small C only. We have shown in the following paper\nthat after C is larger than a certain threshold,\nthe decision function is the same. \n<p>\n<a href=\"http://guppy.mpe.nus.edu.sg/~mpessk/\">S. S. Keerthi</a>\nand\n<B>C.-J. Lin</B>.\n<A HREF=\"papers/limit.pdf\">\nAsymptotic behaviors of support vector machines with \nGaussian kernel\n</A>\n.\n<I><A HREF=\"http://mitpress.mit.edu/journal-home.tcl?issn=08997667\">Neural Computation</A></I>, 15(2003), 1667-1689.\n\n\n<li>\nCheck <a href=http://www.csie.ntu.edu.tw/~cjlin/liblinear>liblinear</a>,\nwhich is designed for large-scale linear classification.\n</ul>\n\n<p> Please also see our <a href=../papers/guide/guide.pdf>SVM guide</a>\non the discussion of using RBF and linear\nkernels.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f406\"><b>Q: The number of free support vectors is large. What should I do?</b></a>\n<br/>                                                                                \n <p>\nThis usually happens when the data are overfitted.\nIf attributes of your data are in large ranges,\ntry to scale them. Then the region\nof appropriate parameters may be larger.\nNote that there is a scale program\nin libsvm. \n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f407\"><b>Q: Should I scale training and testing data in a similar way?</b></a>\n<br/>                                                                                \n<p>\nYes, you can do the following:\n<pre>\n> svm-scale -s scaling_parameters train_data > scaled_train_data\n> svm-scale -r scaling_parameters test_data > scaled_test_data\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f408\"><b>Q: Does it make a big difference  if I scale each attribute to [0,1] instead of [-1,1]?</b></a>\n<br/>                                                                                \n\n<p>\nFor the linear scaling method, if the RBF kernel is\nused and parameter selection is conducted, there\nis no difference. Assume Mi and mi are \nrespectively the maximal and minimal values of the\nith attribute. Scaling to [0,1] means\n<pre>\n                x'=(x-mi)/(Mi-mi)\n</pre>\nFor [-1,1],\n<pre>\n                x''=2(x-mi)/(Mi-mi)-1.\n</pre>\nIn the RBF kernel,\n<pre>\n                x'-y'=(x-y)/(Mi-mi), x''-y''=2(x-y)/(Mi-mi).\n</pre>\nHence, using (C,g) on the [0,1]-scaled data is the\nsame as (C,g/2) on the [-1,1]-scaled data.\n\n<p> Though the performance is the same, the computational\ntime may be different. For data with many zero entries,\n[0,1]-scaling keeps the sparsity of input data and hence\nmay save the time.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f409\"><b>Q: The prediction rate is low. How could I improve it?</b></a>\n<br/>                                                                                \n<p>\nTry to use the model selection tool grid.py in the tools\ndirectory find\nout good parameters. To see the importance of model selection,\nplease \nsee our guide for beginners:\n<A HREF=\"http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf\">\nA practical guide to support vector \nclassification \n</A>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f410\"><b>Q: My data are unbalanced. Could libsvm handle such problems?</b></a>\n<br/>                                                                                \n<p>\nYes, there is a -wi options. For example, if you use\n<pre>\n> svm-train -s 0 -c 10 -w1 1 -w-1 5 data_file\n</pre>\n<p>\nthe penalty for class \"-1\" is larger.\nNote that this -w option is for C-SVC only.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f411\"><b>Q: What is the difference between nu-SVC and C-SVC?</b></a>\n<br/>                                                                                \n<p>\nBasically they are the same thing but with different\nparameters. The range of C is from zero to infinity\nbut nu is always between [0,1]. A nice property\nof nu is that it is related to the ratio of \nsupport vectors and the ratio of the training\nerror.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f412\"><b>Q: The program keeps running (without showing any output). What should I do?</b></a>\n<br/>                                                                                \n<p>\nYou may want to check your data. Each training/testing\ndata must be in one line. It cannot be separated.\nIn addition, you have to remove empty lines.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f413\"><b>Q: The program keeps running (with output, i.e. many dots). What should I do?</b></a>\n<br/>                                                                                \n<p>\nIn theory libsvm guarantees to converge.\nTherefore, this means you are\nhandling ill-conditioned situations\n(e.g. too large/small parameters) so numerical\ndifficulties occur.\n<p>\nYou may get better numerical stability by replacing\n<pre>\ntypedef float Qfloat;\n</pre>\nin svm.cpp with\n<pre>\ntypedef double Qfloat;\n</pre>\nThat is, elements in the kernel cache are stored\nin double instead of single. However, this means fewer elements\ncan be put in the kernel cache.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f414\"><b>Q: The training time is too long. What should I do?</b></a>\n<br/>                                                                                \n<p>\nFor large problems, please specify enough cache size (i.e.,\n-m).\nSlow convergence may happen for some difficult cases (e.g. -c is large).\nYou can try to use a looser stopping tolerance with -e.\nIf that still doesn't work, you may train only a subset of the data.\nYou can use the program subset.py in the directory \"tools\" \nto obtain a random subset.\n\n<p>\nIf you have extremely large data and face this difficulty, please\ncontact us. We will be happy to discuss possible solutions.\n\n<p> When using large -e, you may want to check if -h 0 (no shrinking) or -h 1 (shrinking) is faster.\nSee a related question below.\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f4141\"><b>Q: Does shrinking always help?</b></a>\n<br/>                                                                                \n<p>\nIf the number of iterations is high, then shrinking\noften helps.\nHowever, if the number of iterations is small\n(e.g., you specify a large -e), then\nprobably using -h 0 (no shrinking) is better.\nSee the \n<a href=../papers/libsvm.pdf>implementation document</a> for details.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f415\"><b>Q: How do I get the decision value(s)?</b></a>\n<br/>                                                                                \n<p>\nWe print out decision values for regression. For classification,\nwe solve several binary SVMs for multi-class cases. You\ncan obtain values by easily calling the subroutine\nsvm_predict_values. Their corresponding labels\ncan be obtained from svm_get_labels. \nDetails are in \nREADME of libsvm package. \n\n<p>\nIf you are using MATLAB/OCTAVE interface, svmpredict can directly\ngive you decision values. Please see matlab/README for details.\n\n<p>\nWe do not recommend the following. But if you would\nlike to get values for \nTWO-class classification with labels +1 and -1\n(note: +1 and -1 but not things like 5 and 10)\nin the easiest way, simply add \n<pre>\n\t\tprintf(\"%f\\n\", dec_values[0]*model->label[0]);\n</pre>\nafter the line\n<pre>\n\t\tsvm_predict_values(model, x, dec_values);\n</pre>\nof the file svm.cpp.\nPositive (negative)\ndecision values correspond to data predicted as +1 (-1).\n\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f4151\"><b>Q: How do I get the distance between a point and the hyperplane?</b></a>\n<br/>                                                                                \n<p>\nThe distance is |decision_value| / |w|. \nWe have |w|^2 = w^Tw = alpha^T Q alpha = 2*(dual_obj + sum alpha_i). \nThus in svm.cpp please find the place \nwhere we calculate the dual objective value\n(i.e., the subroutine Solve())\nand add a statement to print w^Tw.\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f416\"><b>Q: On 32-bit machines, if I use a large cache (i.e. large -m) on a linux machine, why sometimes I get \"segmentation fault ?\"</b></a>\n<br/>                                                                                \n<p>\n\nOn 32-bit machines, the maximum addressable\nmemory is 4GB. The Linux kernel uses 3:1\nsplit which means user space is 3G and\nkernel space is 1G. Although there are\n3G user space, the maximum dynamic allocation\nmemory is 2G. So, if you specify -m near 2G,\nthe memory will be exhausted. And svm-train\nwill fail when it asks more memory.\nFor more details, please read \n<a href=http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=3BA164F6.BAFA4FB%40daimi.au.dk>\nthis article</a>.\n<p>\nThe easiest solution is to switch to a\n 64-bit machine.\nOtherwise, there are two ways to solve this. If your\nmachine supports Intel's PAE (Physical Address\nExtension), you can turn on the option HIGHMEM64G\nin Linux kernel which uses 4G:4G split for\nkernel and user space. If you don't, you can\ntry a software `tub' which can eliminate the 2G\nboundary for dynamic allocated memory. The `tub'\nis available at \n<a href=http://www.bitwagon.com/tub.html>http://www.bitwagon.com/tub.html</a>.\n\n\n<!--\n\nThis may happen only  when the cache is large, but each cached row is\nnot large enough. <b>Note:</b> This problem is specific to \ngnu C library which is used in linux.\nThe solution is as follows:\n\n<p>\nIn our program we have malloc() which uses two methods \nto allocate memory from kernel. One is\nsbrk() and another is mmap(). sbrk is faster, but mmap \nhas a larger address\nspace. So malloc uses mmap only if the wanted memory size is larger\nthan some threshold (default 128k).\nIn the case where each row is not large enough (#elements < 128k/sizeof(float)) but we need a large cache ,\nthe address space for sbrk can be exhausted. The solution is to\nlower the threshold to force malloc to use mmap\nand increase the maximum number of chunks to allocate\nwith mmap.\n\n<p>\nTherefore, in the main program (i.e. svm-train.c) you want\nto have\n<pre>\n      #include &lt;malloc.h&gt;\n</pre>\nand then in main():\n<pre>\n      mallopt(M_MMAP_THRESHOLD, 32768);\n      mallopt(M_MMAP_MAX,1000000);\n</pre>\nYou can also set the environment variables instead\nof writing them in the program:\n<pre>\n$ M_MMAP_MAX=1000000 M_MMAP_THRESHOLD=32768 ./svm-train .....\n</pre>\nMore information can be found by \n<pre>\n$ info libc \"Malloc Tunable Parameters\"\n</pre>\n-->\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f417\"><b>Q: How do I disable screen output of svm-train?</b></a>\n<br/>                                                                                \n<p>\nFor commend-line users, use the -q option:\n<pre>\n> ./svm-train -q heart_scale\n</pre>\n<p>\nFor library users, set the global variable\n<pre>\nextern void (*svm_print_string) (const char *);\n</pre>\nto specify the output format. You can disable the output by the following steps:\n<ol>\n<li>\nDeclare a function to output nothing:\n<pre>\nvoid print_null(const char *s) {}\n</pre>\n</li>\n<li>\nAssign the output function of libsvm by\n<pre>\nsvm_print_string = &print_null;\n</pre>\n</li>\n</ol>\nFinally, a way used in earlier libsvm\nis by updating svm.cpp from\n<pre>\n#if 1\nvoid info(const char *fmt,...)\n</pre>\nto\n<pre>\n#if 0\nvoid info(const char *fmt,...)\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f418\"><b>Q: I would like to use my own kernel. Any example? In svm.cpp, there are two subroutines for kernel evaluations: k_function() and kernel_function(). Which one should I modify ?</b></a>\n<br/>                                                                                \n<p>\nAn example is \"LIBSVM for string data\" in LIBSVM Tools.\n<p>\nThe reason why we have two functions is as follows.\nFor the RBF kernel exp(-g |xi - xj|^2), if we calculate\nxi - xj first and then the norm square, there are 3n operations.\nThus we consider exp(-g (|xi|^2 - 2dot(xi,xj) +|xj|^2))\nand by calculating all |xi|^2 in the beginning, \nthe number of operations is reduced to 2n.\nThis is for the training.  For prediction we cannot\ndo this so a regular subroutine using that 3n operations is\nneeded.\n\nThe easiest way to have your own kernel is\nto  put the same code in these two\nsubroutines by replacing any kernel.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f419\"><b>Q: What method does libsvm use for multi-class SVM ? Why don't you use the \"1-against-the rest\" method?</b></a>\n<br/>                                                                                \n<p>\nIt is one-against-one. We chose it after doing the following\ncomparison:\nC.-W. Hsu and C.-J. Lin.\n<A HREF=\"http://www.csie.ntu.edu.tw/~cjlin/papers/multisvm.pdf\">\nA comparison of methods \nfor multi-class support vector machines\n</A>, \n<I>IEEE Transactions on Neural Networks</A></I>, 13(2002), 415-425.\n\n<p>\n\"1-against-the rest\" is a good method whose performance\nis comparable to \"1-against-1.\" We do the latter\nsimply because its training time is shorter.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f422\"><b>Q: I would like to solve L2-loss SVM (i.e., error term is quadratic). How should I modify the code ?</b></a>\n<br/>                                                                                \n<p>\nIt is extremely easy. Taking c-svc for example, to solve\n<p>\nmin_w w^Tw/2 + C \\sum max(0, 1- (y_i w^Tx_i+b))^2,\n<p>\nonly two \nplaces of svm.cpp have to be changed. \nFirst, modify the following line of \nsolve_c_svc from \n<pre>\n\ts.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y,\n\t\talpha, Cp, Cn, param->eps, si, param->shrinking);\n</pre>\nto\n<pre>\n\ts.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y,\n\t\talpha, INF, INF, param->eps, si, param->shrinking);\n</pre>\nSecond, in  the class  of SVC_Q, declare C as \na private variable:\n<pre>\n\tdouble C;\n</pre> \nIn the constructor replace\n<pre>\n\tfor(int i=0;i&lt;prob.l;i++)\n\t\tQD[i]= (Qfloat)(this->*kernel_function)(i,i);\n</pre>\nwith\n<pre>\n        this->C = param.C;\n\tfor(int i=0;i&lt;prob.l;i++)\n\t\tQD[i]= (Qfloat)(this->*kernel_function)(i,i)+0.5/C;\n</pre>\nThen in the subroutine get_Q, after the for loop, add\n<pre>\n        if(i >= start && i < len) \n\t\tdata[i] += 0.5/C;\n</pre>\n\n<p>\nFor one-class svm, the modification is exactly the same. For SVR, you don't need an if statement like the above. Instead, you only need a simple assignment:\n<pre>\n\tdata[real_i] += 0.5/C;\n</pre>\n\n\n<p>\nFor large linear L2-loss SVM, please use\n<a href=../liblinear>LIBLINEAR</a>.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f425\"><b>Q: In one-class SVM, parameter nu should be an upper bound of the training error rate. Why sometimes I get a training error rate bigger than nu?</b></a>\n<br/>                                                                                \n\n<p>\nAt optimum, some training instances should satisfy\nw^Tx - rho = 0. However, numerically they may be slightly\nsmaller than zero\nThen they are wrongly counted\nas training errors. You can use a smaller stopping tolerance\n(by the -e option) to make this problem less serious.\n\n<p> \nThis issue <b>does not occur</b> for nu-SVC for \ntwo-class classification.\nWe have that\n<ol>\n<li>nu is an upper bound on the ratio of training points\non the wrong side of the hyperplane, and\n<li>therefore, nu is also an upper bound on the training error rate.\n</ol>\nNumerical issues occur in calculating the first case\nbecause some training points satisfying y(w^Tx + b) - rho = 0\nbecome negative. \nHowever, we have no numerical  problems for the second case because\nwe compare y(w^Tx + b) and 0 for counting training errors.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f427\"><b>Q: Why the code gives NaN (not a number) results?</b></a>\n<br/>                                                                                \n<p>\nThis rarely happens, but few users reported the problem.\nIt seems that their \ncomputers for training libsvm have the VPN client\nrunning. The VPN software has some bugs and causes this\nproblem. Please try to close or disconnect the VPN client.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f430\"><b>Q: Why the sign of predicted labels and decision values are sometimes reversed?</b></a>\n<br/>                                                                                \n<p>\n\nThis situation may occur <b>before version 3.17</b>.\nNothing is wrong. Very likely you have two labels +1/-1 and the first instance in your data\nhas -1. We give the following explanation.\n\n<p>\nInternally class labels are ordered by their first occurrence in the training set. For a k-class data, internally labels\nare 0, ..., k-1, and each two-class SVM considers pair\n(i, j) with i < j. Then class i is treated as positive (+1)\nand j as negative (-1).\nFor example, if the data set has labels +5/+10 and +10 appears\nfirst, then internally the +5 versus +10 SVM problem\nhas +10 as positive (+1) and +5 as negative (-1).\n\n<p>\nBy this setting, if you have labels +1 and -1,\nit's possible that internally they correspond to -1 and +1,\nrespectively. Some new users have been confused about\nthis, so <b>after version 3.17</b>, if the data set has only\ntwo labels +1 and -1,\ninternally we ensure +1 to be before -1. Then class +1 \nis always treated as positive in the SVM problem.\nNote that this is for <b>two-class data only.</b>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f431\"><b>Q: I don't know class labels of test data. What should I put in the first column of the test file?</b></a>\n<br/>                                                                                \n<p>Any value is ok. In this situation, what you will use is the output file of svm-predict, which gives predicted class labels.\n\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f432\"><b>Q: How can I use OpenMP to parallelize LIBSVM on a multicore/shared-memory computer?</b></a>\n<br/>                                                                                \n\n<p>It is very easy if you are using GCC 4.2\nor after. \n\n<p> In Makefile, add -fopenmp  to CFLAGS.\n\n<p> In class SVC_Q of svm.cpp, modify the for loop\nof get_Q to:\n<pre>\n#pragma omp parallel for private(j) \n\t\t\tfor(j=start;j&lt;len;j++)\n</pre>\n<p> In the subroutine svm_predict_values of svm.cpp, add one line to the for loop:\n<pre>\n#pragma omp parallel for private(i) \n\t\tfor(i=0;i&lt;l;i++)\n\t\t\tkvalue[i] = Kernel::k_function(x,model-&gt;SV[i],model-&gt;param);\n</pre>\nFor regression, you need to modify\nclass SVR_Q instead. The loop in svm_predict_values\nis also different because you need\na reduction clause for the variable sum:\n<pre>\n#pragma omp parallel for private(i) reduction(+:sum) \n\t\tfor(i=0;i&lt;model->l;i++)\n\t\t\tsum += sv_coef[i] * Kernel::k_function(x,model-&gt;SV[i],model-&gt;param);\n</pre>\n\n<p> Then rebuild the package. Kernel evaluations in training/testing will be parallelized. An example of running this modification on\nan 8-core machine using the data set\n<a href=../libsvmtools/datasets/binary/ijcnn1.bz2>ijcnn1</a>:\n\n<p> 8 cores:\n<pre>\n%setenv OMP_NUM_THREADS 8\n%time svm-train -c 16 -g 4 -m 400 ijcnn1\n27.1sec\n</pre>\n1 core:\n<pre>\n%setenv OMP_NUM_THREADS 1\n%time svm-train -c 16 -g 4 -m 400 ijcnn1\n79.8sec\n</pre>\nFor this data, kernel evaluations take 80% of training time. In the above example, we assume you use csh. For bash, use\n<pre>\nexport OMP_NUM_THREADS=8\n</pre>\ninstead.\n\n<p> For Python interface, you need to add the -lgomp link option:\n<pre>\n$(CXX) -lgomp -shared -dynamiclib svm.o -o libsvm.so.$(SHVER)\n</pre>\n\n<p> For MS Windows, you need to add /openmp in CFLAGS of Makefile.win\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f433\"><b>Q: How could I know which training instances are support vectors?</b></a>\n<br/>                                                                                \n\n<p>\nIt's very simple. Since version 3.13, you can use the function\n<pre>\nvoid svm_get_sv_indices(const struct svm_model *model, int *sv_indices)\n</pre>\nto get indices of support vectors. For example, in svm-train.c, after\n<pre>\n\t\tmodel = svm_train(&amp;prob, &amp;param);\n</pre>\nyou can add\n<pre>\n\t\tint nr_sv = svm_get_nr_sv(model);\n\t\tint *sv_indices = Malloc(int, nr_sv);\n\t\tsvm_get_sv_indices(model, sv_indices);\n\t\tfor (int i=0; i&lt;nr_sv; i++)\n\t\t\tprintf(\"instance %d is a support vector\\n\", sv_indices[i]);\n</pre>\n\n<p> If you use matlab interface, you can directly check\n<pre>\nmodel.sv_indices\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q04:_Training_and_prediction\"></a>\n<a name=\"f434\"><b>Q: Why sv_indices (indices of support vectors) are not stored in the saved model file?</b></a>\n<br/>                                                                                \n\n<p>\nAlthough sv_indices is a member of the model structure\nto \nindicate support vectors in the training set,\nwe do not store its contents in the model file.\nThe model file is mainly used in the future for\nprediction, so it is basically <b>independent</b>\nfrom training data. Thus \nstoring sv_indices is not necessary.\nUsers should find support vectors right after\nthe training process. See the previous FAQ.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f501\"><b>Q: After doing cross validation, why there is no model file outputted ?</b></a>\n<br/>                                                                                \n<p>\nCross validation is used for selecting good parameters.\nAfter finding them, you want to re-train the whole\ndata without the -v option.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f502\"><b>Q: Why my cross-validation results are different from those in the Practical Guide?</b></a>\n<br/>                                                                                \n<p>\n\nDue to random partitions of\nthe data, on different systems CV accuracy values\nmay be different.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f503\"><b>Q: On some systems CV accuracy is the same in several runs. How could I use different data partitions? In other words, how do I set random seed in LIBSVM?</b></a>\n<br/>                                                                                \n<p>\nIf you use GNU C library,\nthe default seed 1 is considered. Thus you always\nget the same result of running svm-train -v.\nTo have different seeds, you can add the following code\nin svm-train.c:\n<pre>\n#include &lt;time.h&gt;\n</pre>\nand in the beginning of main(),\n<pre>\nsrand(time(0));\n</pre>\nAlternatively, if you are not using GNU C library\nand would like to use a fixed seed, you can have\n<pre>\nsrand(1);\n</pre>\n\n<p>\nFor Java, the random number generator\nis initialized using the time information.\nSo results of two CV runs are different.\nTo fix the seed, after version 3.1 (released\nin mid 2011), you can add\n<pre>\nsvm.rand.setSeed(0);\n</pre>\nin the main() function of svm_train.java.\n\n<p>\nIf you use CV to select parameters, it is recommended to use identical folds\nunder different parameters. In this case, you can consider fixing the seed.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f504\"><b>Q: Why on windows sometimes grid.py fails?</b></a>\n<br/>                                                                                \n<p>\n\nThis problem shouldn't happen after version\n2.85. If you are using earlier versions,\nplease download the latest one.\n\n<!--\n<p>\nIf you are using earlier \nversions, the error message is probably\n<pre>\nTraceback (most recent call last):\n  File \"grid.py\", line 349, in ?\n    main()\n  File \"grid.py\", line 344, in main\n    redraw(db)\n  File \"grid.py\", line 132, in redraw\n    gnuplot.write(\"set term windows\\n\")\nIOError: [Errno 22] Invalid argument\n</pre>\n\n<p>Please try to close gnuplot windows and rerun.\nIf the problem still occurs, comment the following\ntwo lines in grid.py by inserting \"#\" in the beginning:\n<pre>\n        redraw(db)\n        redraw(db,1)\n</pre>\nThen you get accuracy only but not cross validation contours.\n-->\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f505\"><b>Q: Why grid.py/easy.py sometimes generates the following warning message?</b></a>\n<br/>                                                                                \n<pre>\nWarning: empty z range [62.5:62.5], adjusting to [61.875:63.125]\nNotice: cannot contour non grid data!\n</pre>\n<p>Nothing is wrong and please disregard the \nmessage. It is from gnuplot when drawing\nthe contour.  \n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f506\"><b>Q: How do I choose the kernel?</b></a>\n<br/>                                                                                \n\n<p>\nIn general we suggest you to try the RBF kernel first.\nA recent result by Keerthi and Lin\n(<a href=http://www.csie.ntu.edu.tw/~cjlin/papers/limit.pdf>\ndownload paper here</a>)\nshows that if RBF is used with model selection,\nthen there is no need to consider the linear kernel.\nThe kernel matrix using sigmoid may not be positive definite\nand in general it's accuracy is not better than RBF.\n(see the paper by Lin and Lin\n(<a href=http://www.csie.ntu.edu.tw/~cjlin/papers/tanh.pdf>\ndownload paper here</a>).\nPolynomial kernels are ok but if a high degree is used,\nnumerical difficulties tend to happen\n(thinking about dth power of (<1) goes to 0\nand (>1) goes to infinity).\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f507\"><b>Q: How does LIBSVM perform parameter selection for multi-class problems? </b></a>\n<br/>                                                                                \n\n<p>\nLIBSVM implements \"one-against-one\" multi-class method, so there are \nk(k-1)/2 binary models, where k is the number of classes.\n\n<p>\nWe can consider two ways to conduct parameter selection.\n\n<ol>\n<li>\nFor any two classes of data, a parameter selection procedure is conducted. Finally,\neach decision function has its own optimal parameters.\n</li>\n<li>\nThe same parameters are used for all k(k-1)/2 binary classification problems.\nWe select parameters that achieve the highest overall performance.\n</li>\n</ol>\n\nEach has its own advantages. A\nsingle parameter set may not be uniformly good for all k(k-1)/2 decision functions.\nHowever, as the overall accuracy is the final consideration, one parameter set \nfor one decision function may lead to over-fitting. In the paper\n<p>\nChen, Lin, and Sch&ouml;lkopf,\n<A HREF=\"../papers/nusvmtutorial.pdf\">\nA tutorial on nu-support vector machines.\n</A> \nApplied Stochastic Models in Business and Industry, 21(2005), 111-136,\n\n<p>\nthey have experimentally\nshown that the two methods give similar performance.\nTherefore, currently the parameter selection in LIBSVM\ntakes the second approach by considering the same parameters for\nall k(k-1)/2 models.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q05:_Cross_validation_and_parameter_selection\"></a>\n<a name=\"f508\"><b>Q: How do I choose parameters for one-class SVM as training data are in only one class?</b></a>\n<br/>                                                                                \n<p>\nYou have pre-specified true positive rate in mind and then search for\nparameters which achieve similar cross-validation accuracy.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q06:_Probability_outputs\"></a>\n<a name=\"f425\"><b>Q: Why training a probability model (i.e., -b 1) takes a longer time?</b></a>\n<br/>                                                                                \n<p>\nTo construct this probability model, we internally conduct a \ncross validation, which is more time consuming than\na regular training.\nHence, in general you do parameter selection first without\n-b 1. You only use -b 1 when good parameters have been\nselected. In other words, you avoid using -b 1 and -v\ntogether.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q06:_Probability_outputs\"></a>\n<a name=\"f426\"><b>Q: Why using the -b option does not give me better accuracy?</b></a>\n<br/>                                                                                \n<p>\nThere is absolutely no reason the probability outputs guarantee\nyou better accuracy. The main purpose of this option is\nto provide you the probability estimates, but not to boost\nprediction accuracy. From our experience, \nafter proper parameter selections, in general with\nand without -b have similar accuracy. Occasionally there\nare some differences.\nIt is not recommended to compare the two under \njust a fixed parameter\nset as more differences will be observed.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q06:_Probability_outputs\"></a>\n<a name=\"f427\"><b>Q: Why using svm-predict -b 0 and -b 1 gives different accuracy values?</b></a>\n<br/>                                                                                \n<p>\nLet's just consider two-class classification here. After probability information is obtained in training,\nwe do not have\n<p>\nprob > = 0.5 if and only if decision value >= 0.\n<p>\nSo predictions may be different with -b 0 and 1.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q07:_Graphic_interface\"></a>\n<a name=\"f501\"><b>Q: How can I save images drawn by svm-toy?</b></a>\n<br/>                                                                                \n<p>\nFor Microsoft windows, first press the \"print screen\" key on the keyboard.\nOpen \"Microsoft Paint\" \n(included in Windows) \nand press \"ctrl-v.\" Then you can clip\nthe part of picture which you want.\nFor X windows, you can \nuse the program \"xv\" or \"import\" to grab the picture of the svm-toy window.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q07:_Graphic_interface\"></a>\n<a name=\"f502\"><b>Q: I press the \"load\" button to load data points but why svm-toy does not draw them ?</b></a>\n<br/>                                                                                \n<p>\nThe program svm-toy assumes both attributes (i.e. x-axis and y-axis\nvalues) are in (0,1). Hence you want to scale your \ndata to between a small positive number and \na number less than but very close to 1.\nMoreover, class labels must be 1, 2, or 3\n(not 1.0, 2.0 or anything else).\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q07:_Graphic_interface\"></a>\n<a name=\"f503\"><b>Q: I would like svm-toy to handle more than three classes of data, what should I do ?</b></a>\n<br/>                                                                                \n<p>\nTaking windows/svm-toy.cpp as an example, you need to\nmodify it and  the difference\nfrom the original file is as the following: (for five classes of\ndata)\n<pre>\n30,32c30\n< \tRGB(200,0,200),\n< \tRGB(0,160,0),\n< \tRGB(160,0,0)\n---\n> \tRGB(200,0,200)\n39c37\n< HBRUSH brush1, brush2, brush3, brush4, brush5;\n---\n> HBRUSH brush1, brush2, brush3;\n113,114d110\n< \tbrush4 = CreateSolidBrush(colors[7]);\n< \tbrush5 = CreateSolidBrush(colors[8]);\n155,157c151\n< \telse if(v==3) return brush3;\n< \telse if(v==4) return brush4;\n< \telse return brush5;\n---\n> \telse return brush3;\n325d318\n< \t  int colornum = 5;\n327c320\n< \t\tsvm_node *x_space = new svm_node[colornum * prob.l];\n---\n> \t\tsvm_node *x_space = new svm_node[3 * prob.l];\n333,338c326,331\n< \t\t\tx_space[colornum * i].index = 1;\n< \t\t\tx_space[colornum * i].value = q->x;\n< \t\t\tx_space[colornum * i + 1].index = 2;\n< \t\t\tx_space[colornum * i + 1].value = q->y;\n< \t\t\tx_space[colornum * i + 2].index = -1;\n< \t\t\tprob.x[i] = &x_space[colornum * i];\n---\n> \t\t\tx_space[3 * i].index = 1;\n> \t\t\tx_space[3 * i].value = q->x;\n> \t\t\tx_space[3 * i + 1].index = 2;\n> \t\t\tx_space[3 * i + 1].value = q->y;\n> \t\t\tx_space[3 * i + 2].index = -1;\n> \t\t\tprob.x[i] = &x_space[3 * i];\n397c390\n< \t\t\t\tif(current_value > 5) current_value = 1;\n---\n> \t\t\t\tif(current_value > 3) current_value = 1;\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q08:_Java_version_of_libsvm\"></a>\n<a name=\"f601\"><b>Q: What is the difference between Java version and C++ version of libsvm?</b></a>\n<br/>                                                                                \n<p>\nThey are the same thing. We just rewrote the C++ code\nin Java.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q08:_Java_version_of_libsvm\"></a>\n<a name=\"f602\"><b>Q: Is the Java version significantly slower than the C++ version?</b></a>\n<br/>                                                                                \n<p>\nThis depends on the VM you used. We have seen good\nVM which leads the Java version to be quite competitive with\nthe C++ code. (though still slower)\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q08:_Java_version_of_libsvm\"></a>\n<a name=\"f603\"><b>Q: While training I get the following error message: java.lang.OutOfMemoryError. What is wrong?</b></a>\n<br/>                                                                                \n<p>\nYou should try to increase the maximum Java heap size.\nFor example,\n<pre>\njava -Xmx2048m -classpath libsvm.jar svm_train ...\n</pre>\nsets the maximum heap size to 2048M.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q08:_Java_version_of_libsvm\"></a>\n<a name=\"f604\"><b>Q: Why you have the main source file svm.m4 and then transform it to svm.java?</b></a>\n<br/>                                                                                \n<p>\nUnlike C, Java does not have a preprocessor built-in.\nHowever,  we need some macros (see first 3 lines of svm.m4).\n\n</ul>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q09:_Python_interface\"></a>\n<a name=\"f704\"><b>Q: Except the python-C++ interface provided, could I use Jython to call libsvm ?</b></a>\n<br/>                                                                                \n<p> Yes, here are some examples:\n\n<pre>\n$ export CLASSPATH=$CLASSPATH:~/libsvm-2.91/java/libsvm.jar\n$ ./jython\nJython 2.1a3 on java1.3.0 (JIT: jitc)\nType \"copyright\", \"credits\" or \"license\" for more information.\n>>> from libsvm import *\n>>> dir()\n['__doc__', '__name__', 'svm', 'svm_model', 'svm_node', 'svm_parameter',\n'svm_problem']\n>>> x1 = [svm_node(index=1,value=1)]\n>>> x2 = [svm_node(index=1,value=-1)]\n>>> param = svm_parameter(svm_type=0,kernel_type=2,gamma=1,cache_size=40,eps=0.001,C=1,nr_weight=0,shrinking=1)\n>>> prob = svm_problem(l=2,y=[1,-1],x=[x1,x2])\n>>> model = svm.svm_train(prob,param)\n*\noptimization finished, #iter = 1\nnu = 1.0\nobj = -1.018315639346838, rho = 0.0\nnSV = 2, nBSV = 2\nTotal nSV = 2\n>>> svm.svm_predict(model,x1)\n1.0\n>>> svm.svm_predict(model,x2)\n-1.0\n>>> svm.svm_save_model(\"test.model\",model)\n\n</pre>\n\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f801\"><b>Q: I compile the MATLAB interface without problem, but why errors occur while running it?</b></a>\n<br/>                                                                                \n<p>\nYour compiler version may not be supported/compatible for MATLAB.\nPlease check <a href=http://www.mathworks.com/support/compilers/current_release>this MATLAB page</a> first and then specify the version\nnumber. For example, if g++ X.Y is supported, replace\n<pre>\nCXX = g++\n</pre>\nin the Makefile with\n<pre>\nCXX = g++-X.Y\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f8011\"><b>Q: On 64bit Windows I compile the MATLAB interface without problem, but why errors occur while running it?</b></a>\n<br/>                                                                                \n<p>\n\n\nPlease make sure that you use\nthe -largeArrayDims option in make.m. For example,\n<pre>\nmex -largeArrayDims -O -c svm.cpp\n</pre>\n\nMoreover, if you use Microsoft Visual Studio, \nprobabally it is not properly installed. \nSee the explanation \n<a href=http://www.mathworks.com/support/compilers/current_release/win64.html#n7>here</a>.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f802\"><b>Q: Does the MATLAB interface provide a function to do scaling?</b></a>\n<br/>                                                                                \n<p>\nIt is extremely easy to do scaling under MATLAB.\nThe following one-line code scale each feature to the range\nof [0,1]:\n<pre>\n(data - repmat(min(data,[],1),size(data,1),1))*spdiags(1./(max(data,[],1)-min(data,[],1))',0,size(data,2),size(data,2))\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f803\"><b>Q: How could I use MATLAB interface for parameter selection?</b></a>\n<br/>                                                                                \n<p>\nOne can do this by a simple loop. \nSee the following example:\n<pre>\nbestcv = 0;\nfor log2c = -1:3,\n  for log2g = -4:1,\n    cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];\n    cv = svmtrain(heart_scale_label, heart_scale_inst, cmd);\n    if (cv >= bestcv),\n      bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;\n    end\n    fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\\n', log2c, log2g, cv, bestc, bestg, bestcv);\n  end\nend\n</pre>\nYou may adjust the parameter range in the above loops.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f8031\"><b>Q: I use MATLAB parallel programming toolbox on a multi-core environment for parameter selection. Why the program is even slower?</b></a>\n<br/>                                                                                \n<p>\nFabrizio Lacalandra of University of Pisa reported this issue.\nIt seems the problem is caused by the screen output.\nIf you disable the <b>info</b> function\nusing <pre>#if 0,</pre> then the problem\nmay be solved.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f8032\"><b>Q: How do I use LIBSVM with OpenMP under MATLAB?</b></a>\n<br/>                                                                                \n<p>\nIn Makefile,\nyou need to add -fopenmp to CFLAGS and -lgomp to MEX_OPTION. For Octave, you need the same modification.\n\n<p> However, a minor problem is that\nthe number of threads cannot\nbe specified in MATLAB. We tried Version 7.12 (R2011a) and gcc-4.6.1.\n\n<pre>\n% export OMP_NUM_THREADS=4; matlab\n>> setenv('OMP_NUM_THREADS', '1');\n</pre>\n\nThen OMP_NUM_THREADS is still 4 while running the program. Please contact us if you \nsee how to solve this problem. You can, however,\nspecify the number in the source code (thanks\nto comments from Ricardo Santiago-mozos):\n<pre>\n#pragma omp parallel  for private(i) num_threads(4)\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f804\"><b>Q: How could I generate the primal variable w of linear SVM?</b></a>\n<br/>                                                                                \n<p>\nLet's start from the binary class and\nassume you have two labels -1 and +1.\nAfter obtaining the model from calling svmtrain,\ndo the following to have w and b:\n<pre>\nw = model.SVs' * model.sv_coef;\nb = -model.rho;\n\nif model.Label(1) == -1\n  w = -w;\n  b = -b;\nend\n</pre>\nIf you do regression or one-class SVM, then the if statement is not needed.\n\n<p> For multi-class SVM, we illustrate the setting\nin the following example of running the iris\ndata, which have 3 classes\n<pre>  \n> [y, x] = libsvmread('../../htdocs/libsvmtools/datasets/multiclass/iris.scale');\n> m = svmtrain(y, x, '-t 0')\n\nm = \n\n    Parameters: [5x1 double]\n      nr_class: 3\n       totalSV: 42\n           rho: [3x1 double]\n         Label: [3x1 double]\n         ProbA: []\n         ProbB: []\n           nSV: [3x1 double]\n       sv_coef: [42x2 double]\n           SVs: [42x4 double]\n</pre>\nsv_coef is like:\n<pre>\n+-+-+--------------------+\n|1|1|                    |\n|v|v|  SVs from class 1  |\n|2|3|                    |\n+-+-+--------------------+\n|1|2|                    |\n|v|v|  SVs from class 2  |\n|2|3|                    |\n+-+-+--------------------+\n|1|2|                    |\n|v|v|  SVs from class 3  |\n|3|3|                    |\n+-+-+--------------------+\n</pre>\nso we need to see nSV of each classes.\n<pre>  \n> m.nSV\n\nans =\n\n     3\n    21\n    18\n</pre>\nSuppose the goal is to find the vector w of classes \n1 vs 3. Then\ny_i alpha_i of training 1 vs 3 are\n<pre>  \n> coef = [m.sv_coef(1:3,2); m.sv_coef(25:42,1)];\n</pre>\nand SVs are:\n<pre>  \n> SVs = [m.SVs(1:3,:); m.SVs(25:42,:)];\n</pre>\nHence, w is\n<pre>\n> w = SVs'*coef;\n</pre>  \nFor rho,\n<pre>\n> m.rho\n\nans =\n\n    1.1465\n    0.3682\n   -1.9969\n> b = -m.rho(2);\n</pre>\nbecause rho is arranged by 1vs2 1vs3 2vs3.\n\n\n  \n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f805\"><b>Q: Is there an OCTAVE interface for libsvm?</b></a>\n<br/>                                                                                \n<p>\nYes, after libsvm 2.86, the matlab interface\nworks on OCTAVE as well. Please use make.m by typing\n<pre>\n>> make \n</pre>\nunder OCTAVE.\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f806\"><b>Q: How to handle the name conflict between svmtrain in the libsvm matlab interface and that in MATLAB bioinformatics toolbox?</b></a>\n<br/>                                                                                \n<p>\nThe easiest way is to rename the svmtrain binary \nfile (e.g., svmtrain.mexw32 on 32-bit windows) \nto a different\nname (e.g., svmtrain2.mexw32).\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f807\"><b>Q: On Windows I got an error message \"Invalid MEX-file: Specific module not found\" when running the pre-built MATLAB interface in the windows sub-directory. What should I do?</b></a>\n<br/>                                                                                \n<p>\n\nThe error usually happens\nwhen there are missing runtime components\nsuch as MSVCR100.dll on your Windows platform.\nYou can use tools such as \n<a href=http://www.dependencywalker.com/>Dependency \nWalker</a> to find missing library files.\n\n<p>\nFor example, if the pre-built MEX files are compiled by\nVisual C++ 2010,\nyou must have installed\nMicrosoft Visual C++ Redistributable Package 2010\n(vcredist_x86.exe). You can easily find the freely\navailable file from Microsoft's web site. \n\n<p>\nFor 64bit Windows, the situation is similar. If\nthe pre-built files are by\nVisual C++ 2008, then you must have\nMicrosoft Visual C++ Redistributable Package 2008\n(vcredist_x64.exe).\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f808\"><b>Q: LIBSVM supports 1-vs-1 multi-class classification. If instead I would like to use 1-vs-rest, how to implement it using MATLAB interface?</b></a>\n<br/>                                                                                \n\n<p>\nPlease use code in the following <a href=../libsvmtools/ovr_multiclass>directory</a>. The following example shows how to\ntrain and test the problem dna (<a href=../libsvmtools/datasets/multiclass/dna.scale>training</a> and <a href=../libsvmtools/datasets/multiclass/dna.scale.t>testing</a>).\n\n<p> Load, train and predict data:\n<pre>\n[trainY trainX] = libsvmread('./dna.scale');\n[testY testX] = libsvmread('./dna.scale.t');\nmodel = ovrtrain(trainY, trainX, '-c 8 -g 4');\n[pred ac decv] = ovrpredict(testY, testX, model);\nfprintf('Accuracy = %g%%\\n', ac * 100);\n</pre>\nConduct CV on a grid of parameters \n<pre>\nbestcv = 0;\nfor log2c = -1:2:3,\n  for log2g = -4:2:1,\n    cmd = ['-q -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];\n    cv = get_cv_ac(trainY, trainX, cmd, 3);\n    if (cv >= bestcv),\n      bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;\n    end\n    fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\\n', log2c, log2g, cv, bestc, bestg, bestcv);\n  end\nend\n</pre>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <a name=\"/Q10:_MATLAB_interface\"></a>\n<a name=\"f809\"><b>Q: I tried to install matlab interface on mac, but failed. What should I do?</b></a>\n<br/>                                                                                \n\n<p>\nWe assume that in a matlab command window you change directory to libsvm/matlab and type\n<pre>\n>> make\n</pre>\nWe discuss the following situations.\n\n<ol>\n<li>An error message like \"libsvmread.c:1:19: fatal error:\nstdio.h: No such file or directory\" appears.\n\n<p>\nReason: \"make\" looks for a C++ compiler, but \nno compiler is found. To get one, you can\n<ul>\n<li> Install XCode offered by Apple Inc.\n<li> Install XCode Command Line Tools.\n</ul>\n\n<p>\n<li> On OS X with Xcode 4.2+, I got an error message like \"llvm-gcc-4.2:\ncommand not found.\" \n\n<p>\nReason: Since Apple Inc. only ships llsvm-gcc instead of gcc-4.2, \nllvm-gcc-4.2 cannot be found.\n\n<p>\nIf you are using Xcode 4.2-4.6,\na related solution is offered at\n<a href=http://www.mathworks.com/matlabcentral/answers/94092>http://www.mathworks.com/matlabcentral/answers/94092</a>.\n\n<p>\nOn the other hand, for Xcode 5 (including Xcode 4.2-4.6), in a Matlab command window, enter\n<ul>\n<li> cd (matlabroot)\n<li> cd bin\n<li> Backup your mexopts.sh first\n<li> edit mexopts.sh\n<li> Scroll down to \"maci64\" section. Change\n<pre>\n\t\tCC='llvm-gcc-4.2'\n\t\tCXX='llvm-g++-4.2'\n</pre>\nto\n<pre>\n\t\tCC='llvm-gcc'\n\t\tCXX='llvm-g++'\n</pre>\n</ul>\n\nPlease also ensure that SDKROOT corresponds to the SDK version you are using.\n\n<p>\n<li> Other errors: you may check <a href=http://www.mathworks.com/matlabcentral/answers/94092>http://www.mathworks.com/matlabcentral/answers/94092</a>.\n\n</ol>\n<p align=\"right\">\n<a href=\"#_TOP\">[Go Top]</a>  \n<hr/>\n  <p align=\"middle\">\n<a href=\"http://www.csie.ntu.edu.tw/~cjlin/libsvm\">LIBSVM home page</a>\n</p>\n</body>\n</html>\n"
  },
  {
    "path": "Matlab/libsvm-3.19/Makefile",
    "content": "CXX ?= g++\nCFLAGS = -Wall -Wconversion -O3 -fPIC\nSHVER = 2\nOS = $(shell uname)\n\nall: svm-train svm-predict svm-scale\n\nlib: svm.o\n\tif [ \"$(OS)\" = \"Darwin\" ]; then \\\n\t\tSHARED_LIB_FLAG=\"-dynamiclib -Wl,-install_name,libsvm.so.$(SHVER)\"; \\\n\telse \\\n\t\tSHARED_LIB_FLAG=\"-shared -Wl,-soname,libsvm.so.$(SHVER)\"; \\\n\tfi; \\\n\t$(CXX) $${SHARED_LIB_FLAG} svm.o -o libsvm.so.$(SHVER)\n\nsvm-predict: svm-predict.c svm.o\n\t$(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm\nsvm-train: svm-train.c svm.o\n\t$(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm\nsvm-scale: svm-scale.c\n\t$(CXX) $(CFLAGS) svm-scale.c -o svm-scale\nsvm.o: svm.cpp svm.h\n\t$(CXX) $(CFLAGS) -c svm.cpp\nclean:\n\trm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER)\n"
  },
  {
    "path": "Matlab/libsvm-3.19/Makefile.win",
    "content": "#You must ensure nmake.exe, cl.exe, link.exe are in system path.\n#VCVARS32.bat\n#Under dosbox prompt\n#nmake -f Makefile.win\n\n##########################################\nCXX = cl.exe\nCFLAGS = /nologo /O2 /EHsc /I. /D _WIN32 /D _CRT_SECURE_NO_DEPRECATE\nTARGET = windows\n\nall: $(TARGET)\\svm-train.exe $(TARGET)\\svm-predict.exe $(TARGET)\\svm-scale.exe $(TARGET)\\svm-toy.exe lib\n\n$(TARGET)\\svm-predict.exe: svm.h svm-predict.c svm.obj\n\t$(CXX) $(CFLAGS) svm-predict.c svm.obj -Fe$(TARGET)\\svm-predict.exe\n\n$(TARGET)\\svm-train.exe: svm.h svm-train.c svm.obj\n\t$(CXX) $(CFLAGS) svm-train.c svm.obj -Fe$(TARGET)\\svm-train.exe\n\n$(TARGET)\\svm-scale.exe: svm.h svm-scale.c\n\t$(CXX) $(CFLAGS) svm-scale.c -Fe$(TARGET)\\svm-scale.exe\n\n$(TARGET)\\svm-toy.exe: svm.h svm.obj svm-toy\\windows\\svm-toy.cpp\n\t$(CXX) $(CFLAGS) svm-toy\\windows\\svm-toy.cpp svm.obj user32.lib gdi32.lib comdlg32.lib  -Fe$(TARGET)\\svm-toy.exe\n\nsvm.obj: svm.cpp svm.h\n\t$(CXX) $(CFLAGS) -c svm.cpp\n\nlib: svm.cpp svm.h svm.def\n\t$(CXX) $(CFLAGS) -LD svm.cpp -Fe$(TARGET)\\libsvm -link -DEF:svm.def \n\nclean:\n\t-erase /Q *.obj $(TARGET)\\.\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/README",
    "content": "Libsvm is a simple, easy-to-use, and efficient software for SVM\nclassification and regression. It solves C-SVM classification, nu-SVM\nclassification, one-class-SVM, epsilon-SVM regression, and nu-SVM\nregression. It also provides an automatic model selection tool for\nC-SVM classification. This document explains the use of libsvm.\n\nLibsvm is available at \nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm\nPlease read the COPYRIGHT file before using libsvm.\n\nTable of Contents\n=================\n\n- Quick Start\n- Installation and Data Format\n- `svm-train' Usage\n- `svm-predict' Usage\n- `svm-scale' Usage\n- Tips on Practical Use\n- Examples\n- Precomputed Kernels \n- Library Usage\n- Java Version\n- Building Windows Binaries\n- Additional Tools: Sub-sampling, Parameter Selection, Format checking, etc.\n- MATLAB/OCTAVE Interface\n- Python Interface\n- Additional Information\n\nQuick Start\n===========\n\nIf you are new to SVM and if the data is not large, please go to \n`tools' directory and use easy.py after installation. It does \neverything automatic -- from data scaling to parameter selection.\n\nUsage: easy.py training_file [testing_file]\n\nMore information about parameter selection can be found in\n`tools/README.'\n\nInstallation and Data Format\n============================\n\nOn Unix systems, type `make' to build the `svm-train' and `svm-predict'\nprograms. Run them without arguments to show the usages of them.\n\nOn other systems, consult `Makefile' to build them (e.g., see\n'Building Windows binaries' in this file) or use the pre-built\nbinaries (Windows binaries are in the directory `windows').\n\nThe format of training and testing data file is:\n\n<label> <index1>:<value1> <index2>:<value2> ...\n.\n.\n.\n\nEach line contains an instance and is ended by a '\\n' character.  For\nclassification, <label> is an integer indicating the class label\n(multi-class is supported). For regression, <label> is the target\nvalue which can be any real number. For one-class SVM, it's not used\nso can be any number.  The pair <index>:<value> gives a feature\n(attribute) value: <index> is an integer starting from 1 and <value>\nis a real number. The only exception is the precomputed kernel, where\n<index> starts from 0; see the section of precomputed kernels. Indices\nmust be in ASCENDING order. Labels in the testing file are only used\nto calculate accuracy or errors. If they are unknown, just fill the\nfirst column with any numbers.\n\nA sample classification data included in this package is\n`heart_scale'. To check if your data is in a correct form, use\n`tools/checkdata.py' (details in `tools/README').\n\nType `svm-train heart_scale', and the program will read the training\ndata and output the model file `heart_scale.model'. If you have a test\nset called heart_scale.t, then type `svm-predict heart_scale.t\nheart_scale.model output' to see the prediction accuracy. The `output'\nfile contains the predicted class labels.\n\nFor classification, if training data are in only one class (i.e., all\nlabels are the same), then `svm-train' issues a warning message:\n`Warning: training data in only one class. See README for details,'\nwhich means the training data is very unbalanced. The label in the\ntraining data is directly returned when testing.\n\nThere are some other useful programs in this package.\n\nsvm-scale:\n\n\tThis is a tool for scaling input data file.\n\nsvm-toy:\n\n\tThis is a simple graphical interface which shows how SVM\n\tseparate data in a plane. You can click in the window to \n\tdraw data points. Use \"change\" button to choose class \n\t1, 2 or 3 (i.e., up to three classes are supported), \"load\"\n\tbutton to load data from a file, \"save\" button to save data to\n\ta file, \"run\" button to obtain an SVM model, and \"clear\"\n\tbutton to clear the window.\n\n\tYou can enter options in the bottom of the window, the syntax of\n\toptions is the same as `svm-train'.\n\n\tNote that \"load\" and \"save\" consider dense data format both in\n\tclassification and the regression cases. For classification,\n\teach data point has one label (the color) that must be 1, 2,\n\tor 3 and two attributes (x-axis and y-axis values) in\n\t[0,1). For regression, each data point has one target value\n\t(y-axis) and one attribute (x-axis values) in [0, 1).\n\n\tType `make' in respective directories to build them.\n\n\tYou need Qt library to build the Qt version.\n\t(available from http://www.trolltech.com)\n\n\tYou need GTK+ library to build the GTK version.\n\t(available from http://www.gtk.org)\n\t\n\tThe pre-built Windows binaries are in the `windows'\n\tdirectory. We use Visual C++ on a 32-bit machine, so the\n\tmaximal cache size is 2GB.\n\n`svm-train' Usage\n=================\n\nUsage: svm-train [options] training_set_file [model_file]\noptions:\n-s svm_type : set type of SVM (default 0)\n\t0 -- C-SVC\t\t(multi-class classification)\n\t1 -- nu-SVC\t\t(multi-class classification)\n\t2 -- one-class SVM\t\n\t3 -- epsilon-SVR\t(regression)\n\t4 -- nu-SVR\t\t(regression)\n-t kernel_type : set type of kernel function (default 2)\n\t0 -- linear: u'*v\n\t1 -- polynomial: (gamma*u'*v + coef0)^degree\n\t2 -- radial basis function: exp(-gamma*|u-v|^2)\n\t3 -- sigmoid: tanh(gamma*u'*v + coef0)\n\t4 -- precomputed kernel (kernel values in training_set_file)\n-d degree : set degree in kernel function (default 3)\n-g gamma : set gamma in kernel function (default 1/num_features)\n-r coef0 : set coef0 in kernel function (default 0)\n-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)\n-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)\n-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\n-m cachesize : set cache memory size in MB (default 100)\n-e epsilon : set tolerance of termination criterion (default 0.001)\n-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)\n-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)\n-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)\n-v n: n-fold cross validation mode\n-q : quiet mode (no outputs)\n\n\nThe k in the -g option means the number of attributes in the input data.\n\noption -v randomly splits the data into n parts and calculates cross\nvalidation accuracy/mean squared error on them.\n\nSee libsvm FAQ for the meaning of outputs.\n\n`svm-predict' Usage\n===================\n\nUsage: svm-predict [options] test_file model_file output_file\noptions:\n-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); for one-class SVM only 0 is supported\n\nmodel_file is the model file generated by svm-train.\ntest_file is the test data you want to predict.\nsvm-predict will produce output in the output_file.\n\n`svm-scale' Usage\n=================\n\nUsage: svm-scale [options] data_filename\noptions:\n-l lower : x scaling lower limit (default -1)\n-u upper : x scaling upper limit (default +1)\n-y y_lower y_upper : y scaling limits (default: no y scaling)\n-s save_filename : save scaling parameters to save_filename\n-r restore_filename : restore scaling parameters from restore_filename\n\nSee 'Examples' in this file for examples.\n\nTips on Practical Use\n=====================\n\n* Scale your data. For example, scale each attribute to [0,1] or [-1,+1].\n* For C-SVC, consider using the model selection tool in the tools directory.\n* nu in nu-SVC/one-class-SVM/nu-SVR approximates the fraction of training\n  errors and support vectors.\n* If data for classification are unbalanced (e.g. many positive and\n  few negative), try different penalty parameters C by -wi (see\n  examples below).\n* Specify larger cache size (i.e., larger -m) for huge problems.\n\nExamples\n========\n\n> svm-scale -l -1 -u 1 -s range train > train.scale\n> svm-scale -r range test > test.scale\n\nScale each feature of the training data to be in [-1,1]. Scaling\nfactors are stored in the file range and then used for scaling the\ntest data.\n\n> svm-train -s 0 -c 5 -t 2 -g 0.5 -e 0.1 data_file \n\nTrain a classifier with RBF kernel exp(-0.5|u-v|^2), C=10, and\nstopping tolerance 0.1.\n\n> svm-train -s 3 -p 0.1 -t 0 data_file\n\nSolve SVM regression with linear kernel u'v and epsilon=0.1\nin the loss function.\n\n> svm-train -c 10 -w1 1 -w-2 5 -w4 2 data_file\n\nTrain a classifier with penalty 10 = 1 * 10 for class 1, penalty 50 =\n5 * 10 for class -2, and penalty 20 = 2 * 10 for class 4.\n\n> svm-train -s 0 -c 100 -g 0.1 -v 5 data_file\n\nDo five-fold cross validation for the classifier using\nthe parameters C = 100 and gamma = 0.1\n\n> svm-train -s 0 -b 1 data_file\n> svm-predict -b 1 test_file data_file.model output_file\n\nObtain a model with probability information and predict test data with\nprobability estimates\n\nPrecomputed Kernels \n===================\n\nUsers may precompute kernel values and input them as training and\ntesting files.  Then libsvm does not need the original\ntraining/testing sets.\n\nAssume there are L training instances x1, ..., xL and. \nLet K(x, y) be the kernel\nvalue of two instances x and y. The input formats\nare:\n\nNew training instance for xi:\n\n<label> 0:i 1:K(xi,x1) ... L:K(xi,xL) \n\nNew testing instance for any x:\n\n<label> 0:? 1:K(x,x1) ... L:K(x,xL) \n\nThat is, in the training file the first column must be the \"ID\" of\nxi. In testing, ? can be any value.\n\nAll kernel values including ZEROs must be explicitly provided.  Any\npermutation or random subsets of the training/testing files are also\nvalid (see examples below).\n\nNote: the format is slightly different from the precomputed kernel\npackage released in libsvmtools earlier.\n\nExamples:\n\n\tAssume the original training data has three four-feature\n\tinstances and testing data has one instance:\n\n\t15  1:1 2:1 3:1 4:1\n\t45      2:3     4:3\n\t25          3:1\n\n\t15  1:1     3:1\n\n\tIf the linear kernel is used, we have the following new\n\ttraining/testing sets:\n\n\t15  0:1 1:4 2:6  3:1\n\t45  0:2 1:6 2:18 3:0 \n\t25  0:3 1:1 2:0  3:1\n \n\t15  0:? 1:2 2:0  3:1\n\n\t? can be any value.\n\n\tAny subset of the above training file is also valid. For example,\n\n\t25  0:3 1:1 2:0  3:1\n\t45  0:2 1:6 2:18 3:0 \n\n\timplies that the kernel matrix is\n\n\t\t[K(2,2) K(2,3)] = [18 0]\n\t\t[K(3,2) K(3,3)] = [0  1]\n\nLibrary Usage\n=============\n\nThese functions and structures are declared in the header file\n`svm.h'.  You need to #include \"svm.h\" in your C/C++ source files and\nlink your program with `svm.cpp'. You can see `svm-train.c' and\n`svm-predict.c' for examples showing how to use them. We define\nLIBSVM_VERSION and declare `extern int libsvm_version; ' in svm.h, so\nyou can check the version number.\n\nBefore you classify test data, you need to construct an SVM model\n(`svm_model') using training data. A model can also be saved in\na file for later use. Once an SVM model is available, you can use it\nto classify new data.\n\n- Function: struct svm_model *svm_train(const struct svm_problem *prob,\n\t\t\t\t\tconst struct svm_parameter *param);\n\n    This function constructs and returns an SVM model according to\n    the given training data and parameters.\n\n    struct svm_problem describes the problem:\n\t\n\tstruct svm_problem\n\t{\n\t\tint l;\n\t\tdouble *y;\n\t\tstruct svm_node **x;\n\t};\n \n    where `l' is the number of training data, and `y' is an array containing\n    their target values. (integers in classification, real numbers in\n    regression) `x' is an array of pointers, each of which points to a sparse\n    representation (array of svm_node) of one training vector. \n\n    For example, if we have the following training data:\n\n    LABEL\tATTR1\tATTR2\tATTR3\tATTR4\tATTR5\n    -----\t-----\t-----\t-----\t-----\t-----\n      1\t\t  0\t  0.1\t  0.2\t  0\t  0\n      2\t\t  0\t  0.1\t  0.3\t -1.2\t  0\n      1\t\t  0.4\t  0\t  0\t  0\t  0\n      2\t\t  0\t  0.1\t  0\t  1.4\t  0.5\n      3\t\t -0.1\t -0.2\t  0.1\t  1.1\t  0.1\n\n    then the components of svm_problem are:\n\n    l = 5\n\n    y -> 1 2 1 2 3\n\n    x -> [ ] -> (2,0.1) (3,0.2) (-1,?)\n\t [ ] -> (2,0.1) (3,0.3) (4,-1.2) (-1,?)\n\t [ ] -> (1,0.4) (-1,?)\n\t [ ] -> (2,0.1) (4,1.4) (5,0.5) (-1,?)\n\t [ ] -> (1,-0.1) (2,-0.2) (3,0.1) (4,1.1) (5,0.1) (-1,?)\n\n    where (index,value) is stored in the structure `svm_node':\n\n\tstruct svm_node\n\t{\n\t\tint index;\n\t\tdouble value;\n\t};\n\n    index = -1 indicates the end of one vector. Note that indices must\n    be in ASCENDING order.\n \n    struct svm_parameter describes the parameters of an SVM model:\n\n\tstruct svm_parameter\n\t{\n\t\tint svm_type;\n\t\tint kernel_type;\n\t\tint degree;\t/* for poly */\n\t\tdouble gamma;\t/* for poly/rbf/sigmoid */\n\t\tdouble coef0;\t/* for poly/sigmoid */\n\n\t\t/* these are for training only */\n\t\tdouble cache_size; /* in MB */\n\t\tdouble eps;\t/* stopping criteria */\n\t\tdouble C;\t/* for C_SVC, EPSILON_SVR, and NU_SVR */\n\t\tint nr_weight;\t\t/* for C_SVC */\n\t\tint *weight_label;\t/* for C_SVC */\n\t\tdouble* weight;\t\t/* for C_SVC */\n\t\tdouble nu;\t/* for NU_SVC, ONE_CLASS, and NU_SVR */\n\t\tdouble p;\t/* for EPSILON_SVR */\n\t\tint shrinking;\t/* use the shrinking heuristics */\n\t\tint probability; /* do probability estimates */\n\t};\n\n    svm_type can be one of C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR.\n\n    C_SVC:\t\tC-SVM classification\n    NU_SVC:\t\tnu-SVM classification\n    ONE_CLASS:\t\tone-class-SVM\n    EPSILON_SVR:\tepsilon-SVM regression\n    NU_SVR:\t\tnu-SVM regression\n\n    kernel_type can be one of LINEAR, POLY, RBF, SIGMOID.\n\n    LINEAR:\tu'*v\n    POLY:\t(gamma*u'*v + coef0)^degree\n    RBF:\texp(-gamma*|u-v|^2)\n    SIGMOID:\ttanh(gamma*u'*v + coef0)\n    PRECOMPUTED: kernel values in training_set_file\n\n    cache_size is the size of the kernel cache, specified in megabytes.\n    C is the cost of constraints violation. \n    eps is the stopping criterion. (we usually use 0.00001 in nu-SVC,\n    0.001 in others). nu is the parameter in nu-SVM, nu-SVR, and\n    one-class-SVM. p is the epsilon in epsilon-insensitive loss function\n    of epsilon-SVM regression. shrinking = 1 means shrinking is conducted;\n    = 0 otherwise. probability = 1 means model with probability\n    information is obtained; = 0 otherwise.\n\n    nr_weight, weight_label, and weight are used to change the penalty\n    for some classes (If the weight for a class is not changed, it is\n    set to 1). This is useful for training classifier using unbalanced\n    input data or with asymmetric misclassification cost.\n\n    nr_weight is the number of elements in the array weight_label and\n    weight. Each weight[i] corresponds to weight_label[i], meaning that\n    the penalty of class weight_label[i] is scaled by a factor of weight[i].\n    \n    If you do not want to change penalty for any of the classes,\n    just set nr_weight to 0.\n\n    *NOTE* Because svm_model contains pointers to svm_problem, you can\n    not free the memory used by svm_problem if you are still using the\n    svm_model produced by svm_train(). \n\n    *NOTE* To avoid wrong parameters, svm_check_parameter() should be\n    called before svm_train().\n\n    struct svm_model stores the model obtained from the training procedure.\n    It is not recommended to directly access entries in this structure.\n    Programmers should use the interface functions to get the values.\n\n\tstruct svm_model\n\t{\n\t\tstruct svm_parameter param;\t/* parameter */\n\t\tint nr_class;\t\t/* number of classes, = 2 in regression/one class svm */\n\t\tint l;\t\t\t/* total #SV */\n\t\tstruct svm_node **SV;\t\t/* SVs (SV[l]) */\n\t\tdouble **sv_coef;\t/* coefficients for SVs in decision functions (sv_coef[k-1][l]) */\n\t\tdouble *rho;\t\t/* constants in decision functions (rho[k*(k-1)/2]) */\n\t\tdouble *probA;\t\t/* pairwise probability information */\n\t\tdouble *probB;\n\t\tint *sv_indices;        /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */\n\n\t\t/* for classification only */\n\n\t\tint *label;\t\t/* label of each class (label[k]) */\n\t\tint *nSV;\t\t/* number of SVs for each class (nSV[k]) */\n\t\t\t\t\t/* nSV[0] + nSV[1] + ... + nSV[k-1] = l */\n\t\t/* XXX */\n\t\tint free_sv;\t\t/* 1 if svm_model is created by svm_load_model*/\n\t\t\t\t\t/* 0 if svm_model is created by svm_train */\n\t};\n\n    param describes the parameters used to obtain the model.\n\n    nr_class is the number of classes. It is 2 for regression and one-class SVM.\n\n    l is the number of support vectors. SV and sv_coef are support\n    vectors and the corresponding coefficients, respectively. Assume there are\n    k classes. For data in class j, the corresponding sv_coef includes (k-1) y*alpha vectors,\n    where alpha's are solutions of the following two class problems:\n    1 vs j, 2 vs j, ..., j-1 vs j, j vs j+1, j vs j+2, ..., j vs k\n    and y=1 for the first j-1 vectors, while y=-1 for the remaining k-j \n    vectors. For example, if there are 4 classes, sv_coef and SV are like:\n\n        +-+-+-+--------------------+\n        |1|1|1|                    |\n        |v|v|v|  SVs from class 1  |\n        |2|3|4|                    |\n        +-+-+-+--------------------+\n        |1|2|2|                    |\n        |v|v|v|  SVs from class 2  |\n        |2|3|4|                    |\n        +-+-+-+--------------------+\n        |1|2|3|                    |\n        |v|v|v|  SVs from class 3  |\n        |3|3|4|                    |\n        +-+-+-+--------------------+\n        |1|2|3|                    |\n        |v|v|v|  SVs from class 4  |\n        |4|4|4|                    |\n        +-+-+-+--------------------+\n\n    See svm_train() for an example of assigning values to sv_coef.\n\n    rho is the bias term (-b). probA and probB are parameters used in\n    probability outputs. If there are k classes, there are k*(k-1)/2\n    binary problems as well as rho, probA, and probB values. They are\n    aligned in the order of binary problems:\n    1 vs 2, 1 vs 3, ..., 1 vs k, 2 vs 3, ..., 2 vs k, ..., k-1 vs k.\n\n    sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to\n    indicate support vectors in the training set.\n\n    label contains labels in the training data.\n\n    nSV is the number of support vectors in each class.\n\n    free_sv is a flag used to determine whether the space of SV should \n    be released in free_model_content(struct svm_model*) and \n    free_and_destroy_model(struct svm_model**). If the model is\n    generated by svm_train(), then SV points to data in svm_problem\n    and should not be removed. For example, free_sv is 0 if svm_model\n    is created by svm_train, but is 1 if created by svm_load_model.\n\n- Function: double svm_predict(const struct svm_model *model,\n                               const struct svm_node *x);\n\n    This function does classification or regression on a test vector x\n    given a model.\n\n    For a classification model, the predicted class for x is returned.\n    For a regression model, the function value of x calculated using\n    the model is returned. For an one-class model, +1 or -1 is\n    returned.\n\n- Function: void svm_cross_validation(const struct svm_problem *prob,\n\tconst struct svm_parameter *param, int nr_fold, double *target);\n\n    This function conducts cross validation. Data are separated to\n    nr_fold folds. Under given parameters, sequentially each fold is\n    validated using the model from training the remaining. Predicted\n    labels (of all prob's instances) in the validation process are\n    stored in the array called target.\n\n    The format of svm_prob is same as that for svm_train(). \n\n- Function: int svm_get_svm_type(const struct svm_model *model);\n\n    This function gives svm_type of the model. Possible values of\n    svm_type are defined in svm.h.\n\n- Function: int svm_get_nr_class(const svm_model *model);\n\n    For a classification model, this function gives the number of\n    classes. For a regression or an one-class model, 2 is returned.\n\n- Function: void svm_get_labels(const svm_model *model, int* label)\n    \n    For a classification model, this function outputs the name of\n    labels into an array called label. For regression and one-class\n    models, label is unchanged.\n\n- Function: void svm_get_sv_indices(const struct svm_model *model, int *sv_indices)\n\n    This function outputs indices of support vectors into an array called sv_indices. \n    The size of sv_indices is the number of support vectors and can be obtained by calling svm_get_nr_sv. \n    Each sv_indices[i] is in the range of [1, ..., num_traning_data].\n\n- Function: int svm_get_nr_sv(const struct svm_model *model) \n\n    This function gives the number of total support vector.\n\n- Function: double svm_get_svr_probability(const struct svm_model *model);\n\n    For a regression model with probability information, this function\n    outputs a value sigma > 0. For test data, we consider the\n    probability model: target value = predicted value + z, z: Laplace\n    distribution e^(-|z|/sigma)/(2sigma)\n\n    If the model is not for svr or does not contain required\n    information, 0 is returned.\n\n- Function: double svm_predict_values(const svm_model *model, \n\t\t\t\t    const svm_node *x, double* dec_values)\n\n    This function gives decision values on a test vector x given a\n    model, and return the predicted label (classification) or\n    the function value (regression).\n\n    For a classification model with nr_class classes, this function\n    gives nr_class*(nr_class-1)/2 decision values in the array\n    dec_values, where nr_class can be obtained from the function\n    svm_get_nr_class. The order is label[0] vs. label[1], ...,\n    label[0] vs. label[nr_class-1], label[1] vs. label[2], ...,\n    label[nr_class-2] vs. label[nr_class-1], where label can be\n    obtained from the function svm_get_labels. The returned value is\n    the predicted class for x. Note that when nr_class = 1, this \n    function does not give any decision value.\n\n    For a regression model, dec_values[0] and the returned value are\n    both the function value of x calculated using the model. For a\n    one-class model, dec_values[0] is the decision value of x, while\n    the returned value is +1/-1.\n\n- Function: double svm_predict_probability(const struct svm_model *model, \n\t    const struct svm_node *x, double* prob_estimates);\n    \n    This function does classification or regression on a test vector x\n    given a model with probability information.\n\n    For a classification model with probability information, this\n    function gives nr_class probability estimates in the array\n    prob_estimates. nr_class can be obtained from the function\n    svm_get_nr_class. The class with the highest probability is\n    returned. For regression/one-class SVM, the array prob_estimates\n    is unchanged and the returned value is the same as that of\n    svm_predict.\n\n- Function: const char *svm_check_parameter(const struct svm_problem *prob,\n                                            const struct svm_parameter *param);\n\n    This function checks whether the parameters are within the feasible\n    range of the problem. This function should be called before calling\n    svm_train() and svm_cross_validation(). It returns NULL if the\n    parameters are feasible, otherwise an error message is returned.\n\n- Function: int svm_check_probability_model(const struct svm_model *model);\n\n    This function checks whether the model contains required\n    information to do probability estimates. If so, it returns\n    +1. Otherwise, 0 is returned. This function should be called\n    before calling svm_get_svr_probability and\n    svm_predict_probability.\n\n- Function: int svm_save_model(const char *model_file_name,\n\t\t\t       const struct svm_model *model);\n\n    This function saves a model to a file; returns 0 on success, or -1\n    if an error occurs.\n\n- Function: struct svm_model *svm_load_model(const char *model_file_name);\n\n    This function returns a pointer to the model read from the file,\n    or a null pointer if the model could not be loaded.\n\n- Function: void svm_free_model_content(struct svm_model *model_ptr);\n\n    This function frees the memory used by the entries in a model structure.\n\n- Function: void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr);\n\n    This function frees the memory used by a model and destroys the model\n    structure. It is equivalent to svm_destroy_model, which\n    is deprecated after version 3.0.\n\n- Function: void svm_destroy_param(struct svm_parameter *param);\n\n    This function frees the memory used by a parameter set.\n\n- Function: void svm_set_print_string_function(void (*print_func)(const char *));\n\n    Users can specify their output format by a function. Use\n        svm_set_print_string_function(NULL); \n    for default printing to stdout.\n\nJava Version\n============\n\nThe pre-compiled java class archive `libsvm.jar' and its source files are\nin the java directory. To run the programs, use\n\njava -classpath libsvm.jar svm_train <arguments>\njava -classpath libsvm.jar svm_predict <arguments>\njava -classpath libsvm.jar svm_toy\njava -classpath libsvm.jar svm_scale <arguments>\n\nNote that you need Java 1.5 (5.0) or above to run it.\n\nYou may need to add Java runtime library (like classes.zip) to the classpath.\nYou may need to increase maximum Java heap size.\n\nLibrary usages are similar to the C version. These functions are available:\n\npublic class svm {\n\tpublic static final int LIBSVM_VERSION=319; \n\tpublic static svm_model svm_train(svm_problem prob, svm_parameter param);\n\tpublic static void svm_cross_validation(svm_problem prob, svm_parameter param, int nr_fold, double[] target);\n\tpublic static int svm_get_svm_type(svm_model model);\n\tpublic static int svm_get_nr_class(svm_model model);\n\tpublic static void svm_get_labels(svm_model model, int[] label);\n\tpublic static void svm_get_sv_indices(svm_model model, int[] indices);\n\tpublic static int svm_get_nr_sv(svm_model model);\n\tpublic static double svm_get_svr_probability(svm_model model);\n\tpublic static double svm_predict_values(svm_model model, svm_node[] x, double[] dec_values);\n\tpublic static double svm_predict(svm_model model, svm_node[] x);\n\tpublic static double svm_predict_probability(svm_model model, svm_node[] x, double[] prob_estimates);\n\tpublic static void svm_save_model(String model_file_name, svm_model model) throws IOException\n\tpublic static svm_model svm_load_model(String model_file_name) throws IOException\n\tpublic static String svm_check_parameter(svm_problem prob, svm_parameter param);\n\tpublic static int svm_check_probability_model(svm_model model);\n\tpublic static void svm_set_print_string_function(svm_print_interface print_func);\n}\n\nThe library is in the \"libsvm\" package.\nNote that in Java version, svm_node[] is not ended with a node whose index = -1.\n\nUsers can specify their output format by\n\n\tyour_print_func = new svm_print_interface()\n\t{ \n\t\tpublic void print(String s)\n\t\t{\n\t\t\t// your own format\n\t\t}\n\t};\n\tsvm.svm_set_print_string_function(your_print_func);\n\nBuilding Windows Binaries\n=========================\n\nWindows binaries are in the directory `windows'. To build them via\nVisual C++, use the following steps:\n\n1. Open a DOS command box (or Visual Studio Command Prompt) and change\nto libsvm directory. If environment variables of VC++ have not been\nset, type\n\n\"C:\\Program Files\\Microsoft Visual Studio 10.0\\VC\\bin\\vcvars32.bat\"\n\nYou may have to modify the above command according which version of\nVC++ or where it is installed.\n\n2. Type\n\nnmake -f Makefile.win clean all\n\n3. (optional) To build shared library libsvm.dll, type\n\nnmake -f Makefile.win lib\n\n4. (optional) To build 64-bit windows binaries, you must\n\t(1) Run vcvars64.bat instead of vcvars32.bat. Note that \n\tvcvars64.bat is located at \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\bin\\amd64\\\"\n\t(2) Change CFLAGS in Makefile.win: /D _WIN32 to /D _WIN64\t\n\t\nAnother way is to build them from Visual C++ environment. See details\nin libsvm FAQ.\n\n- Additional Tools: Sub-sampling, Parameter Selection, Format checking, etc.\n============================================================================\n\nSee the README file in the tools directory.\n\nMATLAB/OCTAVE Interface\n=======================\n\nPlease check the file README in the directory `matlab'.\n\nPython Interface\n================\n\nSee the README file in python directory.\n\nAdditional Information\n======================\n\nIf you find LIBSVM helpful, please cite it as\n\nChih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support\nvector machines. ACM Transactions on Intelligent Systems and\nTechnology, 2:27:1--27:27, 2011. Software available at\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm\n\nLIBSVM implementation document is available at\nhttp://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf\n\nFor any questions and comments, please email cjlin@csie.ntu.edu.tw\n\nAcknowledgments:\nThis work was supported in part by the National Science \nCouncil of Taiwan via the grant NSC 89-2213-E-002-013.\nThe authors thank their group members and users\nfor many helpful discussions and comments. They are listed in\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm/acknowledgements\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/heart_scale",
    "content": "+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1 \n-1 1:0.583333 2:-1 3:0.333333 4:-0.603774 5:1 6:-1 7:1 8:0.358779 9:-1 10:-0.483871 12:-1 13:1 \n+1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1 \n-1 1:0.458333 2:1 3:1 4:-0.358491 5:-0.374429 6:-1 7:-1 8:-0.480916 9:1 10:-0.935484 12:-0.333333 13:1 \n-1 1:0.875 2:-1 3:-0.333333 4:-0.509434 5:-0.347032 6:-1 7:1 8:-0.236641 9:1 10:-0.935484 11:-1 12:-0.333333 13:-1 \n-1 1:0.5 2:1 3:1 4:-0.509434 5:-0.767123 6:-1 7:-1 8:0.0534351 9:-1 10:-0.870968 11:-1 12:-1 13:1 \n+1 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5 \n+1 1:0.25 2:1 3:1 4:-0.698113 5:-0.484018 6:-1 7:1 8:0.0839695 9:1 10:-0.612903 12:-0.333333 13:1 \n+1 1:0.291667 2:1 3:1 4:-0.132075 5:-0.237443 6:-1 7:1 8:0.51145 9:-1 10:-0.612903 12:0.333333 13:1 \n+1 1:0.416667 2:-1 3:1 4:0.0566038 5:0.283105 6:-1 7:1 8:0.267176 9:-1 10:0.290323 12:1 13:1 \n-1 1:0.25 2:1 3:1 4:-0.226415 5:-0.506849 6:-1 7:-1 8:0.374046 9:-1 10:-0.83871 12:-1 13:1 \n-1 2:1 3:1 4:-0.0943396 5:-0.543379 6:-1 7:1 8:-0.389313 9:1 10:-1 11:-1 12:-1 13:1 \n-1 1:-0.375 2:1 3:0.333333 4:-0.132075 5:-0.502283 6:-1 7:1 8:0.664122 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1 \n-1 1:0.166667 2:-1 3:1 4:-0.358491 5:-0.191781 6:-1 7:1 8:0.343511 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:0.75 2:-1 3:1 4:-0.660377 5:-0.894977 6:-1 7:-1 8:-0.175573 9:-1 10:-0.483871 12:-1 13:-1 \n+1 1:-0.291667 2:1 3:1 4:-0.132075 5:-0.155251 6:-1 7:-1 8:-0.251908 9:1 10:-0.419355 12:0.333333 13:1 \n+1 2:1 3:1 4:-0.132075 5:-0.648402 6:1 7:1 8:0.282443 9:1 11:1 12:-1 13:1 \n-1 1:0.458333 2:1 3:-1 4:-0.698113 5:-0.611872 6:-1 7:1 8:0.114504 9:1 10:-0.419355 12:-1 13:-1 \n-1 1:-0.541667 2:1 3:-1 4:-0.132075 5:-0.666667 6:-1 7:-1 8:0.633588 9:1 10:-0.548387 11:-1 12:-1 13:1 \n+1 1:0.583333 2:1 3:1 4:-0.509434 5:-0.52968 6:-1 7:1 8:-0.114504 9:1 10:-0.16129 12:0.333333 13:1 \n-1 1:-0.208333 2:1 3:-0.333333 4:-0.320755 5:-0.456621 6:-1 7:1 8:0.664122 9:-1 10:-0.935484 12:-1 13:-1 \n-1 1:-0.416667 2:1 3:1 4:-0.603774 5:-0.191781 6:-1 7:-1 8:0.679389 9:-1 10:-0.612903 12:-1 13:-1 \n-1 1:-0.25 2:1 3:1 4:-0.660377 5:-0.643836 6:-1 7:-1 8:0.0992366 9:-1 10:-0.967742 11:-1 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:-0.333333 4:-0.283019 5:-0.260274 6:1 7:1 8:0.343511 9:1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:-0.208333 2:-1 3:0.333333 4:-0.320755 5:-0.319635 6:-1 7:-1 8:0.0381679 9:-1 10:-0.935484 11:-1 12:-1 13:-1 \n-1 1:-0.291667 2:-1 3:1 4:-0.169811 5:-0.465753 6:-1 7:1 8:0.236641 9:1 10:-1 12:-1 13:-1 \n-1 1:-0.0833333 2:-1 3:0.333333 4:-0.509434 5:-0.228311 6:-1 7:1 8:0.312977 9:-1 10:-0.806452 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1 \n-1 1:0.75 2:-1 3:0.333333 4:-0.698113 5:-0.365297 6:1 7:1 8:-0.0992366 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.166667 2:1 3:0.333333 4:-0.358491 5:-0.52968 6:-1 7:1 8:0.206107 9:-1 10:-0.870968 12:-0.333333 13:1 \n-1 1:0.541667 2:1 3:1 4:0.245283 5:-0.534247 6:-1 7:1 8:0.0229008 9:-1 10:-0.258065 11:-1 12:-1 13:0.5 \n-1 1:-0.666667 2:-1 3:0.333333 4:-0.509434 5:-0.593607 6:-1 7:-1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.25 2:1 3:1 4:0.433962 5:-0.086758 6:-1 7:1 8:0.0534351 9:1 10:0.0967742 11:1 12:-1 13:1 \n+1 1:-0.125 2:1 3:1 4:-0.0566038 5:-0.6621 6:-1 7:1 8:-0.160305 9:1 10:-0.709677 12:-1 13:1 \n+1 1:-0.208333 2:1 3:1 4:-0.320755 5:-0.406393 6:1 7:1 8:0.206107 9:1 10:-1 11:-1 12:0.333333 13:1 \n+1 1:0.333333 2:1 3:1 4:-0.132075 5:-0.630137 6:-1 7:1 8:0.0229008 9:1 10:-0.387097 11:-1 12:-0.333333 13:1 \n+1 1:0.25 2:1 3:-1 4:0.245283 5:-0.328767 6:-1 7:1 8:-0.175573 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:1 3:0.333333 4:-0.320755 5:-0.753425 6:-1 7:-1 8:0.206107 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.208333 2:1 3:1 4:-0.471698 5:-0.561644 6:-1 7:1 8:0.755725 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.541667 2:1 3:1 4:0.0943396 5:-0.557078 6:-1 7:-1 8:0.679389 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:0.375 2:-1 3:1 4:-0.433962 5:-0.621005 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.375 2:1 3:0.333333 4:-0.320755 5:-0.511416 6:-1 7:-1 8:0.648855 9:1 10:-0.870968 11:-1 12:-1 13:-1 \n-1 1:-0.291667 2:1 3:-0.333333 4:-0.867925 5:-0.675799 6:1 7:-1 8:0.29771 9:-1 10:-1 11:-1 12:-1 13:1 \n+1 1:0.25 2:1 3:0.333333 4:-0.396226 5:-0.579909 6:1 7:-1 8:-0.0381679 9:-1 10:-0.290323 12:-0.333333 13:0.5 \n-1 1:0.208333 2:1 3:0.333333 4:-0.132075 5:-0.611872 6:1 7:1 8:0.435115 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.166667 2:1 3:0.333333 4:-0.54717 5:-0.894977 6:-1 7:1 8:-0.160305 9:-1 10:-0.741935 11:-1 12:1 13:-1 \n+1 1:-0.375 2:1 3:1 4:-0.698113 5:-0.675799 6:-1 7:1 8:0.618321 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.541667 2:1 3:-0.333333 4:0.245283 5:-0.452055 6:-1 7:-1 8:-0.251908 9:1 10:-1 12:1 13:0.5 \n+1 1:0.5 2:-1 3:1 4:0.0566038 5:-0.547945 6:-1 7:1 8:-0.343511 9:-1 10:-0.677419 12:1 13:1 \n+1 1:-0.458333 2:1 3:1 4:-0.207547 5:-0.136986 6:-1 7:-1 8:-0.175573 9:1 10:-0.419355 12:-1 13:0.5 \n-1 1:-0.0416667 2:1 3:-0.333333 4:-0.358491 5:-0.639269 6:1 7:-1 8:0.725191 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.5 2:-1 3:0.333333 4:-0.132075 5:0.328767 6:1 7:1 8:0.312977 9:-1 10:-0.741935 11:-1 12:-0.333333 13:-1 \n-1 1:0.416667 2:-1 3:-0.333333 4:-0.132075 5:-0.684932 6:-1 7:-1 8:0.648855 9:-1 10:-1 11:-1 12:0.333333 13:-1 \n-1 1:-0.333333 2:-1 3:-0.333333 4:-0.320755 5:-0.506849 6:-1 7:1 8:0.587786 9:-1 10:-0.806452 12:-1 13:-1 \n-1 1:-0.5 2:-1 3:-0.333333 4:-0.792453 5:-0.671233 6:-1 7:-1 8:0.480916 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.333333 2:1 3:1 4:-0.169811 5:-0.817352 6:-1 7:1 8:-0.175573 9:1 10:0.16129 12:-0.333333 13:-1 \n-1 1:0.291667 2:-1 3:0.333333 4:-0.509434 5:-0.762557 6:1 7:-1 8:-0.618321 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.25 2:-1 3:1 4:0.509434 5:-0.438356 6:-1 7:-1 8:0.0992366 9:1 10:-1 12:-1 13:-1 \n+1 1:0.375 2:1 3:-0.333333 4:-0.509434 5:-0.292237 6:-1 7:1 8:-0.51145 9:-1 10:-0.548387 12:-0.333333 13:1 \n-1 1:0.166667 2:1 3:0.333333 4:0.0566038 5:-1 6:1 7:-1 8:0.557252 9:-1 10:-0.935484 11:-1 12:-0.333333 13:1 \n+1 1:-0.0833333 2:-1 3:1 4:-0.320755 5:-0.182648 6:-1 7:-1 8:0.0839695 9:1 10:-0.612903 12:-1 13:1 \n-1 1:-0.375 2:1 3:0.333333 4:-0.509434 5:-0.543379 6:-1 7:-1 8:0.496183 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.291667 2:-1 3:-1 4:0.0566038 5:-0.479452 6:-1 7:-1 8:0.526718 9:-1 10:-0.709677 11:-1 12:-1 13:-1 \n-1 1:0.416667 2:1 3:-1 4:-0.0377358 5:-0.511416 6:1 7:1 8:0.206107 9:-1 10:-0.258065 11:1 12:-1 13:0.5 \n+1 1:0.166667 2:1 3:1 4:0.0566038 5:-0.315068 6:-1 7:1 8:-0.374046 9:1 10:-0.806452 12:-0.333333 13:0.5 \n-1 1:-0.0833333 2:1 3:1 4:-0.132075 5:-0.383562 6:-1 7:1 8:0.755725 9:1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:-1 3:-0.333333 4:-0.207547 5:-0.118721 6:1 7:1 8:0.236641 9:-1 10:-1 11:-1 12:0.333333 13:-1 \n-1 1:-0.375 2:-1 3:0.333333 4:-0.54717 5:-0.47032 6:-1 7:-1 8:0.19084 9:-1 10:-0.903226 12:-0.333333 13:-1 \n+1 1:-0.25 2:1 3:0.333333 4:-0.735849 5:-0.465753 6:-1 7:-1 8:0.236641 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.333333 2:1 3:1 4:-0.509434 5:-0.388128 6:-1 7:-1 8:0.0534351 9:1 10:0.16129 12:-0.333333 13:1 \n-1 1:0.166667 2:-1 3:1 4:-0.509434 5:0.0410959 6:-1 7:-1 8:0.40458 9:1 10:-0.806452 11:-1 12:-1 13:-1 \n-1 1:0.708333 2:1 3:-0.333333 4:0.169811 5:-0.456621 6:-1 7:1 8:0.0992366 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.958333 2:-1 3:0.333333 4:-0.132075 5:-0.675799 6:-1 8:-0.312977 9:-1 10:-0.645161 12:-1 13:-1 \n-1 1:0.583333 2:-1 3:1 4:-0.773585 5:-0.557078 6:-1 7:-1 8:0.0839695 9:-1 10:-0.903226 11:-1 12:0.333333 13:-1 \n+1 1:-0.333333 2:1 3:1 4:-0.0943396 5:-0.164384 6:-1 7:1 8:0.160305 9:1 10:-1 12:1 13:1 \n-1 1:-0.333333 2:1 3:1 4:-0.811321 5:-0.625571 6:-1 7:1 8:0.175573 9:1 10:-0.0322581 12:-1 13:-1 \n-1 1:-0.583333 2:-1 3:0.333333 4:-1 5:-0.666667 6:-1 7:-1 8:0.648855 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:-1 3:0.333333 4:-0.509434 5:-0.621005 6:-1 7:-1 8:0.557252 9:-1 10:-1 12:-1 13:-1 \n-1 1:0.125 2:1 3:-0.333333 4:-0.509434 5:-0.497717 6:-1 7:-1 8:0.633588 9:-1 10:-0.741935 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.0188679 5:-0.579909 6:-1 7:-1 8:-0.480916 9:-1 10:-0.354839 12:-0.333333 13:1 \n+1 1:-0.75 2:1 3:1 4:-0.509434 5:-0.671233 6:-1 7:-1 8:-0.0992366 9:1 10:-0.483871 12:-1 13:1 \n+1 1:0.208333 2:1 3:1 4:0.0566038 5:-0.342466 6:-1 7:1 8:-0.389313 9:1 10:-0.741935 11:-1 12:-1 13:1 \n-1 1:-0.5 2:1 3:0.333333 4:-0.320755 5:-0.598174 6:-1 7:1 8:0.480916 9:-1 10:-0.354839 12:-1 13:-1 \n-1 1:0.166667 2:1 3:1 4:-0.698113 5:-0.657534 6:-1 7:-1 8:-0.160305 9:1 10:-0.516129 12:-1 13:0.5 \n-1 1:-0.458333 2:1 3:-1 4:0.0188679 5:-0.461187 6:-1 7:1 8:0.633588 9:-1 10:-0.741935 11:-1 12:0.333333 13:-1 \n-1 1:0.375 2:1 3:-0.333333 4:-0.358491 5:-0.625571 6:1 7:1 8:0.0534351 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.25 2:1 3:-1 4:0.584906 5:-0.342466 6:-1 7:1 8:0.129771 9:-1 10:0.354839 11:1 12:-1 13:1 \n-1 1:-0.5 2:-1 3:-0.333333 4:-0.396226 5:-0.178082 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.125 2:1 3:1 4:0.0566038 5:-0.465753 6:-1 7:1 8:-0.129771 9:-1 10:-0.16129 12:-1 13:1 \n-1 1:0.25 2:1 3:-0.333333 4:-0.132075 5:-0.56621 6:-1 7:-1 8:0.419847 9:1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.333333 2:-1 3:1 4:-0.320755 5:-0.0684932 6:-1 7:1 8:0.496183 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.0416667 2:1 3:1 4:-0.433962 5:-0.360731 6:-1 7:1 8:-0.419847 9:1 10:-0.290323 12:-0.333333 13:1 \n+1 1:0.0416667 2:1 3:1 4:-0.698113 5:-0.634703 6:-1 7:1 8:-0.435115 9:1 10:-1 12:-0.333333 13:-1 \n+1 1:-0.0416667 2:1 3:1 4:-0.415094 5:-0.607306 6:-1 7:-1 8:0.480916 9:-1 10:-0.677419 11:-1 12:0.333333 13:1 \n+1 1:-0.25 2:1 3:1 4:-0.698113 5:-0.319635 6:-1 7:1 8:-0.282443 9:1 10:-0.677419 12:-0.333333 13:-1 \n-1 1:0.541667 2:1 3:1 4:-0.509434 5:-0.196347 6:-1 7:1 8:0.221374 9:-1 10:-0.870968 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.886792 5:-0.506849 6:-1 7:-1 8:0.29771 9:-1 10:-0.967742 11:-1 12:-0.333333 13:1 \n-1 1:0.458333 2:-1 3:0.333333 4:-0.132075 5:-0.146119 6:-1 7:-1 8:-0.0534351 9:-1 10:-0.935484 11:-1 12:-1 13:1 \n-1 1:-0.125 2:-1 3:-0.333333 4:-0.509434 5:-0.461187 6:-1 7:-1 8:0.389313 9:-1 10:-0.645161 11:-1 12:-1 13:-1 \n-1 1:-0.375 2:-1 3:0.333333 4:-0.735849 5:-0.931507 6:-1 7:-1 8:0.587786 9:-1 10:-0.806452 12:-1 13:-1 \n+1 1:0.583333 2:1 3:1 4:-0.509434 5:-0.493151 6:-1 7:-1 8:-1 9:-1 10:-0.677419 12:-1 13:-1 \n-1 1:-0.166667 2:-1 3:1 4:-0.320755 5:-0.347032 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.166667 2:1 3:1 4:0.339623 5:-0.255708 6:1 7:1 8:-0.19084 9:-1 10:-0.677419 12:1 13:1 \n+1 1:0.416667 2:1 3:1 4:-0.320755 5:-0.415525 6:-1 7:1 8:0.160305 9:-1 10:-0.548387 12:-0.333333 13:1 \n+1 1:-0.208333 2:1 3:1 4:-0.433962 5:-0.324201 6:-1 7:1 8:0.450382 9:-1 10:-0.83871 12:-1 13:1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-0.886792 5:-0.561644 6:-1 7:-1 8:0.0992366 9:1 10:-0.612903 12:-1 13:-1 \n+1 1:0.291667 2:-1 3:1 4:0.0566038 5:-0.39726 6:-1 7:1 8:0.312977 9:-1 10:-0.16129 12:0.333333 13:1 \n+1 1:0.25 2:1 3:1 4:-0.132075 5:-0.767123 6:-1 7:-1 8:0.389313 9:1 10:-1 11:-1 12:-0.333333 13:1 \n-1 1:-0.333333 2:-1 3:-0.333333 4:-0.660377 5:-0.844749 6:-1 7:-1 8:0.0229008 9:-1 10:-1 12:-1 13:-1 \n+1 1:0.0833333 2:-1 3:1 4:0.622642 5:-0.0821918 6:-1 8:-0.29771 9:1 10:0.0967742 12:-1 13:-1 \n-1 1:-0.5 2:1 3:-0.333333 4:-0.698113 5:-0.502283 6:-1 7:-1 8:0.251908 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.291667 2:-1 3:1 4:0.207547 5:-0.182648 6:-1 7:1 8:0.374046 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:-0.226415 5:-0.187215 6:1 7:-1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:1 3:-0.333333 4:-0.509434 5:-0.228311 6:-1 7:-1 8:0.389313 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.166667 2:-1 3:-0.333333 4:-0.245283 5:-0.3379 6:-1 7:-1 8:0.389313 9:-1 10:-1 12:-1 13:-1 \n+1 1:-0.291667 2:1 3:1 4:-0.509434 5:-0.438356 6:-1 7:1 8:0.114504 9:-1 10:-0.741935 11:-1 12:-1 13:1 \n+1 1:0.125 2:-1 3:1 4:1 5:-0.260274 6:1 7:1 8:-0.0534351 9:1 10:0.290323 11:1 12:0.333333 13:1 \n-1 1:0.541667 2:-1 3:-1 4:0.0566038 5:-0.543379 6:-1 7:-1 8:-0.343511 9:-1 10:-0.16129 11:1 12:-1 13:-1 \n+1 1:0.125 2:1 3:1 4:-0.320755 5:-0.283105 6:1 7:1 8:-0.51145 9:1 10:-0.483871 11:1 12:-1 13:1 \n+1 1:-0.166667 2:1 3:0.333333 4:-0.509434 5:-0.716895 6:-1 7:-1 8:0.0381679 9:-1 10:-0.354839 12:1 13:1 \n+1 1:0.0416667 2:1 3:1 4:-0.471698 5:-0.269406 6:-1 7:1 8:-0.312977 9:1 10:0.0322581 12:0.333333 13:-1 \n+1 1:0.166667 2:1 3:1 4:0.0943396 5:-0.324201 6:-1 7:-1 8:-0.740458 9:1 10:-0.612903 12:-0.333333 13:1 \n-1 1:0.5 2:-1 3:0.333333 4:0.245283 5:0.0684932 6:-1 7:1 8:0.221374 9:-1 10:-0.741935 11:-1 12:-1 13:-1 \n-1 1:0.0416667 2:1 3:0.333333 4:-0.415094 5:-0.328767 6:-1 7:1 8:0.236641 9:-1 10:-0.83871 11:1 12:-0.333333 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:0.245283 5:-0.657534 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.375 2:1 3:1 4:-0.509434 5:-0.356164 6:-1 7:-1 8:-0.572519 9:1 10:-0.419355 12:0.333333 13:1 \n-1 1:-0.0416667 2:-1 3:0.333333 4:-0.207547 5:-0.680365 6:-1 7:1 8:0.496183 9:-1 10:-0.967742 12:-1 13:-1 \n-1 1:-0.0416667 2:1 3:-0.333333 4:-0.245283 5:-0.657534 6:-1 7:-1 8:0.328244 9:-1 10:-0.741935 11:-1 12:-0.333333 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.566038 5:-0.525114 6:1 7:-1 8:0.358779 9:1 10:-0.548387 11:-1 12:0.333333 13:1 \n+1 1:0.416667 2:-1 3:1 4:-0.735849 5:-0.347032 6:-1 7:-1 8:0.496183 9:1 10:-0.419355 12:0.333333 13:-1 \n+1 1:0.541667 2:1 3:1 4:-0.660377 5:-0.607306 6:-1 7:1 8:-0.0687023 9:1 10:-0.967742 11:-1 12:-0.333333 13:-1 \n-1 1:-0.458333 2:1 3:1 4:-0.132075 5:-0.543379 6:-1 7:-1 8:0.633588 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.458333 2:1 3:1 4:-0.509434 5:-0.452055 6:-1 7:1 8:-0.618321 9:1 10:-0.290323 11:1 12:-0.333333 13:-1 \n-1 1:0.0416667 2:1 3:0.333333 4:0.0566038 5:-0.515982 6:-1 7:1 8:0.435115 9:-1 10:-0.483871 11:-1 12:-1 13:1 \n-1 1:-0.291667 2:-1 3:0.333333 4:-0.0943396 5:-0.767123 6:-1 7:1 8:0.358779 9:1 10:-0.548387 11:1 12:-1 13:-1 \n-1 1:0.583333 2:-1 3:0.333333 4:0.0943396 5:-0.310502 6:-1 7:-1 8:0.541985 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:0.125 2:1 3:1 4:-0.415094 5:-0.438356 6:1 7:1 8:0.114504 9:1 10:-0.612903 12:-0.333333 13:-1 \n-1 1:-0.791667 2:-1 3:-0.333333 4:-0.54717 5:-0.616438 6:-1 7:-1 8:0.847328 9:-1 10:-0.774194 11:-1 12:-1 13:-1 \n-1 1:0.166667 2:1 3:1 4:-0.283019 5:-0.630137 6:-1 7:-1 8:0.480916 9:1 10:-1 11:-1 12:-1 13:1 \n+1 1:0.458333 2:1 3:1 4:-0.0377358 5:-0.607306 6:-1 7:1 8:-0.0687023 9:-1 10:-0.354839 12:0.333333 13:0.5 \n-1 1:0.25 2:1 3:1 4:-0.169811 5:-0.3379 6:-1 7:1 8:0.694656 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.125 2:1 3:0.333333 4:-0.132075 5:-0.511416 6:-1 7:-1 8:0.40458 9:-1 10:-0.806452 12:-0.333333 13:1 \n-1 1:-0.0833333 2:1 3:-1 4:-0.415094 5:-0.60274 6:-1 7:1 8:-0.175573 9:1 10:-0.548387 11:-1 12:-0.333333 13:-1 \n+1 1:0.0416667 2:1 3:-0.333333 4:0.849057 5:-0.283105 6:-1 7:1 8:0.89313 9:-1 10:-1 11:-1 12:-0.333333 13:1 \n+1 2:1 3:1 4:-0.45283 5:-0.287671 6:-1 7:-1 8:-0.633588 9:1 10:-0.354839 12:0.333333 13:1 \n+1 1:-0.0416667 2:1 3:1 4:-0.660377 5:-0.525114 6:-1 7:-1 8:0.358779 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n+1 1:-0.541667 2:1 3:1 4:-0.698113 5:-0.812785 6:-1 7:1 8:-0.343511 9:1 10:-0.354839 12:-1 13:1 \n+1 1:0.208333 2:1 3:0.333333 4:-0.283019 5:-0.552511 6:-1 7:1 8:0.557252 9:-1 10:0.0322581 11:-1 12:0.333333 13:1 \n-1 1:-0.5 2:-1 3:0.333333 4:-0.660377 5:-0.351598 6:-1 7:1 8:0.541985 9:1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.5 2:1 3:0.333333 4:-0.660377 5:-0.43379 6:-1 7:-1 8:0.648855 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.125 2:-1 3:0.333333 4:-0.509434 5:-0.575342 6:-1 7:-1 8:0.328244 9:-1 10:-0.483871 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:-0.735849 5:-0.356164 6:-1 7:1 8:0.465649 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.458333 2:-1 3:1 4:-0.320755 5:-0.191781 6:-1 7:-1 8:-0.221374 9:-1 10:-0.354839 12:0.333333 13:-1 \n-1 1:-0.0833333 2:-1 3:0.333333 4:-0.320755 5:-0.406393 6:-1 7:1 8:0.19084 9:-1 10:-0.83871 11:-1 12:-1 13:-1 \n-1 1:-0.291667 2:-1 3:-0.333333 4:-0.792453 5:-0.643836 6:-1 7:-1 8:0.541985 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.0833333 2:1 3:1 4:-0.132075 5:-0.584475 6:-1 7:-1 8:-0.389313 9:1 10:0.806452 11:1 12:-1 13:1 \n-1 1:-0.333333 2:1 3:-0.333333 4:-0.358491 5:-0.16895 6:-1 7:1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:0.125 2:1 3:-1 4:-0.509434 5:-0.694064 6:-1 7:1 8:0.389313 9:-1 10:-0.387097 12:-1 13:1 \n+1 1:0.541667 2:-1 3:1 4:0.584906 5:-0.534247 6:1 7:-1 8:0.435115 9:1 10:-0.677419 12:0.333333 13:1 \n+1 1:-0.625 2:1 3:-1 4:-0.509434 5:-0.520548 6:-1 7:-1 8:0.694656 9:1 10:0.225806 12:-1 13:1 \n+1 1:0.375 2:-1 3:1 4:0.0566038 5:-0.461187 6:-1 7:-1 8:0.267176 9:1 10:-0.548387 12:-1 13:-1 \n-1 1:0.0833333 2:1 3:-0.333333 4:-0.320755 5:-0.378995 6:-1 7:-1 8:0.282443 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.358491 5:-0.392694 6:-1 7:1 8:-0.0992366 9:1 10:-0.0322581 12:0.333333 13:1 \n-1 1:-0.416667 2:1 3:1 4:-0.698113 5:-0.611872 6:-1 7:-1 8:0.374046 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:0.458333 2:-1 3:1 4:0.622642 5:-0.0913242 6:-1 7:-1 8:0.267176 9:1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.125 2:-1 3:1 4:-0.698113 5:-0.415525 6:-1 7:1 8:0.343511 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 2:1 3:0.333333 4:-0.320755 5:-0.675799 6:1 7:1 8:0.236641 9:-1 10:-0.612903 11:1 12:-1 13:-1 \n-1 1:-0.333333 2:-1 3:1 4:-0.169811 5:-0.497717 6:-1 7:1 8:0.236641 9:1 10:-0.935484 12:-1 13:-1 \n+1 1:0.5 2:1 3:-1 4:-0.169811 5:-0.287671 6:1 7:1 8:0.572519 9:-1 10:-0.548387 12:-0.333333 13:-1 \n-1 1:0.666667 2:1 3:-1 4:0.245283 5:-0.506849 6:1 7:1 8:-0.0839695 9:-1 10:-0.967742 12:-0.333333 13:-1 \n+1 1:0.666667 2:1 3:0.333333 4:-0.132075 5:-0.415525 6:-1 7:1 8:0.145038 9:-1 10:-0.354839 12:1 13:1 \n+1 1:0.583333 2:1 3:1 4:-0.886792 5:-0.210046 6:-1 7:1 8:-0.175573 9:1 10:-0.709677 12:0.333333 13:-1 \n-1 1:0.625 2:-1 3:0.333333 4:-0.509434 5:-0.611872 6:-1 7:1 8:-0.328244 9:-1 10:-0.516129 12:-1 13:-1 \n-1 1:-0.791667 2:1 3:-1 4:-0.54717 5:-0.744292 6:-1 7:1 8:0.572519 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.375 2:-1 3:1 4:-0.169811 5:-0.232877 6:1 7:-1 8:-0.465649 9:-1 10:-0.387097 12:1 13:-1 \n+1 1:-0.0833333 2:1 3:1 4:-0.132075 5:-0.214612 6:-1 7:-1 8:-0.221374 9:1 10:0.354839 12:1 13:1 \n+1 1:-0.291667 2:1 3:0.333333 4:0.0566038 5:-0.520548 6:-1 7:-1 8:0.160305 9:-1 10:0.16129 12:-1 13:-1 \n+1 1:0.583333 2:1 3:1 4:-0.415094 5:-0.415525 6:1 7:-1 8:0.40458 9:-1 10:-0.935484 12:0.333333 13:1 \n-1 1:-0.125 2:1 3:0.333333 4:-0.339623 5:-0.680365 6:-1 7:-1 8:0.40458 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.458333 2:1 3:0.333333 4:-0.509434 5:-0.479452 6:1 7:-1 8:0.877863 9:-1 10:-0.741935 11:1 12:-1 13:1 \n+1 1:0.125 2:-1 3:1 4:-0.245283 5:0.292237 6:-1 7:1 8:0.206107 9:1 10:-0.387097 12:0.333333 13:1 \n+1 1:-0.5 2:1 3:1 4:-0.698113 5:-0.789954 6:-1 7:1 8:0.328244 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:-0.458333 2:-1 3:1 4:-0.849057 5:-0.365297 6:-1 7:1 8:-0.221374 9:-1 10:-0.806452 12:-1 13:-1 \n-1 2:1 3:0.333333 4:-0.320755 5:-0.452055 6:1 7:1 8:0.557252 9:-1 10:-1 11:-1 12:1 13:-1 \n-1 1:-0.416667 2:1 3:0.333333 4:-0.320755 5:-0.136986 6:-1 7:-1 8:0.389313 9:-1 10:-0.387097 11:-1 12:-0.333333 13:-1 \n+1 1:0.125 2:1 3:1 4:-0.283019 5:-0.73516 6:-1 7:1 8:-0.480916 9:1 10:-0.322581 12:-0.333333 13:0.5 \n-1 1:-0.0416667 2:1 3:1 4:-0.735849 5:-0.511416 6:1 7:-1 8:0.160305 9:-1 10:-0.967742 11:-1 12:1 13:1 \n-1 1:0.375 2:-1 3:1 4:-0.132075 5:0.223744 6:-1 7:1 8:0.312977 9:-1 10:-0.612903 12:-1 13:-1 \n+1 1:0.708333 2:1 3:0.333333 4:0.245283 5:-0.347032 6:-1 7:-1 8:-0.374046 9:1 10:-0.0645161 12:-0.333333 13:1 \n-1 1:0.0416667 2:1 3:1 4:-0.132075 5:-0.484018 6:-1 7:-1 8:0.358779 9:-1 10:-0.612903 11:-1 12:-1 13:-1 \n+1 1:0.708333 2:1 3:1 4:-0.0377358 5:-0.780822 6:-1 7:-1 8:-0.175573 9:1 10:-0.16129 11:1 12:-1 13:1 \n-1 1:0.0416667 2:1 3:-0.333333 4:-0.735849 5:-0.164384 6:-1 7:-1 8:0.29771 9:-1 10:-1 11:-1 12:-1 13:1 \n+1 1:-0.75 2:1 3:1 4:-0.396226 5:-0.287671 6:-1 7:1 8:0.29771 9:1 10:-1 11:-1 12:-1 13:1 \n-1 1:-0.208333 2:1 3:0.333333 4:-0.433962 5:-0.410959 6:1 7:-1 8:0.587786 9:-1 10:-1 11:-1 12:0.333333 13:-1 \n-1 1:0.0833333 2:-1 3:-0.333333 4:-0.226415 5:-0.43379 6:-1 7:1 8:0.374046 9:-1 10:-0.548387 12:-1 13:-1 \n-1 1:0.208333 2:-1 3:1 4:-0.886792 5:-0.442922 6:-1 7:1 8:-0.221374 9:-1 10:-0.677419 12:-1 13:-1 \n-1 1:0.0416667 2:-1 3:0.333333 4:-0.698113 5:-0.598174 6:-1 7:-1 8:0.328244 9:-1 10:-0.483871 12:-1 13:-1 \n-1 1:0.666667 2:-1 3:-1 4:-0.132075 5:-0.484018 6:-1 7:-1 8:0.221374 9:-1 10:-0.419355 11:-1 12:0.333333 13:-1 \n+1 1:1 2:1 3:1 4:-0.415094 5:-0.187215 6:-1 7:1 8:0.389313 9:1 10:-1 11:-1 12:1 13:-1 \n-1 1:0.625 2:1 3:0.333333 4:-0.54717 5:-0.310502 6:-1 7:-1 8:0.221374 9:-1 10:-0.677419 11:-1 12:-0.333333 13:1 \n+1 1:0.208333 2:1 3:1 4:-0.415094 5:-0.205479 6:-1 7:1 8:0.526718 9:-1 10:-1 11:-1 12:0.333333 13:1 \n+1 1:0.291667 2:1 3:1 4:-0.415094 5:-0.39726 6:-1 7:1 8:0.0687023 9:1 10:-0.0967742 12:-0.333333 13:1 \n+1 1:-0.0833333 2:1 3:1 4:-0.132075 5:-0.210046 6:-1 7:-1 8:0.557252 9:1 10:-0.483871 11:-1 12:-1 13:1 \n+1 1:0.0833333 2:1 3:1 4:0.245283 5:-0.255708 6:-1 7:1 8:0.129771 9:1 10:-0.741935 12:-0.333333 13:1 \n-1 1:-0.0416667 2:1 3:-1 4:0.0943396 5:-0.214612 6:1 7:-1 8:0.633588 9:-1 10:-0.612903 12:-1 13:1 \n-1 1:0.291667 2:-1 3:0.333333 4:-0.849057 5:-0.123288 6:-1 7:-1 8:0.358779 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:0.208333 2:1 3:0.333333 4:-0.792453 5:-0.479452 6:-1 7:1 8:0.267176 9:1 10:-0.806452 12:-1 13:1 \n+1 1:0.458333 2:1 3:0.333333 4:-0.415094 5:-0.164384 6:-1 7:-1 8:-0.0839695 9:1 10:-0.419355 12:-1 13:1 \n-1 1:-0.666667 2:1 3:0.333333 4:-0.320755 5:-0.43379 6:-1 7:-1 8:0.770992 9:-1 10:0.129032 11:1 12:-1 13:-1 \n+1 1:0.25 2:1 3:-1 4:0.433962 5:-0.260274 6:-1 7:1 8:0.343511 9:-1 10:-0.935484 12:-1 13:1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-0.415094 5:-0.456621 6:1 7:1 8:0.450382 9:-1 10:-0.225806 12:-1 13:-1 \n-1 1:-0.416667 2:-1 3:0.333333 4:-0.471698 5:-0.60274 6:-1 7:-1 8:0.435115 9:-1 10:-0.935484 12:-1 13:-1 \n+1 1:0.208333 2:1 3:1 4:-0.358491 5:-0.589041 6:-1 7:1 8:-0.0839695 9:1 10:-0.290323 12:1 13:1 \n-1 1:-1 2:1 3:-0.333333 4:-0.320755 5:-0.643836 6:-1 7:1 8:1 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.5 2:-1 3:-0.333333 4:-0.320755 5:-0.643836 6:-1 7:1 8:0.541985 9:-1 10:-0.548387 11:-1 12:-1 13:-1 \n-1 1:0.416667 2:-1 3:0.333333 4:-0.226415 5:-0.424658 6:-1 7:1 8:0.541985 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-1 5:-0.538813 6:-1 7:-1 8:0.267176 9:1 10:-1 11:-1 12:-0.333333 13:1 \n-1 1:0.0416667 2:1 3:0.333333 4:-0.509434 5:-0.39726 6:-1 7:1 8:0.160305 9:-1 10:-0.870968 12:-1 13:1 \n-1 1:-0.375 2:1 3:-0.333333 4:-0.509434 5:-0.570776 6:-1 7:-1 8:0.51145 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.0416667 2:1 3:1 4:-0.698113 5:-0.484018 6:-1 7:-1 8:-0.160305 9:1 10:-0.0967742 12:-0.333333 13:1 \n+1 1:0.5 2:1 3:1 4:-0.226415 5:-0.415525 6:-1 7:1 8:-0.145038 9:-1 10:-0.0967742 12:-0.333333 13:1 \n-1 1:0.166667 2:1 3:0.333333 4:0.0566038 5:-0.808219 6:-1 7:-1 8:0.572519 9:-1 10:-0.483871 11:-1 12:-1 13:-1 \n+1 1:0.416667 2:1 3:1 4:-0.320755 5:-0.0684932 6:1 7:1 8:-0.0687023 9:1 10:-0.419355 11:-1 12:1 13:1 \n-1 1:-0.75 2:-1 3:1 4:-0.169811 5:-0.739726 6:-1 7:-1 8:0.694656 9:-1 10:-0.548387 11:-1 12:-1 13:-1 \n-1 1:-0.5 2:1 3:-0.333333 4:-0.226415 5:-0.648402 6:-1 7:-1 8:-0.0687023 9:-1 10:-1 12:-1 13:0.5 \n+1 1:0.375 2:-1 3:0.333333 4:-0.320755 5:-0.374429 6:-1 7:-1 8:-0.603053 9:-1 10:-0.612903 12:-0.333333 13:1 \n+1 1:-0.416667 2:-1 3:1 4:-0.283019 5:-0.0182648 6:1 7:1 8:-0.00763359 9:1 10:-0.0322581 12:-1 13:1 \n-1 1:0.208333 2:-1 3:-1 4:0.0566038 5:-0.283105 6:1 7:1 8:0.389313 9:-1 10:-0.677419 11:-1 12:-1 13:-1 \n-1 1:-0.0416667 2:1 3:-1 4:-0.54717 5:-0.726027 6:-1 7:1 8:0.816794 9:-1 10:-1 12:-1 13:0.5 \n+1 1:0.333333 2:-1 3:1 4:-0.0377358 5:-0.173516 6:-1 7:1 8:0.145038 9:1 10:-0.677419 12:-1 13:1 \n+1 1:-0.583333 2:1 3:1 4:-0.54717 5:-0.575342 6:-1 7:-1 8:0.0534351 9:-1 10:-0.612903 12:-1 13:1 \n-1 1:-0.333333 2:1 3:1 4:-0.603774 5:-0.388128 6:-1 7:1 8:0.740458 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.0416667 2:1 3:1 4:-0.358491 5:-0.410959 6:-1 7:-1 8:0.374046 9:1 10:-1 11:-1 12:-0.333333 13:1 \n-1 1:0.375 2:1 3:0.333333 4:-0.320755 5:-0.520548 6:-1 7:-1 8:0.145038 9:-1 10:-0.419355 12:1 13:1 \n+1 1:0.375 2:-1 3:1 4:0.245283 5:-0.826484 6:-1 7:1 8:0.129771 9:-1 10:1 11:1 12:1 13:1 \n-1 2:-1 3:1 4:-0.169811 5:-0.506849 6:-1 7:1 8:0.358779 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.416667 2:1 3:1 4:-0.509434 5:-0.767123 6:-1 7:1 8:-0.251908 9:1 10:-0.193548 12:-1 13:1 \n-1 1:-0.25 2:1 3:0.333333 4:-0.169811 5:-0.401826 6:-1 7:1 8:0.29771 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.0416667 2:1 3:-0.333333 4:-0.509434 5:-0.0913242 6:-1 7:-1 8:0.541985 9:-1 10:-0.935484 11:-1 12:-1 13:-1 \n+1 1:0.625 2:1 3:0.333333 4:0.622642 5:-0.324201 6:1 7:1 8:0.206107 9:1 10:-0.483871 12:-1 13:1 \n-1 1:-0.583333 2:1 3:0.333333 4:-0.132075 5:-0.109589 6:-1 7:1 8:0.694656 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 2:-1 3:1 4:-0.320755 5:-0.369863 6:-1 7:1 8:0.0992366 9:-1 10:-0.870968 12:-1 13:-1 \n+1 1:0.375 2:-1 3:1 4:-0.132075 5:-0.351598 6:-1 7:1 8:0.358779 9:-1 10:0.16129 11:1 12:0.333333 13:-1 \n-1 1:-0.0833333 2:-1 3:0.333333 4:-0.132075 5:-0.16895 6:-1 7:1 8:0.0839695 9:-1 10:-0.516129 11:-1 12:-0.333333 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.320755 5:-0.420091 6:-1 7:-1 8:0.114504 9:1 10:-0.548387 11:-1 12:-0.333333 13:1 \n+1 1:0.5 2:1 3:1 4:-0.698113 5:-0.442922 6:-1 7:1 8:0.328244 9:-1 10:-0.806452 11:-1 12:0.333333 13:0.5 \n-1 1:0.5 2:-1 3:0.333333 4:0.150943 5:-0.347032 6:-1 7:-1 8:0.175573 9:-1 10:-0.741935 11:-1 12:-1 13:-1 \n+1 1:0.291667 2:1 3:0.333333 4:-0.132075 5:-0.730594 6:-1 7:1 8:0.282443 9:-1 10:-0.0322581 12:-1 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.0377358 5:-0.287671 6:-1 7:1 8:0.0839695 9:1 10:-0.0967742 12:0.333333 13:1 \n+1 1:0.0416667 2:1 3:1 4:-0.509434 5:-0.716895 6:-1 7:-1 8:-0.358779 9:-1 10:-0.548387 12:-0.333333 13:1 \n-1 1:-0.375 2:1 3:-0.333333 4:-0.320755 5:-0.575342 6:-1 7:1 8:0.78626 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:-0.375 2:1 3:1 4:-0.660377 5:-0.251142 6:-1 7:1 8:0.251908 9:-1 10:-1 11:-1 12:-0.333333 13:-1 \n-1 1:-0.0833333 2:1 3:0.333333 4:-0.698113 5:-0.776256 6:-1 7:-1 8:-0.206107 9:-1 10:-0.806452 11:-1 12:-1 13:-1 \n-1 1:0.25 2:1 3:0.333333 4:0.0566038 5:-0.607306 6:1 7:-1 8:0.312977 9:-1 10:-0.483871 11:-1 12:-1 13:-1 \n-1 1:0.75 2:-1 3:-0.333333 4:0.245283 5:-0.196347 6:-1 7:-1 8:0.389313 9:-1 10:-0.870968 11:-1 12:0.333333 13:-1 \n-1 1:0.333333 2:1 3:0.333333 4:0.0566038 5:-0.465753 6:1 7:-1 8:0.00763359 9:1 10:-0.677419 12:-1 13:-1 \n+1 1:0.0833333 2:1 3:1 4:-0.283019 5:0.0365297 6:-1 7:-1 8:-0.0687023 9:1 10:-0.612903 12:-0.333333 13:1 \n+1 1:0.458333 2:1 3:0.333333 4:-0.132075 5:-0.0456621 6:-1 7:-1 8:0.328244 9:-1 10:-1 11:-1 12:-1 13:-1 \n-1 1:-0.416667 2:1 3:1 4:0.0566038 5:-0.447489 6:-1 7:-1 8:0.526718 9:-1 10:-0.516129 11:-1 12:-1 13:-1 \n-1 1:0.208333 2:-1 3:0.333333 4:-0.509434 5:-0.0228311 6:-1 7:-1 8:0.541985 9:-1 10:-1 11:-1 12:-1 13:-1 \n+1 1:0.291667 2:1 3:1 4:-0.320755 5:-0.634703 6:-1 7:1 8:-0.0687023 9:1 10:-0.225806 12:0.333333 13:1 \n+1 1:0.208333 2:1 3:-0.333333 4:-0.509434 5:-0.278539 6:-1 7:1 8:0.358779 9:-1 10:-0.419355 12:-1 13:-1 \n-1 1:-0.166667 2:1 3:-0.333333 4:-0.320755 5:-0.360731 6:-1 7:-1 8:0.526718 9:-1 10:-0.806452 11:-1 12:-1 13:-1 \n+1 1:-0.208333 2:1 3:-0.333333 4:-0.698113 5:-0.52968 6:-1 7:-1 8:0.480916 9:-1 10:-0.677419 11:1 12:-1 13:1 \n-1 1:-0.0416667 2:1 3:0.333333 4:0.471698 5:-0.666667 6:1 7:-1 8:0.389313 9:-1 10:-0.83871 11:-1 12:-1 13:1 \n-1 1:-0.375 2:1 3:-0.333333 4:-0.509434 5:-0.374429 6:-1 7:-1 8:0.557252 9:-1 10:-1 11:-1 12:-1 13:1 \n-1 1:0.125 2:-1 3:-0.333333 4:-0.132075 5:-0.232877 6:-1 7:1 8:0.251908 9:-1 10:-0.580645 12:-1 13:-1 \n-1 1:0.166667 2:1 3:1 4:-0.132075 5:-0.69863 6:-1 7:-1 8:0.175573 9:-1 10:-0.870968 12:-1 13:0.5 \n+1 1:0.583333 2:1 3:1 4:0.245283 5:-0.269406 6:-1 7:1 8:-0.435115 9:1 10:-0.516129 12:1 13:-1 \n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/Makefile",
    "content": ".SUFFIXES: .class .java\nFILES = libsvm/svm.class libsvm/svm_model.class libsvm/svm_node.class \\\n\t\tlibsvm/svm_parameter.class libsvm/svm_problem.class \\\n\t\tlibsvm/svm_print_interface.class \\\n\t\tsvm_train.class svm_predict.class svm_toy.class svm_scale.class\n\n#JAVAC = jikes\nJAVAC_FLAGS = -target 1.5 -source 1.5\nJAVAC = javac\n# JAVAC_FLAGS =\n\nall: $(FILES)\n\tjar cvf libsvm.jar *.class libsvm/*.class\n\n.java.class:\n\t$(JAVAC) $(JAVAC_FLAGS) $<\n\nlibsvm/svm.java: libsvm/svm.m4\n\tm4 libsvm/svm.m4 > libsvm/svm.java\n\nclean:\n\trm -f libsvm/*.class *.class *.jar libsvm/*~ *~ libsvm/svm.java\n\ndist: clean all\n\trm *.class libsvm/*.class\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm.java",
    "content": "\n\n\n\n\npackage libsvm;\nimport java.io.*;\nimport java.util.*;\n\n//\n// Kernel Cache\n//\n// l is the number of total data items\n// size is the cache size limit in bytes\n//\nclass Cache {\n\tprivate final int l;\n\tprivate long size;\n\tprivate final class head_t\n\t{\n\t\thead_t prev, next;\t// a cicular list\n\t\tfloat[] data;\n\t\tint len;\t\t// data[0,len) is cached in this entry\n\t}\n\tprivate final head_t[] head;\n\tprivate head_t lru_head;\n\n\tCache(int l_, long size_)\n\t{\n\t\tl = l_;\n\t\tsize = size_;\n\t\thead = new head_t[l];\n\t\tfor(int i=0;i<l;i++) head[i] = new head_t();\n\t\tsize /= 4;\n\t\tsize -= l * (16/4);\t// sizeof(head_t) == 16\n\t\tsize = Math.max(size, 2* (long) l);  // cache must be large enough for two columns\n\t\tlru_head = new head_t();\n\t\tlru_head.next = lru_head.prev = lru_head;\n\t}\n\n\tprivate void lru_delete(head_t h)\n\t{\n\t\t// delete from current location\n\t\th.prev.next = h.next;\n\t\th.next.prev = h.prev;\n\t}\n\n\tprivate void lru_insert(head_t h)\n\t{\n\t\t// insert to last position\n\t\th.next = lru_head;\n\t\th.prev = lru_head.prev;\n\t\th.prev.next = h;\n\t\th.next.prev = h;\n\t}\n\n\t// request data [0,len)\n\t// return some position p where [p,len) need to be filled\n\t// (p >= len if nothing needs to be filled)\n\t// java: simulate pointer using single-element array\n\tint get_data(int index, float[][] data, int len)\n\t{\n\t\thead_t h = head[index];\n\t\tif(h.len > 0) lru_delete(h);\n\t\tint more = len - h.len;\n\n\t\tif(more > 0)\n\t\t{\n\t\t\t// free old space\n\t\t\twhile(size < more)\n\t\t\t{\n\t\t\t\thead_t old = lru_head.next;\n\t\t\t\tlru_delete(old);\n\t\t\t\tsize += old.len;\n\t\t\t\told.data = null;\n\t\t\t\told.len = 0;\n\t\t\t}\n\n\t\t\t// allocate new space\n\t\t\tfloat[] new_data = new float[len];\n\t\t\tif(h.data != null) System.arraycopy(h.data,0,new_data,0,h.len);\n\t\t\th.data = new_data;\n\t\t\tsize -= more;\n\t\t\tdo {int _=h.len; h.len=len; len=_;} while(false);\n\t\t}\n\n\t\tlru_insert(h);\n\t\tdata[0] = h.data;\n\t\treturn len;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tif(i==j) return;\n\t\t\n\t\tif(head[i].len > 0) lru_delete(head[i]);\n\t\tif(head[j].len > 0) lru_delete(head[j]);\n\t\tdo {float[] _=head[i].data; head[i].data=head[j].data; head[j].data=_;} while(false);\n\t\tdo {int _=head[i].len; head[i].len=head[j].len; head[j].len=_;} while(false);\n\t\tif(head[i].len > 0) lru_insert(head[i]);\n\t\tif(head[j].len > 0) lru_insert(head[j]);\n\n\t\tif(i>j) do {int _=i; i=j; j=_;} while(false);\n\t\tfor(head_t h = lru_head.next; h!=lru_head; h=h.next)\n\t\t{\n\t\t\tif(h.len > i)\n\t\t\t{\n\t\t\t\tif(h.len > j)\n\t\t\t\t\tdo {float _=h.data[i]; h.data[i]=h.data[j]; h.data[j]=_;} while(false);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// give up\n\t\t\t\t\tlru_delete(h);\n\t\t\t\t\tsize += h.len;\n\t\t\t\t\th.data = null;\n\t\t\t\t\th.len = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Kernel evaluation\n//\n// the static method k_function is for doing single kernel evaluation\n// the constructor of Kernel prepares to calculate the l*l kernel matrix\n// the member function get_Q is for getting one column from the Q Matrix\n//\nabstract class QMatrix {\n\tabstract float[] get_Q(int column, int len);\n\tabstract double[] get_QD();\n\tabstract void swap_index(int i, int j);\n};\n\nabstract class Kernel extends QMatrix {\n\tprivate svm_node[][] x;\n\tprivate final double[] x_square;\n\n\t// svm_parameter\n\tprivate final int kernel_type;\n\tprivate final int degree;\n\tprivate final double gamma;\n\tprivate final double coef0;\n\n\tabstract float[] get_Q(int column, int len);\n\tabstract double[] get_QD();\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tdo {svm_node[] _=x[i]; x[i]=x[j]; x[j]=_;} while(false);\n\t\tif(x_square != null) do {double _=x_square[i]; x_square[i]=x_square[j]; x_square[j]=_;} while(false);\n\t}\n\n\tprivate static double powi(double base, int times)\n\t{\n\t\tdouble tmp = base, ret = 1.0;\n\n\t\tfor(int t=times; t>0; t/=2)\n\t\t{\n\t\t\tif(t%2==1) ret*=tmp;\n\t\t\ttmp = tmp * tmp;\n\t\t}\n\t\treturn ret;\n\t}\n\n\tdouble kernel_function(int i, int j)\n\t{\n\t\tswitch(kernel_type)\n\t\t{\n\t\t\tcase svm_parameter.LINEAR:\n\t\t\t\treturn dot(x[i],x[j]);\n\t\t\tcase svm_parameter.POLY:\n\t\t\t\treturn powi(gamma*dot(x[i],x[j])+coef0,degree);\n\t\t\tcase svm_parameter.RBF:\n\t\t\t\treturn Math.exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j])));\n\t\t\tcase svm_parameter.SIGMOID:\n\t\t\t\treturn Math.tanh(gamma*dot(x[i],x[j])+coef0);\n\t\t\tcase svm_parameter.PRECOMPUTED:\n\t\t\t\treturn x[i][(int)(x[j][0].value)].value;\n\t\t\tdefault:\n\t\t\t\treturn 0;\t// java\n\t\t}\n\t}\n\n\tKernel(int l, svm_node[][] x_, svm_parameter param)\n\t{\n\t\tthis.kernel_type = param.kernel_type;\n\t\tthis.degree = param.degree;\n\t\tthis.gamma = param.gamma;\n\t\tthis.coef0 = param.coef0;\n\n\t\tx = (svm_node[][])x_.clone();\n\n\t\tif(kernel_type == svm_parameter.RBF)\n\t\t{\n\t\t\tx_square = new double[l];\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\tx_square[i] = dot(x[i],x[i]);\n\t\t}\n\t\telse x_square = null;\n\t}\n\n\tstatic double dot(svm_node[] x, svm_node[] y)\n\t{\n\t\tdouble sum = 0;\n\t\tint xlen = x.length;\n\t\tint ylen = y.length;\n\t\tint i = 0;\n\t\tint j = 0;\n\t\twhile(i < xlen && j < ylen)\n\t\t{\n\t\t\tif(x[i].index == y[j].index)\n\t\t\t\tsum += x[i++].value * y[j++].value;\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(x[i].index > y[j].index)\n\t\t\t\t\t++j;\n\t\t\t\telse\n\t\t\t\t\t++i;\n\t\t\t}\n\t\t}\n\t\treturn sum;\n\t}\n\n\tstatic double k_function(svm_node[] x, svm_node[] y,\n\t\t\t\t\tsvm_parameter param)\n\t{\n\t\tswitch(param.kernel_type)\n\t\t{\n\t\t\tcase svm_parameter.LINEAR:\n\t\t\t\treturn dot(x,y);\n\t\t\tcase svm_parameter.POLY:\n\t\t\t\treturn powi(param.gamma*dot(x,y)+param.coef0,param.degree);\n\t\t\tcase svm_parameter.RBF:\n\t\t\t{\n\t\t\t\tdouble sum = 0;\n\t\t\t\tint xlen = x.length;\n\t\t\t\tint ylen = y.length;\n\t\t\t\tint i = 0;\n\t\t\t\tint j = 0;\n\t\t\t\twhile(i < xlen && j < ylen)\n\t\t\t\t{\n\t\t\t\t\tif(x[i].index == y[j].index)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble d = x[i++].value - y[j++].value;\n\t\t\t\t\t\tsum += d*d;\n\t\t\t\t\t}\n\t\t\t\t\telse if(x[i].index > y[j].index)\n\t\t\t\t\t{\n\t\t\t\t\t\tsum += y[j].value * y[j].value;\n\t\t\t\t\t\t++j;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tsum += x[i].value * x[i].value;\n\t\t\t\t\t\t++i;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile(i < xlen)\n\t\t\t\t{\n\t\t\t\t\tsum += x[i].value * x[i].value;\n\t\t\t\t\t++i;\n\t\t\t\t}\n\n\t\t\t\twhile(j < ylen)\n\t\t\t\t{\n\t\t\t\t\tsum += y[j].value * y[j].value;\n\t\t\t\t\t++j;\n\t\t\t\t}\n\n\t\t\t\treturn Math.exp(-param.gamma*sum);\n\t\t\t}\n\t\t\tcase svm_parameter.SIGMOID:\n\t\t\t\treturn Math.tanh(param.gamma*dot(x,y)+param.coef0);\n\t\t\tcase svm_parameter.PRECOMPUTED:\n\t\t\t\treturn\tx[(int)(y[0].value)].value;\n\t\t\tdefault:\n\t\t\t\treturn 0;\t// java\n\t\t}\n\t}\n}\n\n// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918\n// Solves:\n//\n//\tmin 0.5(\\alpha^T Q \\alpha) + p^T \\alpha\n//\n//\t\ty^T \\alpha = \\delta\n//\t\ty_i = +1 or -1\n//\t\t0 <= alpha_i <= Cp for y_i = 1\n//\t\t0 <= alpha_i <= Cn for y_i = -1\n//\n// Given:\n//\n//\tQ, p, y, Cp, Cn, and an initial feasible point \\alpha\n//\tl is the size of vectors and matrices\n//\teps is the stopping tolerance\n//\n// solution will be put in \\alpha, objective value will be put in obj\n//\nclass Solver {\n\tint active_size;\n\tbyte[] y;\n\tdouble[] G;\t\t// gradient of objective function\n\tstatic final byte LOWER_BOUND = 0;\n\tstatic final byte UPPER_BOUND = 1;\n\tstatic final byte FREE = 2;\n\tbyte[] alpha_status;\t// LOWER_BOUND, UPPER_BOUND, FREE\n\tdouble[] alpha;\n\tQMatrix Q;\n\tdouble[] QD;\n\tdouble eps;\n\tdouble Cp,Cn;\n\tdouble[] p;\n\tint[] active_set;\n\tdouble[] G_bar;\t\t// gradient, if we treat free variables as 0\n\tint l;\n\tboolean unshrink;\t// XXX\n\t\n\tstatic final double INF = java.lang.Double.POSITIVE_INFINITY;\n\n\tdouble get_C(int i)\n\t{\n\t\treturn (y[i] > 0)? Cp : Cn;\n\t}\n\tvoid update_alpha_status(int i)\n\t{\n\t\tif(alpha[i] >= get_C(i))\n\t\t\talpha_status[i] = UPPER_BOUND;\n\t\telse if(alpha[i] <= 0)\n\t\t\talpha_status[i] = LOWER_BOUND;\n\t\telse alpha_status[i] = FREE;\n\t}\n\tboolean is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }\n\tboolean is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }\n\tboolean is_free(int i) {  return alpha_status[i] == FREE; }\n\n\t// java: information about solution except alpha,\n\t// because we cannot return multiple values otherwise...\n\tstatic class SolutionInfo {\n\t\tdouble obj;\n\t\tdouble rho;\n\t\tdouble upper_bound_p;\n\t\tdouble upper_bound_n;\n\t\tdouble r;\t// for Solver_NU\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tQ.swap_index(i,j);\n\t\tdo {byte _=y[i]; y[i]=y[j]; y[j]=_;} while(false);\n\t\tdo {double _=G[i]; G[i]=G[j]; G[j]=_;} while(false);\n\t\tdo {byte _=alpha_status[i]; alpha_status[i]=alpha_status[j]; alpha_status[j]=_;} while(false);\n\t\tdo {double _=alpha[i]; alpha[i]=alpha[j]; alpha[j]=_;} while(false);\n\t\tdo {double _=p[i]; p[i]=p[j]; p[j]=_;} while(false);\n\t\tdo {int _=active_set[i]; active_set[i]=active_set[j]; active_set[j]=_;} while(false);\n\t\tdo {double _=G_bar[i]; G_bar[i]=G_bar[j]; G_bar[j]=_;} while(false);\n\t}\n\n\tvoid reconstruct_gradient()\n\t{\n\t\t// reconstruct inactive elements of G from G_bar and free variables\n\n\t\tif(active_size == l) return;\n\n\t\tint i,j;\n\t\tint nr_free = 0;\n\n\t\tfor(j=active_size;j<l;j++)\n\t\t\tG[j] = G_bar[j] + p[j];\n\n\t\tfor(j=0;j<active_size;j++)\n\t\t\tif(is_free(j))\n\t\t\t\tnr_free++;\n\n\t\tif(2*nr_free < active_size)\n\t\t\tsvm.info(\"\\nWARNING: using -h 0 may be faster\\n\");\n\n\t\tif (nr_free*l > 2*active_size*(l-active_size))\n\t\t{\n\t\t\tfor(i=active_size;i<l;i++)\n\t\t\t{\n\t\t\t\tfloat[] Q_i = Q.get_Q(i,active_size);\n\t\t\t\tfor(j=0;j<active_size;j++)\n\t\t\t\t\tif(is_free(j))\n\t\t\t\t\t\tG[i] += alpha[j] * Q_i[j];\n\t\t\t}\t\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor(i=0;i<active_size;i++)\n\t\t\t\tif(is_free(i))\n\t\t\t\t{\n\t\t\t\t\tfloat[] Q_i = Q.get_Q(i,l);\n\t\t\t\t\tdouble alpha_i = alpha[i];\n\t\t\t\t\tfor(j=active_size;j<l;j++)\n\t\t\t\t\t\tG[j] += alpha_i * Q_i[j];\n\t\t\t\t}\n\t\t}\n\t}\n\n\tvoid Solve(int l, QMatrix Q, double[] p_, byte[] y_,\n\t\t   double[] alpha_, double Cp, double Cn, double eps, SolutionInfo si, int shrinking)\n\t{\n\t\tthis.l = l;\n\t\tthis.Q = Q;\n\t\tQD = Q.get_QD();\n\t\tp = (double[])p_.clone();\n\t\ty = (byte[])y_.clone();\n\t\talpha = (double[])alpha_.clone();\n\t\tthis.Cp = Cp;\n\t\tthis.Cn = Cn;\n\t\tthis.eps = eps;\n\t\tthis.unshrink = false;\n\n\t\t// initialize alpha_status\n\t\t{\n\t\t\talpha_status = new byte[l];\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\tupdate_alpha_status(i);\n\t\t}\n\n\t\t// initialize active set (for shrinking)\n\t\t{\n\t\t\tactive_set = new int[l];\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\tactive_set[i] = i;\n\t\t\tactive_size = l;\n\t\t}\n\n\t\t// initialize gradient\n\t\t{\n\t\t\tG = new double[l];\n\t\t\tG_bar = new double[l];\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tG[i] = p[i];\n\t\t\t\tG_bar[i] = 0;\n\t\t\t}\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tif(!is_lower_bound(i))\n\t\t\t\t{\n\t\t\t\t\tfloat[] Q_i = Q.get_Q(i,l);\n\t\t\t\t\tdouble alpha_i = alpha[i];\n\t\t\t\t\tint j;\n\t\t\t\t\tfor(j=0;j<l;j++)\n\t\t\t\t\t\tG[j] += alpha_i*Q_i[j];\n\t\t\t\t\tif(is_upper_bound(i))\n\t\t\t\t\t\tfor(j=0;j<l;j++)\n\t\t\t\t\t\t\tG_bar[j] += get_C(i) * Q_i[j];\n\t\t\t\t}\n\t\t}\n\n\t\t// optimization step\n\n\t\tint iter = 0;\n\t\tint max_iter = Math.max(10000000, l>Integer.MAX_VALUE/100 ? Integer.MAX_VALUE : 100*l);\n\t\tint counter = Math.min(l,1000)+1;\n\t\tint[] working_set = new int[2];\n\n\t\twhile(iter < max_iter)\n\t\t{\n\t\t\t// show progress and do shrinking\n\n\t\t\tif(--counter == 0)\n\t\t\t{\n\t\t\t\tcounter = Math.min(l,1000);\n\t\t\t\tif(shrinking!=0) do_shrinking();\n\t\t\t\tsvm.info(\".\");\n\t\t\t}\n\n\t\t\tif(select_working_set(working_set)!=0)\n\t\t\t{\n\t\t\t\t// reconstruct the whole gradient\n\t\t\t\treconstruct_gradient();\n\t\t\t\t// reset active set size and check\n\t\t\t\tactive_size = l;\n\t\t\t\tsvm.info(\"*\");\n\t\t\t\tif(select_working_set(working_set)!=0)\n\t\t\t\t\tbreak;\n\t\t\t\telse\n\t\t\t\t\tcounter = 1;\t// do shrinking next iteration\n\t\t\t}\n\t\t\t\n\t\t\tint i = working_set[0];\n\t\t\tint j = working_set[1];\n\n\t\t\t++iter;\n\n\t\t\t// update alpha[i] and alpha[j], handle bounds carefully\n\n\t\t\tfloat[] Q_i = Q.get_Q(i,active_size);\n\t\t\tfloat[] Q_j = Q.get_Q(j,active_size);\n\n\t\t\tdouble C_i = get_C(i);\n\t\t\tdouble C_j = get_C(j);\n\n\t\t\tdouble old_alpha_i = alpha[i];\n\t\t\tdouble old_alpha_j = alpha[j];\n\n\t\t\tif(y[i]!=y[j])\n\t\t\t{\n\t\t\t\tdouble quad_coef = QD[i]+QD[j]+2*Q_i[j];\n\t\t\t\tif (quad_coef <= 0)\n\t\t\t\t\tquad_coef = 1e-12;\n\t\t\t\tdouble delta = (-G[i]-G[j])/quad_coef;\n\t\t\t\tdouble diff = alpha[i] - alpha[j];\n\t\t\t\talpha[i] += delta;\n\t\t\t\talpha[j] += delta;\n\t\t\t\n\t\t\t\tif(diff > 0)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = 0;\n\t\t\t\t\t\talpha[i] = diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = 0;\n\t\t\t\t\t\talpha[j] = -diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(diff > C_i - C_j)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] > C_i)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = C_i;\n\t\t\t\t\t\talpha[j] = C_i - diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] > C_j)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = C_j;\n\t\t\t\t\t\talpha[i] = C_j + diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble quad_coef = QD[i]+QD[j]-2*Q_i[j];\n\t\t\t\tif (quad_coef <= 0)\n\t\t\t\t\tquad_coef = 1e-12;\n\t\t\t\tdouble delta = (G[i]-G[j])/quad_coef;\n\t\t\t\tdouble sum = alpha[i] + alpha[j];\n\t\t\t\talpha[i] -= delta;\n\t\t\t\talpha[j] += delta;\n\n\t\t\t\tif(sum > C_i)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] > C_i)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = C_i;\n\t\t\t\t\t\talpha[j] = sum - C_i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = 0;\n\t\t\t\t\t\talpha[i] = sum;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(sum > C_j)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] > C_j)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = C_j;\n\t\t\t\t\t\talpha[i] = sum - C_j;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = 0;\n\t\t\t\t\t\talpha[j] = sum;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// update G\n\n\t\t\tdouble delta_alpha_i = alpha[i] - old_alpha_i;\n\t\t\tdouble delta_alpha_j = alpha[j] - old_alpha_j;\n\n\t\t\tfor(int k=0;k<active_size;k++)\n\t\t\t{\n\t\t\t\tG[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;\n\t\t\t}\n\n\t\t\t// update alpha_status and G_bar\n\n\t\t\t{\n\t\t\t\tboolean ui = is_upper_bound(i);\n\t\t\t\tboolean uj = is_upper_bound(j);\n\t\t\t\tupdate_alpha_status(i);\n\t\t\t\tupdate_alpha_status(j);\n\t\t\t\tint k;\n\t\t\t\tif(ui != is_upper_bound(i))\n\t\t\t\t{\n\t\t\t\t\tQ_i = Q.get_Q(i,l);\n\t\t\t\t\tif(ui)\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] -= C_i * Q_i[k];\n\t\t\t\t\telse\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] += C_i * Q_i[k];\n\t\t\t\t}\n\n\t\t\t\tif(uj != is_upper_bound(j))\n\t\t\t\t{\n\t\t\t\t\tQ_j = Q.get_Q(j,l);\n\t\t\t\t\tif(uj)\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] -= C_j * Q_j[k];\n\t\t\t\t\telse\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] += C_j * Q_j[k];\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tif(iter >= max_iter)\n\t\t{\n\t\t\tif(active_size < l)\n\t\t\t{\n\t\t\t\t// reconstruct the whole gradient to calculate objective value\n\t\t\t\treconstruct_gradient();\n\t\t\t\tactive_size = l;\n\t\t\t\tsvm.info(\"*\");\n\t\t\t}\n\t\t\tSystem.err.print(\"\\nWARNING: reaching max number of iterations\\n\");\n\t\t}\n\n\t\t// calculate rho\n\n\t\tsi.rho = calculate_rho();\n\n\t\t// calculate objective value\n\t\t{\n\t\t\tdouble v = 0;\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tv += alpha[i] * (G[i] + p[i]);\n\n\t\t\tsi.obj = v/2;\n\t\t}\n\n\t\t// put back the solution\n\t\t{\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\talpha_[active_set[i]] = alpha[i];\n\t\t}\n\n\t\tsi.upper_bound_p = Cp;\n\t\tsi.upper_bound_n = Cn;\n\n\t\tsvm.info(\"\\noptimization finished, #iter = \"+iter+\"\\n\");\n\t}\n\n\t// return 1 if already optimal, return 0 otherwise\n\tint select_working_set(int[] working_set)\n\t{\n\t\t// return i,j such that\n\t\t// i: maximizes -y_i * grad(f)_i, i in I_up(\\alpha)\n\t\t// j: mimimizes the decrease of obj value\n\t\t//    (if quadratic coefficeint <= 0, replace it with tau)\n\t\t//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\\alpha)\n\t\t\n\t\tdouble Gmax = -INF;\n\t\tdouble Gmax2 = -INF;\n\t\tint Gmax_idx = -1;\n\t\tint Gmin_idx = -1;\n\t\tdouble obj_diff_min = INF;\n\t\n\t\tfor(int t=0;t<active_size;t++)\n\t\t\tif(y[t]==+1)\t\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(t))\n\t\t\t\t\tif(-G[t] >= Gmax)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmax = -G[t];\n\t\t\t\t\t\tGmax_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(!is_lower_bound(t))\n\t\t\t\t\tif(G[t] >= Gmax)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmax = G[t];\n\t\t\t\t\t\tGmax_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\n\t\tint i = Gmax_idx;\n\t\tfloat[] Q_i = null;\n\t\tif(i != -1) // null Q_i not accessed: Gmax=-INF if i=-1\n\t\t\tQ_i = Q.get_Q(i,active_size);\n\t\n\t\tfor(int j=0;j<active_size;j++)\n\t\t{\n\t\t\tif(y[j]==+1)\n\t\t\t{\n\t\t\t\tif (!is_lower_bound(j))\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff=Gmax+G[j];\n\t\t\t\t\tif (G[j] >= Gmax2)\n\t\t\t\t\t\tGmax2 = G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/1e-12;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!is_upper_bound(j))\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff= Gmax-G[j];\n\t\t\t\t\tif (-G[j] >= Gmax2)\n\t\t\t\t\t\tGmax2 = -G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/1e-12;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(Gmax+Gmax2 < eps)\n\t\t\treturn 1;\n\n\t\tworking_set[0] = Gmax_idx;\n\t\tworking_set[1] = Gmin_idx;\n\t\treturn 0;\n\t}\n\n\tprivate boolean be_shrunk(int i, double Gmax1, double Gmax2)\n\t{\t\n\t\tif(is_upper_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(-G[i] > Gmax1);\n\t\t\telse\n\t\t\t\treturn(-G[i] > Gmax2);\n\t\t}\n\t\telse if(is_lower_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(G[i] > Gmax2);\n\t\t\telse\t\n\t\t\t\treturn(G[i] > Gmax1);\n\t\t}\n\t\telse\n\t\t\treturn(false);\n\t}\n\n\tvoid do_shrinking()\n\t{\n\t\tint i;\n\t\tdouble Gmax1 = -INF;\t\t// max { -y_i * grad(f)_i | i in I_up(\\alpha) }\n\t\tdouble Gmax2 = -INF;\t\t// max { y_i * grad(f)_i | i in I_low(\\alpha) }\n\n\t\t// find maximal violating pair first\n\t\tfor(i=0;i<active_size;i++)\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(i))\t\n\t\t\t\t{\n\t\t\t\t\tif(-G[i] >= Gmax1)\n\t\t\t\t\t\tGmax1 = -G[i];\n\t\t\t\t}\n\t\t\t\tif(!is_lower_bound(i))\n\t\t\t\t{\n\t\t\t\t\tif(G[i] >= Gmax2)\n\t\t\t\t\t\tGmax2 = G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\t\t\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(i))\t\n\t\t\t\t{\n\t\t\t\t\tif(-G[i] >= Gmax2)\n\t\t\t\t\t\tGmax2 = -G[i];\n\t\t\t\t}\n\t\t\t\tif(!is_lower_bound(i))\t\n\t\t\t\t{\n\t\t\t\t\tif(G[i] >= Gmax1)\n\t\t\t\t\t\tGmax1 = G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(unshrink == false && Gmax1 + Gmax2 <= eps*10) \n\t\t{\n\t\t\tunshrink = true;\n\t\t\treconstruct_gradient();\n\t\t\tactive_size = l;\n\t\t}\n\n\t\tfor(i=0;i<active_size;i++)\n\t\t\tif (be_shrunk(i, Gmax1, Gmax2))\n\t\t\t{\n\t\t\t\tactive_size--;\n\t\t\t\twhile (active_size > i)\n\t\t\t\t{\n\t\t\t\t\tif (!be_shrunk(active_size, Gmax1, Gmax2))\n\t\t\t\t\t{\n\t\t\t\t\t\tswap_index(i,active_size);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tactive_size--;\n\t\t\t\t}\n\t\t\t}\n\t}\n\n\tdouble calculate_rho()\n\t{\n\t\tdouble r;\n\t\tint nr_free = 0;\n\t\tdouble ub = INF, lb = -INF, sum_free = 0;\n\t\tfor(int i=0;i<active_size;i++)\n\t\t{\n\t\t\tdouble yG = y[i]*G[i];\n\n\t\t\tif(is_lower_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i] > 0)\n\t\t\t\t\tub = Math.min(ub,yG);\n\t\t\t\telse\n\t\t\t\t\tlb = Math.max(lb,yG);\n\t\t\t}\n\t\t\telse if(is_upper_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i] < 0)\n\t\t\t\t\tub = Math.min(ub,yG);\n\t\t\t\telse\n\t\t\t\t\tlb = Math.max(lb,yG);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++nr_free;\n\t\t\t\tsum_free += yG;\n\t\t\t}\n\t\t}\n\n\t\tif(nr_free>0)\n\t\t\tr = sum_free/nr_free;\n\t\telse\n\t\t\tr = (ub+lb)/2;\n\n\t\treturn r;\n\t}\n\n}\n\n//\n// Solver for nu-svm classification and regression\n//\n// additional constraint: e^T \\alpha = constant\n//\nfinal class Solver_NU extends Solver\n{\n\tprivate SolutionInfo si;\n\n\tvoid Solve(int l, QMatrix Q, double[] p, byte[] y,\n\t\t   double[] alpha, double Cp, double Cn, double eps,\n\t\t   SolutionInfo si, int shrinking)\n\t{\n\t\tthis.si = si;\n\t\tsuper.Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking);\n\t}\n\n\t// return 1 if already optimal, return 0 otherwise\n\tint select_working_set(int[] working_set)\n\t{\n\t\t// return i,j such that y_i = y_j and\n\t\t// i: maximizes -y_i * grad(f)_i, i in I_up(\\alpha)\n\t\t// j: minimizes the decrease of obj value\n\t\t//    (if quadratic coefficeint <= 0, replace it with tau)\n\t\t//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\\alpha)\n\t\n\t\tdouble Gmaxp = -INF;\n\t\tdouble Gmaxp2 = -INF;\n\t\tint Gmaxp_idx = -1;\n\t\n\t\tdouble Gmaxn = -INF;\n\t\tdouble Gmaxn2 = -INF;\n\t\tint Gmaxn_idx = -1;\n\t\n\t\tint Gmin_idx = -1;\n\t\tdouble obj_diff_min = INF;\n\t\n\t\tfor(int t=0;t<active_size;t++)\n\t\t\tif(y[t]==+1)\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(t))\n\t\t\t\t\tif(-G[t] >= Gmaxp)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmaxp = -G[t];\n\t\t\t\t\t\tGmaxp_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(!is_lower_bound(t))\n\t\t\t\t\tif(G[t] >= Gmaxn)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmaxn = G[t];\n\t\t\t\t\t\tGmaxn_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\n\t\tint ip = Gmaxp_idx;\n\t\tint in = Gmaxn_idx;\n\t\tfloat[] Q_ip = null;\n\t\tfloat[] Q_in = null;\n\t\tif(ip != -1) // null Q_ip not accessed: Gmaxp=-INF if ip=-1\n\t\t\tQ_ip = Q.get_Q(ip,active_size);\n\t\tif(in != -1)\n\t\t\tQ_in = Q.get_Q(in,active_size);\n\t\n\t\tfor(int j=0;j<active_size;j++)\n\t\t{\n\t\t\tif(y[j]==+1)\n\t\t\t{\n\t\t\t\tif (!is_lower_bound(j))\t\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff=Gmaxp+G[j];\n\t\t\t\t\tif (G[j] >= Gmaxp2)\n\t\t\t\t\t\tGmaxp2 = G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[ip]+QD[j]-2*Q_ip[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/1e-12;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!is_upper_bound(j))\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff=Gmaxn-G[j];\n\t\t\t\t\tif (-G[j] >= Gmaxn2)\n\t\t\t\t\t\tGmaxn2 = -G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[in]+QD[j]-2*Q_in[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/1e-12;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(Math.max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps)\n\t\t\treturn 1;\n\t\n\t\tif(y[Gmin_idx] == +1)\n\t\t\tworking_set[0] = Gmaxp_idx;\n\t\telse\n\t\t\tworking_set[0] = Gmaxn_idx;\n\t\tworking_set[1] = Gmin_idx;\n\t\n\t\treturn 0;\n\t}\n\n\tprivate boolean be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4)\n\t{\n\t\tif(is_upper_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(-G[i] > Gmax1);\n\t\t\telse\t\n\t\t\t\treturn(-G[i] > Gmax4);\n\t\t}\n\t\telse if(is_lower_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(G[i] > Gmax2);\n\t\t\telse\t\n\t\t\t\treturn(G[i] > Gmax3);\n\t\t}\n\t\telse\n\t\t\treturn(false);\n\t}\n\n\tvoid do_shrinking()\n\t{\n\t\tdouble Gmax1 = -INF;\t// max { -y_i * grad(f)_i | y_i = +1, i in I_up(\\alpha) }\n\t\tdouble Gmax2 = -INF;\t// max { y_i * grad(f)_i | y_i = +1, i in I_low(\\alpha) }\n\t\tdouble Gmax3 = -INF;\t// max { -y_i * grad(f)_i | y_i = -1, i in I_up(\\alpha) }\n\t\tdouble Gmax4 = -INF;\t// max { y_i * grad(f)_i | y_i = -1, i in I_low(\\alpha) }\n \n\t\t// find maximal violating pair first\n\t\tint i;\n\t\tfor(i=0;i<active_size;i++)\n\t\t{\n\t\t\tif(!is_upper_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i]==+1)\n\t\t\t\t{\n\t\t\t\t\tif(-G[i] > Gmax1) Gmax1 = -G[i];\n\t\t\t\t}\n\t\t\t\telse\tif(-G[i] > Gmax4) Gmax4 = -G[i];\n\t\t\t}\n\t\t\tif(!is_lower_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i]==+1)\n\t\t\t\t{\t\n\t\t\t\t\tif(G[i] > Gmax2) Gmax2 = G[i];\n\t\t\t\t}\n\t\t\t\telse\tif(G[i] > Gmax3) Gmax3 = G[i];\n\t\t\t}\n\t\t}\n\n\t\tif(unshrink == false && Math.max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) \n\t\t{\n\t\t\tunshrink = true;\n\t\t\treconstruct_gradient();\n\t\t\tactive_size = l;\n\t\t}\n\n\t\tfor(i=0;i<active_size;i++)\n\t\t\tif (be_shrunk(i, Gmax1, Gmax2, Gmax3, Gmax4))\n\t\t\t{\n\t\t\t\tactive_size--;\n\t\t\t\twhile (active_size > i)\n\t\t\t\t{\n\t\t\t\t\tif (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4))\n\t\t\t\t\t{\n\t\t\t\t\t\tswap_index(i,active_size);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tactive_size--;\n\t\t\t\t}\n\t\t\t}\n\t}\n\t\n\tdouble calculate_rho()\n\t{\n\t\tint nr_free1 = 0,nr_free2 = 0;\n\t\tdouble ub1 = INF, ub2 = INF;\n\t\tdouble lb1 = -INF, lb2 = -INF;\n\t\tdouble sum_free1 = 0, sum_free2 = 0;\n\n\t\tfor(int i=0;i<active_size;i++)\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t{\n\t\t\t\tif(is_lower_bound(i))\n\t\t\t\t\tub1 = Math.min(ub1,G[i]);\n\t\t\t\telse if(is_upper_bound(i))\n\t\t\t\t\tlb1 = Math.max(lb1,G[i]);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++nr_free1;\n\t\t\t\t\tsum_free1 += G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(is_lower_bound(i))\n\t\t\t\t\tub2 = Math.min(ub2,G[i]);\n\t\t\t\telse if(is_upper_bound(i))\n\t\t\t\t\tlb2 = Math.max(lb2,G[i]);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++nr_free2;\n\t\t\t\t\tsum_free2 += G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdouble r1,r2;\n\t\tif(nr_free1 > 0)\n\t\t\tr1 = sum_free1/nr_free1;\n\t\telse\n\t\t\tr1 = (ub1+lb1)/2;\n\n\t\tif(nr_free2 > 0)\n\t\t\tr2 = sum_free2/nr_free2;\n\t\telse\n\t\t\tr2 = (ub2+lb2)/2;\n\n\t\tsi.r = (r1+r2)/2;\n\t\treturn (r1-r2)/2;\n\t}\n}\n\n//\n// Q matrices for various formulations\n//\nclass SVC_Q extends Kernel\n{\n\tprivate final byte[] y;\n\tprivate final Cache cache;\n\tprivate final double[] QD;\n\n\tSVC_Q(svm_problem prob, svm_parameter param, byte[] y_)\n\t{\n\t\tsuper(prob.l, prob.x, param);\n\t\ty = (byte[])y_.clone();\n\t\tcache = new Cache(prob.l,(long)(param.cache_size*(1<<20)));\n\t\tQD = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tQD[i] = kernel_function(i,i);\n\t}\n\n\tfloat[] get_Q(int i, int len)\n\t{\n\t\tfloat[][] data = new float[1][];\n\t\tint start, j;\n\t\tif((start = cache.get_data(i,data,len)) < len)\n\t\t{\n\t\t\tfor(j=start;j<len;j++)\n\t\t\t\tdata[0][j] = (float)(y[i]*y[j]*kernel_function(i,j));\n\t\t}\n\t\treturn data[0];\n\t}\n\n\tdouble[] get_QD()\n\t{\n\t\treturn QD;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tcache.swap_index(i,j);\n\t\tsuper.swap_index(i,j);\n\t\tdo {byte _=y[i]; y[i]=y[j]; y[j]=_;} while(false);\n\t\tdo {double _=QD[i]; QD[i]=QD[j]; QD[j]=_;} while(false);\n\t}\n}\n\nclass ONE_CLASS_Q extends Kernel\n{\n\tprivate final Cache cache;\n\tprivate final double[] QD;\n\n\tONE_CLASS_Q(svm_problem prob, svm_parameter param)\n\t{\n\t\tsuper(prob.l, prob.x, param);\n\t\tcache = new Cache(prob.l,(long)(param.cache_size*(1<<20)));\n\t\tQD = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tQD[i] = kernel_function(i,i);\n\t}\n\n\tfloat[] get_Q(int i, int len)\n\t{\n\t\tfloat[][] data = new float[1][];\n\t\tint start, j;\n\t\tif((start = cache.get_data(i,data,len)) < len)\n\t\t{\n\t\t\tfor(j=start;j<len;j++)\n\t\t\t\tdata[0][j] = (float)kernel_function(i,j);\n\t\t}\n\t\treturn data[0];\n\t}\n\n\tdouble[] get_QD()\n\t{\n\t\treturn QD;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tcache.swap_index(i,j);\n\t\tsuper.swap_index(i,j);\n\t\tdo {double _=QD[i]; QD[i]=QD[j]; QD[j]=_;} while(false);\n\t}\n}\n\nclass SVR_Q extends Kernel\n{\n\tprivate final int l;\n\tprivate final Cache cache;\n\tprivate final byte[] sign;\n\tprivate final int[] index;\n\tprivate int next_buffer;\n\tprivate float[][] buffer;\n\tprivate final double[] QD;\n\n\tSVR_Q(svm_problem prob, svm_parameter param)\n\t{\n\t\tsuper(prob.l, prob.x, param);\n\t\tl = prob.l;\n\t\tcache = new Cache(l,(long)(param.cache_size*(1<<20)));\n\t\tQD = new double[2*l];\n\t\tsign = new byte[2*l];\n\t\tindex = new int[2*l];\n\t\tfor(int k=0;k<l;k++)\n\t\t{\n\t\t\tsign[k] = 1;\n\t\t\tsign[k+l] = -1;\n\t\t\tindex[k] = k;\n\t\t\tindex[k+l] = k;\n\t\t\tQD[k] = kernel_function(k,k);\n\t\t\tQD[k+l] = QD[k];\n\t\t}\n\t\tbuffer = new float[2][2*l];\n\t\tnext_buffer = 0;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tdo {byte _=sign[i]; sign[i]=sign[j]; sign[j]=_;} while(false);\n\t\tdo {int _=index[i]; index[i]=index[j]; index[j]=_;} while(false);\n\t\tdo {double _=QD[i]; QD[i]=QD[j]; QD[j]=_;} while(false);\n\t}\n\n\tfloat[] get_Q(int i, int len)\n\t{\n\t\tfloat[][] data = new float[1][];\n\t\tint j, real_i = index[i];\n\t\tif(cache.get_data(real_i,data,l) < l)\n\t\t{\n\t\t\tfor(j=0;j<l;j++)\n\t\t\t\tdata[0][j] = (float)kernel_function(real_i,j);\n\t\t}\n\n\t\t// reorder and copy\n\t\tfloat buf[] = buffer[next_buffer];\n\t\tnext_buffer = 1 - next_buffer;\n\t\tbyte si = sign[i];\n\t\tfor(j=0;j<len;j++)\n\t\t\tbuf[j] = (float) si * sign[j] * data[0][index[j]];\n\t\treturn buf;\n\t}\n\n\tdouble[] get_QD()\n\t{\n\t\treturn QD;\n\t}\n}\n\npublic class svm {\n\t//\n\t// construct and solve various formulations\n\t//\n\tpublic static final int LIBSVM_VERSION=319; \n\tpublic static final Random rand = new Random();\n\n\tprivate static svm_print_interface svm_print_stdout = new svm_print_interface()\n\t{\n\t\tpublic void print(String s)\n\t\t{\n\t\t\tSystem.out.print(s);\n\t\t\tSystem.out.flush();\n\t\t}\n\t};\n\n\tprivate static svm_print_interface svm_print_string = svm_print_stdout;\n\n\tstatic void info(String s) \n\t{\n\t\tsvm_print_string.print(s);\n\t}\n\n\tprivate static void solve_c_svc(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si,\n\t\t\t\t\tdouble Cp, double Cn)\n\t{\n\t\tint l = prob.l;\n\t\tdouble[] minus_ones = new double[l];\n\t\tbyte[] y = new byte[l];\n\n\t\tint i;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha[i] = 0;\n\t\t\tminus_ones[i] = -1;\n\t\t\tif(prob.y[i] > 0) y[i] = +1; else y[i] = -1;\n\t\t}\n\n\t\tSolver s = new Solver();\n\t\ts.Solve(l, new SVC_Q(prob,param,y), minus_ones, y,\n\t\t\talpha, Cp, Cn, param.eps, si, param.shrinking);\n\n\t\tdouble sum_alpha=0;\n\t\tfor(i=0;i<l;i++)\n\t\t\tsum_alpha += alpha[i];\n\n\t\tif (Cp==Cn)\n\t\t\tsvm.info(\"nu = \"+sum_alpha/(Cp*prob.l)+\"\\n\");\n\n\t\tfor(i=0;i<l;i++)\n\t\t\talpha[i] *= y[i];\n\t}\n\n\tprivate static void solve_nu_svc(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint i;\n\t\tint l = prob.l;\n\t\tdouble nu = param.nu;\n\n\t\tbyte[] y = new byte[l];\n\n\t\tfor(i=0;i<l;i++)\n\t\t\tif(prob.y[i]>0)\n\t\t\t\ty[i] = +1;\n\t\t\telse\n\t\t\t\ty[i] = -1;\n\n\t\tdouble sum_pos = nu*l/2;\n\t\tdouble sum_neg = nu*l/2;\n\n\t\tfor(i=0;i<l;i++)\n\t\t\tif(y[i] == +1)\n\t\t\t{\n\t\t\t\talpha[i] = Math.min(1.0,sum_pos);\n\t\t\t\tsum_pos -= alpha[i];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\talpha[i] = Math.min(1.0,sum_neg);\n\t\t\t\tsum_neg -= alpha[i];\n\t\t\t}\n\n\t\tdouble[] zeros = new double[l];\n\n\t\tfor(i=0;i<l;i++)\n\t\t\tzeros[i] = 0;\n\n\t\tSolver_NU s = new Solver_NU();\n\t\ts.Solve(l, new SVC_Q(prob,param,y), zeros, y,\n\t\t\talpha, 1.0, 1.0, param.eps, si, param.shrinking);\n\t\tdouble r = si.r;\n\n\t\tsvm.info(\"C = \"+1/r+\"\\n\");\n\n\t\tfor(i=0;i<l;i++)\n\t\t\talpha[i] *= y[i]/r;\n\n\t\tsi.rho /= r;\n\t\tsi.obj /= (r*r);\n\t\tsi.upper_bound_p = 1/r;\n\t\tsi.upper_bound_n = 1/r;\n\t}\n\n\tprivate static void solve_one_class(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint l = prob.l;\n\t\tdouble[] zeros = new double[l];\n\t\tbyte[] ones = new byte[l];\n\t\tint i;\n\n\t\tint n = (int)(param.nu*prob.l);\t// # of alpha's at upper bound\n\n\t\tfor(i=0;i<n;i++)\n\t\t\talpha[i] = 1;\n\t\tif(n<prob.l)\n\t\t\talpha[n] = param.nu * prob.l - n;\n\t\tfor(i=n+1;i<l;i++)\n\t\t\talpha[i] = 0;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tzeros[i] = 0;\n\t\t\tones[i] = 1;\n\t\t}\n\n\t\tSolver s = new Solver();\n\t\ts.Solve(l, new ONE_CLASS_Q(prob,param), zeros, ones,\n\t\t\talpha, 1.0, 1.0, param.eps, si, param.shrinking);\n\t}\n\n\tprivate static void solve_epsilon_svr(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint l = prob.l;\n\t\tdouble[] alpha2 = new double[2*l];\n\t\tdouble[] linear_term = new double[2*l];\n\t\tbyte[] y = new byte[2*l];\n\t\tint i;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha2[i] = 0;\n\t\t\tlinear_term[i] = param.p - prob.y[i];\n\t\t\ty[i] = 1;\n\n\t\t\talpha2[i+l] = 0;\n\t\t\tlinear_term[i+l] = param.p + prob.y[i];\n\t\t\ty[i+l] = -1;\n\t\t}\n\n\t\tSolver s = new Solver();\n\t\ts.Solve(2*l, new SVR_Q(prob,param), linear_term, y,\n\t\t\talpha2, param.C, param.C, param.eps, si, param.shrinking);\n\n\t\tdouble sum_alpha = 0;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha[i] = alpha2[i] - alpha2[i+l];\n\t\t\tsum_alpha += Math.abs(alpha[i]);\n\t\t}\n\t\tsvm.info(\"nu = \"+sum_alpha/(param.C*l)+\"\\n\");\n\t}\n\n\tprivate static void solve_nu_svr(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint l = prob.l;\n\t\tdouble C = param.C;\n\t\tdouble[] alpha2 = new double[2*l];\n\t\tdouble[] linear_term = new double[2*l];\n\t\tbyte[] y = new byte[2*l];\n\t\tint i;\n\n\t\tdouble sum = C * param.nu * l / 2;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha2[i] = alpha2[i+l] = Math.min(sum,C);\n\t\t\tsum -= alpha2[i];\n\t\t\t\n\t\t\tlinear_term[i] = - prob.y[i];\n\t\t\ty[i] = 1;\n\n\t\t\tlinear_term[i+l] = prob.y[i];\n\t\t\ty[i+l] = -1;\n\t\t}\n\n\t\tSolver_NU s = new Solver_NU();\n\t\ts.Solve(2*l, new SVR_Q(prob,param), linear_term, y,\n\t\t\talpha2, C, C, param.eps, si, param.shrinking);\n\n\t\tsvm.info(\"epsilon = \"+(-si.r)+\"\\n\");\n\t\t\n\t\tfor(i=0;i<l;i++)\n\t\t\talpha[i] = alpha2[i] - alpha2[i+l];\n\t}\n\n\t//\n\t// decision_function\n\t//\n\tstatic class decision_function\n\t{\n\t\tdouble[] alpha;\n\t\tdouble rho;\t\n\t};\n\n\tstatic decision_function svm_train_one(\n\t\tsvm_problem prob, svm_parameter param,\n\t\tdouble Cp, double Cn)\n\t{\n\t\tdouble[] alpha = new double[prob.l];\n\t\tSolver.SolutionInfo si = new Solver.SolutionInfo();\n\t\tswitch(param.svm_type)\n\t\t{\n\t\t\tcase svm_parameter.C_SVC:\n\t\t\t\tsolve_c_svc(prob,param,alpha,si,Cp,Cn);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.NU_SVC:\n\t\t\t\tsolve_nu_svc(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.ONE_CLASS:\n\t\t\t\tsolve_one_class(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.EPSILON_SVR:\n\t\t\t\tsolve_epsilon_svr(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.NU_SVR:\n\t\t\t\tsolve_nu_svr(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tsvm.info(\"obj = \"+si.obj+\", rho = \"+si.rho+\"\\n\");\n\n\t\t// output SVs\n\n\t\tint nSV = 0;\n\t\tint nBSV = 0;\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t{\n\t\t\tif(Math.abs(alpha[i]) > 0)\n\t\t\t{\n\t\t\t\t++nSV;\n\t\t\t\tif(prob.y[i] > 0)\n\t\t\t\t{\n\t\t\t\t\tif(Math.abs(alpha[i]) >= si.upper_bound_p)\n\t\t\t\t\t++nBSV;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(Math.abs(alpha[i]) >= si.upper_bound_n)\n\t\t\t\t\t\t++nBSV;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsvm.info(\"nSV = \"+nSV+\", nBSV = \"+nBSV+\"\\n\");\n\n\t\tdecision_function f = new decision_function();\n\t\tf.alpha = alpha;\n\t\tf.rho = si.rho;\n\t\treturn f;\n\t}\n\n\t// Platt's binary SVM Probablistic Output: an improvement from Lin et al.\n\tprivate static void sigmoid_train(int l, double[] dec_values, double[] labels, \n\t\t\t\t  double[] probAB)\n\t{\n\t\tdouble A, B;\n\t\tdouble prior1=0, prior0 = 0;\n\t\tint i;\n\n\t\tfor (i=0;i<l;i++)\n\t\t\tif (labels[i] > 0) prior1+=1;\n\t\t\telse prior0+=1;\n\t\n\t\tint max_iter=100;\t// Maximal number of iterations\n\t\tdouble min_step=1e-10;\t// Minimal step taken in line search\n\t\tdouble sigma=1e-12;\t// For numerically strict PD of Hessian\n\t\tdouble eps=1e-5;\n\t\tdouble hiTarget=(prior1+1.0)/(prior1+2.0);\n\t\tdouble loTarget=1/(prior0+2.0);\n\t\tdouble[] t= new double[l];\n\t\tdouble fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize;\n\t\tdouble newA,newB,newf,d1,d2;\n\t\tint iter; \n\t\n\t\t// Initial Point and Initial Fun Value\n\t\tA=0.0; B=Math.log((prior0+1.0)/(prior1+1.0));\n\t\tdouble fval = 0.0;\n\n\t\tfor (i=0;i<l;i++)\n\t\t{\n\t\t\tif (labels[i]>0) t[i]=hiTarget;\n\t\t\telse t[i]=loTarget;\n\t\t\tfApB = dec_values[i]*A+B;\n\t\t\tif (fApB>=0)\n\t\t\t\tfval += t[i]*fApB + Math.log(1+Math.exp(-fApB));\n\t\t\telse\n\t\t\t\tfval += (t[i] - 1)*fApB +Math.log(1+Math.exp(fApB));\n\t\t}\n\t\tfor (iter=0;iter<max_iter;iter++)\n\t\t{\n\t\t\t// Update Gradient and Hessian (use H' = H + sigma I)\n\t\t\th11=sigma; // numerically ensures strict PD\n\t\t\th22=sigma;\n\t\t\th21=0.0;g1=0.0;g2=0.0;\n\t\t\tfor (i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tfApB = dec_values[i]*A+B;\n\t\t\t\tif (fApB >= 0)\n\t\t\t\t{\n\t\t\t\t\tp=Math.exp(-fApB)/(1.0+Math.exp(-fApB));\n\t\t\t\t\tq=1.0/(1.0+Math.exp(-fApB));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tp=1.0/(1.0+Math.exp(fApB));\n\t\t\t\t\tq=Math.exp(fApB)/(1.0+Math.exp(fApB));\n\t\t\t\t}\n\t\t\t\td2=p*q;\n\t\t\t\th11+=dec_values[i]*dec_values[i]*d2;\n\t\t\t\th22+=d2;\n\t\t\t\th21+=dec_values[i]*d2;\n\t\t\t\td1=t[i]-p;\n\t\t\t\tg1+=dec_values[i]*d1;\n\t\t\t\tg2+=d1;\n\t\t\t}\n\n\t\t\t// Stopping Criteria\n\t\t\tif (Math.abs(g1)<eps && Math.abs(g2)<eps)\n\t\t\t\tbreak;\n\t\t\t\n\t\t\t// Finding Newton direction: -inv(H') * g\n\t\t\tdet=h11*h22-h21*h21;\n\t\t\tdA=-(h22*g1 - h21 * g2) / det;\n\t\t\tdB=-(-h21*g1+ h11 * g2) / det;\n\t\t\tgd=g1*dA+g2*dB;\n\n\n\t\t\tstepsize = 1;\t\t// Line Search\n\t\t\twhile (stepsize >= min_step)\n\t\t\t{\n\t\t\t\tnewA = A + stepsize * dA;\n\t\t\t\tnewB = B + stepsize * dB;\n\n\t\t\t\t// New function value\n\t\t\t\tnewf = 0.0;\n\t\t\t\tfor (i=0;i<l;i++)\n\t\t\t\t{\n\t\t\t\t\tfApB = dec_values[i]*newA+newB;\n\t\t\t\t\tif (fApB >= 0)\n\t\t\t\t\t\tnewf += t[i]*fApB + Math.log(1+Math.exp(-fApB));\n\t\t\t\t\telse\n\t\t\t\t\t\tnewf += (t[i] - 1)*fApB +Math.log(1+Math.exp(fApB));\n\t\t\t\t}\n\t\t\t\t// Check sufficient decrease\n\t\t\t\tif (newf<fval+0.0001*stepsize*gd)\n\t\t\t\t{\n\t\t\t\t\tA=newA;B=newB;fval=newf;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tstepsize = stepsize / 2.0;\n\t\t\t}\n\t\t\t\n\t\t\tif (stepsize < min_step)\n\t\t\t{\n\t\t\t\tsvm.info(\"Line search fails in two-class probability estimates\\n\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (iter>=max_iter)\n\t\t\tsvm.info(\"Reaching maximal iterations in two-class probability estimates\\n\");\n\t\tprobAB[0]=A;probAB[1]=B;\n\t}\n\n\tprivate static double sigmoid_predict(double decision_value, double A, double B)\n\t{\n\t\tdouble fApB = decision_value*A+B;\n\t\tif (fApB >= 0)\n\t\t\treturn Math.exp(-fApB)/(1.0+Math.exp(-fApB));\n\t\telse\n\t\t\treturn 1.0/(1+Math.exp(fApB)) ;\n\t}\n\n\t// Method 2 from the multiclass_prob paper by Wu, Lin, and Weng\n\tprivate static void multiclass_probability(int k, double[][] r, double[] p)\n\t{\n\t\tint t,j;\n\t\tint iter = 0, max_iter=Math.max(100,k);\n\t\tdouble[][] Q=new double[k][k];\n\t\tdouble[] Qp=new double[k];\n\t\tdouble pQp, eps=0.005/k;\n\t\n\t\tfor (t=0;t<k;t++)\n\t\t{\n\t\t\tp[t]=1.0/k;  // Valid if k = 1\n\t\t\tQ[t][t]=0;\n\t\t\tfor (j=0;j<t;j++)\n\t\t\t{\n\t\t\t\tQ[t][t]+=r[j][t]*r[j][t];\n\t\t\t\tQ[t][j]=Q[j][t];\n\t\t\t}\n\t\t\tfor (j=t+1;j<k;j++)\n\t\t\t{\n\t\t\t\tQ[t][t]+=r[j][t]*r[j][t];\n\t\t\t\tQ[t][j]=-r[j][t]*r[t][j];\n\t\t\t}\n\t\t}\n\t\tfor (iter=0;iter<max_iter;iter++)\n\t\t{\n\t\t\t// stopping condition, recalculate QP,pQP for numerical accuracy\n\t\t\tpQp=0;\n\t\t\tfor (t=0;t<k;t++)\n\t\t\t{\n\t\t\t\tQp[t]=0;\n\t\t\t\tfor (j=0;j<k;j++)\n\t\t\t\t\tQp[t]+=Q[t][j]*p[j];\n\t\t\t\tpQp+=p[t]*Qp[t];\n\t\t\t}\n\t\t\tdouble max_error=0;\n\t\t\tfor (t=0;t<k;t++)\n\t\t\t{\n\t\t\t\tdouble error=Math.abs(Qp[t]-pQp);\n\t\t\t\tif (error>max_error)\n\t\t\t\t\tmax_error=error;\n\t\t\t}\n\t\t\tif (max_error<eps) break;\n\t\t\n\t\t\tfor (t=0;t<k;t++)\n\t\t\t{\n\t\t\t\tdouble diff=(-Qp[t]+pQp)/Q[t][t];\n\t\t\t\tp[t]+=diff;\n\t\t\t\tpQp=(pQp+diff*(diff*Q[t][t]+2*Qp[t]))/(1+diff)/(1+diff);\n\t\t\t\tfor (j=0;j<k;j++)\n\t\t\t\t{\n\t\t\t\t\tQp[j]=(Qp[j]+diff*Q[t][j])/(1+diff);\n\t\t\t\t\tp[j]/=(1+diff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (iter>=max_iter)\n\t\t\tsvm.info(\"Exceeds max_iter in multiclass_prob\\n\");\n\t}\n\n\t// Cross-validation decision values for probability estimates\n\tprivate static void svm_binary_svc_probability(svm_problem prob, svm_parameter param, double Cp, double Cn, double[] probAB)\n\t{\n\t\tint i;\n\t\tint nr_fold = 5;\n\t\tint[] perm = new int[prob.l];\n\t\tdouble[] dec_values = new double[prob.l];\n\n\t\t// random shuffle\n\t\tfor(i=0;i<prob.l;i++) perm[i]=i;\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tint j = i+rand.nextInt(prob.l-i);\n\t\t\tdo {int _=perm[i]; perm[i]=perm[j]; perm[j]=_;} while(false);\n\t\t}\n\t\tfor(i=0;i<nr_fold;i++)\n\t\t{\n\t\t\tint begin = i*prob.l/nr_fold;\n\t\t\tint end = (i+1)*prob.l/nr_fold;\n\t\t\tint j,k;\n\t\t\tsvm_problem subprob = new svm_problem();\n\n\t\t\tsubprob.l = prob.l-(end-begin);\n\t\t\tsubprob.x = new svm_node[subprob.l][];\n\t\t\tsubprob.y = new double[subprob.l];\n\t\t\t\n\t\t\tk=0;\n\t\t\tfor(j=0;j<begin;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tfor(j=end;j<prob.l;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tint p_count=0,n_count=0;\n\t\t\tfor(j=0;j<k;j++)\n\t\t\t\tif(subprob.y[j]>0)\n\t\t\t\t\tp_count++;\n\t\t\t\telse\n\t\t\t\t\tn_count++;\n\t\t\t\n\t\t\tif(p_count==0 && n_count==0)\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\tdec_values[perm[j]] = 0;\n\t\t\telse if(p_count > 0 && n_count == 0)\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\tdec_values[perm[j]] = 1;\n\t\t\telse if(p_count == 0 && n_count > 0)\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\tdec_values[perm[j]] = -1;\n\t\t\telse\n\t\t\t{\n\t\t\t\tsvm_parameter subparam = (svm_parameter)param.clone();\n\t\t\t\tsubparam.probability=0;\n\t\t\t\tsubparam.C=1.0;\n\t\t\t\tsubparam.nr_weight=2;\n\t\t\t\tsubparam.weight_label = new int[2];\n\t\t\t\tsubparam.weight = new double[2];\n\t\t\t\tsubparam.weight_label[0]=+1;\n\t\t\t\tsubparam.weight_label[1]=-1;\n\t\t\t\tsubparam.weight[0]=Cp;\n\t\t\t\tsubparam.weight[1]=Cn;\n\t\t\t\tsvm_model submodel = svm_train(subprob,subparam);\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t{\n\t\t\t\t\tdouble[] dec_value=new double[1];\n\t\t\t\t\tsvm_predict_values(submodel,prob.x[perm[j]],dec_value);\n\t\t\t\t\tdec_values[perm[j]]=dec_value[0];\n\t\t\t\t\t// ensure +1 -1 order; reason not using CV subroutine\n\t\t\t\t\tdec_values[perm[j]] *= submodel.label[0];\n\t\t\t\t}\t\t\n\t\t\t}\n\t\t}\t\t\n\t\tsigmoid_train(prob.l,dec_values,prob.y,probAB);\n\t}\n\n\t// Return parameter of a Laplace distribution \n\tprivate static double svm_svr_probability(svm_problem prob, svm_parameter param)\n\t{\n\t\tint i;\n\t\tint nr_fold = 5;\n\t\tdouble[] ymv = new double[prob.l];\n\t\tdouble mae = 0;\n\n\t\tsvm_parameter newparam = (svm_parameter)param.clone();\n\t\tnewparam.probability = 0;\n\t\tsvm_cross_validation(prob,newparam,nr_fold,ymv);\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tymv[i]=prob.y[i]-ymv[i];\n\t\t\tmae += Math.abs(ymv[i]);\n\t\t}\t\t\n\t\tmae /= prob.l;\n\t\tdouble std=Math.sqrt(2*mae*mae);\n\t\tint count=0;\n\t\tmae=0;\n\t\tfor(i=0;i<prob.l;i++)\n\t\t\tif (Math.abs(ymv[i]) > 5*std) \n\t\t\t\tcount=count+1;\n\t\t\telse \n\t\t\t\tmae+=Math.abs(ymv[i]);\n\t\tmae /= (prob.l-count);\n\t\tsvm.info(\"Prob. model for test data: target value = predicted value + z,\\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma=\"+mae+\"\\n\");\n\t\treturn mae;\n\t}\n\n\t// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data\n\t// perm, length l, must be allocated before calling this subroutine\n\tprivate static void svm_group_classes(svm_problem prob, int[] nr_class_ret, int[][] label_ret, int[][] start_ret, int[][] count_ret, int[] perm)\n\t{\n\t\tint l = prob.l;\n\t\tint max_nr_class = 16;\n\t\tint nr_class = 0;\n\t\tint[] label = new int[max_nr_class];\n\t\tint[] count = new int[max_nr_class];\n\t\tint[] data_label = new int[l];\n\t\tint i;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tint this_label = (int)(prob.y[i]);\n\t\t\tint j;\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t{\n\t\t\t\tif(this_label == label[j])\n\t\t\t\t{\n\t\t\t\t\t++count[j];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata_label[i] = j;\n\t\t\tif(j == nr_class)\n\t\t\t{\n\t\t\t\tif(nr_class == max_nr_class)\n\t\t\t\t{\n\t\t\t\t\tmax_nr_class *= 2;\n\t\t\t\t\tint[] new_data = new int[max_nr_class];\n\t\t\t\t\tSystem.arraycopy(label,0,new_data,0,label.length);\n\t\t\t\t\tlabel = new_data;\n\t\t\t\t\tnew_data = new int[max_nr_class];\n\t\t\t\t\tSystem.arraycopy(count,0,new_data,0,count.length);\n\t\t\t\t\tcount = new_data;\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tlabel[nr_class] = this_label;\n\t\t\t\tcount[nr_class] = 1;\n\t\t\t\t++nr_class;\n\t\t\t}\n\t\t}\n\n\t\t//\n\t\t// Labels are ordered by their first occurrence in the training set. \n\t\t// However, for two-class sets with -1/+1 labels and -1 appears first, \n\t\t// we swap labels to ensure that internally the binary SVM has positive data corresponding to the +1 instances.\n\t\t//\n\t\tif (nr_class == 2 && label[0] == -1 && label[1] == +1)\n\t\t{\n\t\t\tdo {int _=label[0]; label[0]=label[1]; label[1]=_;} while(false);\n\t\t\tdo {int _=count[0]; count[0]=count[1]; count[1]=_;} while(false);\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tif(data_label[i] == 0)\n\t\t\t\t\tdata_label[i] = 1;\n\t\t\t\telse\n\t\t\t\t\tdata_label[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\tint[] start = new int[nr_class];\n\t\tstart[0] = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tstart[i] = start[i-1]+count[i-1];\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tperm[start[data_label[i]]] = i;\n\t\t\t++start[data_label[i]];\n\t\t}\n\t\tstart[0] = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tstart[i] = start[i-1]+count[i-1];\n\n\t\tnr_class_ret[0] = nr_class;\n\t\tlabel_ret[0] = label;\n\t\tstart_ret[0] = start;\n\t\tcount_ret[0] = count;\n\t}\n\n\t//\n\t// Interface functions\n\t//\n\tpublic static svm_model svm_train(svm_problem prob, svm_parameter param)\n\t{\n\t\tsvm_model model = new svm_model();\n\t\tmodel.param = param;\n\n\t\tif(param.svm_type == svm_parameter.ONE_CLASS ||\n\t\t   param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   param.svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\t// regression or one-class-svm\n\t\t\tmodel.nr_class = 2;\n\t\t\tmodel.label = null;\n\t\t\tmodel.nSV = null;\n\t\t\tmodel.probA = null; model.probB = null;\n\t\t\tmodel.sv_coef = new double[1][];\n\n\t\t\tif(param.probability == 1 &&\n\t\t\t   (param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t\t    param.svm_type == svm_parameter.NU_SVR))\n\t\t\t{\n\t\t\t\tmodel.probA = new double[1];\n\t\t\t\tmodel.probA[0] = svm_svr_probability(prob,param);\n\t\t\t}\n\n\t\t\tdecision_function f = svm_train_one(prob,param,0,0);\n\t\t\tmodel.rho = new double[1];\n\t\t\tmodel.rho[0] = f.rho;\n\n\t\t\tint nSV = 0;\n\t\t\tint i;\n\t\t\tfor(i=0;i<prob.l;i++)\n\t\t\t\tif(Math.abs(f.alpha[i]) > 0) ++nSV;\n\t\t\tmodel.l = nSV;\n\t\t\tmodel.SV = new svm_node[nSV][];\n\t\t\tmodel.sv_coef[0] = new double[nSV];\n\t\t\tmodel.sv_indices = new int[nSV];\n\t\t\tint j = 0;\n\t\t\tfor(i=0;i<prob.l;i++)\n\t\t\t\tif(Math.abs(f.alpha[i]) > 0)\n\t\t\t\t{\n\t\t\t\t\tmodel.SV[j] = prob.x[i];\n\t\t\t\t\tmodel.sv_coef[0][j] = f.alpha[i];\n\t\t\t\t\tmodel.sv_indices[j] = i+1;\n\t\t\t\t\t++j;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// classification\n\t\t\tint l = prob.l;\n\t\t\tint[] tmp_nr_class = new int[1];\n\t\t\tint[][] tmp_label = new int[1][];\n\t\t\tint[][] tmp_start = new int[1][];\n\t\t\tint[][] tmp_count = new int[1][];\t\t\t\n\t\t\tint[] perm = new int[l];\n\n\t\t\t// group training data of the same class\n\t\t\tsvm_group_classes(prob,tmp_nr_class,tmp_label,tmp_start,tmp_count,perm);\n\t\t\tint nr_class = tmp_nr_class[0];\t\t\t\n\t\t\tint[] label = tmp_label[0];\n\t\t\tint[] start = tmp_start[0];\n\t\t\tint[] count = tmp_count[0];\n \t\t\t\n\t\t\tif(nr_class == 1) \n\t\t\t\tsvm.info(\"WARNING: training data in only one class. See README for details.\\n\");\n\t\t\t\n\t\t\tsvm_node[][] x = new svm_node[l][];\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tx[i] = prob.x[perm[i]];\n\n\t\t\t// calculate weighted C\n\n\t\t\tdouble[] weighted_C = new double[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tweighted_C[i] = param.C;\n\t\t\tfor(i=0;i<param.nr_weight;i++)\n\t\t\t{\n\t\t\t\tint j;\n\t\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\t\tif(param.weight_label[i] == label[j])\n\t\t\t\t\t\tbreak;\n\t\t\t\tif(j == nr_class)\n\t\t\t\t\tSystem.err.print(\"WARNING: class label \"+param.weight_label[i]+\" specified in weight is not found\\n\");\n\t\t\t\telse\n\t\t\t\t\tweighted_C[j] *= param.weight[i];\n\t\t\t}\n\n\t\t\t// train k*(k-1)/2 models\n\n\t\t\tboolean[] nonzero = new boolean[l];\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tnonzero[i] = false;\n\t\t\tdecision_function[] f = new decision_function[nr_class*(nr_class-1)/2];\n\n\t\t\tdouble[] probA=null,probB=null;\n\t\t\tif (param.probability == 1)\n\t\t\t{\n\t\t\t\tprobA=new double[nr_class*(nr_class-1)/2];\n\t\t\t\tprobB=new double[nr_class*(nr_class-1)/2];\n\t\t\t}\n\n\t\t\tint p = 0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tsvm_problem sub_prob = new svm_problem();\n\t\t\t\t\tint si = start[i], sj = start[j];\n\t\t\t\t\tint ci = count[i], cj = count[j];\n\t\t\t\t\tsub_prob.l = ci+cj;\n\t\t\t\t\tsub_prob.x = new svm_node[sub_prob.l][];\n\t\t\t\t\tsub_prob.y = new double[sub_prob.l];\n\t\t\t\t\tint k;\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tsub_prob.x[k] = x[si+k];\n\t\t\t\t\t\tsub_prob.y[k] = +1;\n\t\t\t\t\t}\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tsub_prob.x[ci+k] = x[sj+k];\n\t\t\t\t\t\tsub_prob.y[ci+k] = -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(param.probability == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble[] probAB=new double[2];\n\t\t\t\t\t\tsvm_binary_svc_probability(sub_prob,param,weighted_C[i],weighted_C[j],probAB);\n\t\t\t\t\t\tprobA[p]=probAB[0];\n\t\t\t\t\t\tprobB[p]=probAB[1];\n\t\t\t\t\t}\n\n\t\t\t\t\tf[p] = svm_train_one(sub_prob,param,weighted_C[i],weighted_C[j]);\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t\tif(!nonzero[si+k] && Math.abs(f[p].alpha[k]) > 0)\n\t\t\t\t\t\t\tnonzero[si+k] = true;\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t\tif(!nonzero[sj+k] && Math.abs(f[p].alpha[ci+k]) > 0)\n\t\t\t\t\t\t\tnonzero[sj+k] = true;\n\t\t\t\t\t++p;\n\t\t\t\t}\n\n\t\t\t// build output\n\n\t\t\tmodel.nr_class = nr_class;\n\n\t\t\tmodel.label = new int[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tmodel.label[i] = label[i];\n\n\t\t\tmodel.rho = new double[nr_class*(nr_class-1)/2];\n\t\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tmodel.rho[i] = f[i].rho;\n\n\t\t\tif(param.probability == 1)\n\t\t\t{\n\t\t\t\tmodel.probA = new double[nr_class*(nr_class-1)/2];\n\t\t\t\tmodel.probB = new double[nr_class*(nr_class-1)/2];\n\t\t\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\t{\n\t\t\t\t\tmodel.probA[i] = probA[i];\n\t\t\t\t\tmodel.probB[i] = probB[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tmodel.probA=null;\n\t\t\t\tmodel.probB=null;\n\t\t\t}\n\n\t\t\tint nnz = 0;\n\t\t\tint[] nz_count = new int[nr_class];\n\t\t\tmodel.nSV = new int[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t{\n\t\t\t\tint nSV = 0;\n\t\t\t\tfor(int j=0;j<count[i];j++)\n\t\t\t\t\tif(nonzero[start[i]+j])\n\t\t\t\t\t{\n\t\t\t\t\t\t++nSV;\n\t\t\t\t\t\t++nnz;\n\t\t\t\t\t}\n\t\t\t\tmodel.nSV[i] = nSV;\n\t\t\t\tnz_count[i] = nSV;\n\t\t\t}\n\n\t\t\tsvm.info(\"Total nSV = \"+nnz+\"\\n\");\n\n\t\t\tmodel.l = nnz;\n\t\t\tmodel.SV = new svm_node[nnz][];\n\t\t\tmodel.sv_indices = new int[nnz];\n\t\t\tp = 0;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tif(nonzero[i])\n\t\t\t\t{\n\t\t\t\t\tmodel.SV[p] = x[i];\n\t\t\t\t\tmodel.sv_indices[p++] = perm[i] + 1;\n\t\t\t\t}\n\n\t\t\tint[] nz_start = new int[nr_class];\n\t\t\tnz_start[0] = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tnz_start[i] = nz_start[i-1]+nz_count[i-1];\n\n\t\t\tmodel.sv_coef = new double[nr_class-1][];\n\t\t\tfor(i=0;i<nr_class-1;i++)\n\t\t\t\tmodel.sv_coef[i] = new double[nnz];\n\n\t\t\tp = 0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\t// classifier (i,j): coefficients with\n\t\t\t\t\t// i are in sv_coef[j-1][nz_start[i]...],\n\t\t\t\t\t// j are in sv_coef[i][nz_start[j]...]\n\n\t\t\t\t\tint si = start[i];\n\t\t\t\t\tint sj = start[j];\n\t\t\t\t\tint ci = count[i];\n\t\t\t\t\tint cj = count[j];\n\n\t\t\t\t\tint q = nz_start[i];\n\t\t\t\t\tint k;\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t\tif(nonzero[si+k])\n\t\t\t\t\t\t\tmodel.sv_coef[j-1][q++] = f[p].alpha[k];\n\t\t\t\t\tq = nz_start[j];\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t\tif(nonzero[sj+k])\n\t\t\t\t\t\t\tmodel.sv_coef[i][q++] = f[p].alpha[ci+k];\n\t\t\t\t\t++p;\n\t\t\t\t}\n\t\t}\n\t\treturn model;\n\t}\n\t\n\t// Stratified cross validation\n\tpublic static void svm_cross_validation(svm_problem prob, svm_parameter param, int nr_fold, double[] target)\n\t{\n\t\tint i;\n\t\tint[] fold_start = new int[nr_fold+1];\n\t\tint l = prob.l;\n\t\tint[] perm = new int[l];\n\t\t\n\t\t// stratified cv may not give leave-one-out rate\n\t\t// Each class to l folds -> some folds may have zero elements\n\t\tif((param.svm_type == svm_parameter.C_SVC ||\n\t\t    param.svm_type == svm_parameter.NU_SVC) && nr_fold < l)\n\t\t{\n\t\t\tint[] tmp_nr_class = new int[1];\n\t\t\tint[][] tmp_label = new int[1][];\n\t\t\tint[][] tmp_start = new int[1][];\n\t\t\tint[][] tmp_count = new int[1][];\n\n\t\t\tsvm_group_classes(prob,tmp_nr_class,tmp_label,tmp_start,tmp_count,perm);\n\n\t\t\tint nr_class = tmp_nr_class[0];\n\t\t\tint[] start = tmp_start[0];\n\t\t\tint[] count = tmp_count[0];\t\t\n\n\t\t\t// random shuffle and then data grouped by fold using the array perm\n\t\t\tint[] fold_count = new int[nr_fold];\n\t\t\tint c;\n\t\t\tint[] index = new int[l];\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tindex[i]=perm[i];\n\t\t\tfor (c=0; c<nr_class; c++)\n\t\t\t\tfor(i=0;i<count[c];i++)\n\t\t\t\t{\n\t\t\t\t\tint j = i+rand.nextInt(count[c]-i);\n\t\t\t\t\tdo {int _=index[start[c]+j]; index[start[c]+j]=index[start[c]+i]; index[start[c]+i]=_;} while(false);\n\t\t\t\t}\n\t\t\tfor(i=0;i<nr_fold;i++)\n\t\t\t{\n\t\t\t\tfold_count[i] = 0;\n\t\t\t\tfor (c=0; c<nr_class;c++)\n\t\t\t\t\tfold_count[i]+=(i+1)*count[c]/nr_fold-i*count[c]/nr_fold;\n\t\t\t}\n\t\t\tfold_start[0]=0;\n\t\t\tfor (i=1;i<=nr_fold;i++)\n\t\t\t\tfold_start[i] = fold_start[i-1]+fold_count[i-1];\n\t\t\tfor (c=0; c<nr_class;c++)\n\t\t\t\tfor(i=0;i<nr_fold;i++)\n\t\t\t\t{\n\t\t\t\t\tint begin = start[c]+i*count[c]/nr_fold;\n\t\t\t\t\tint end = start[c]+(i+1)*count[c]/nr_fold;\n\t\t\t\t\tfor(int j=begin;j<end;j++)\n\t\t\t\t\t{\n\t\t\t\t\t\tperm[fold_start[i]] = index[j];\n\t\t\t\t\t\tfold_start[i]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tfold_start[0]=0;\n\t\t\tfor (i=1;i<=nr_fold;i++)\n\t\t\t\tfold_start[i] = fold_start[i-1]+fold_count[i-1];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor(i=0;i<l;i++) perm[i]=i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tint j = i+rand.nextInt(l-i);\n\t\t\t\tdo {int _=perm[i]; perm[i]=perm[j]; perm[j]=_;} while(false);\n\t\t\t}\n\t\t\tfor(i=0;i<=nr_fold;i++)\n\t\t\t\tfold_start[i]=i*l/nr_fold;\n\t\t}\n\n\t\tfor(i=0;i<nr_fold;i++)\n\t\t{\n\t\t\tint begin = fold_start[i];\n\t\t\tint end = fold_start[i+1];\n\t\t\tint j,k;\n\t\t\tsvm_problem subprob = new svm_problem();\n\n\t\t\tsubprob.l = l-(end-begin);\n\t\t\tsubprob.x = new svm_node[subprob.l][];\n\t\t\tsubprob.y = new double[subprob.l];\n\n\t\t\tk=0;\n\t\t\tfor(j=0;j<begin;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tfor(j=end;j<l;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tsvm_model submodel = svm_train(subprob,param);\n\t\t\tif(param.probability==1 &&\n\t\t\t   (param.svm_type == svm_parameter.C_SVC ||\n\t\t\t    param.svm_type == svm_parameter.NU_SVC))\n\t\t\t{\n\t\t\t\tdouble[] prob_estimates= new double[svm_get_nr_class(submodel)];\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\ttarget[perm[j]] = svm_predict_probability(submodel,prob.x[perm[j]],prob_estimates);\n\t\t\t}\n\t\t\telse\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\ttarget[perm[j]] = svm_predict(submodel,prob.x[perm[j]]);\n\t\t}\n\t}\n\n\tpublic static int svm_get_svm_type(svm_model model)\n\t{\n\t\treturn model.param.svm_type;\n\t}\n\n\tpublic static int svm_get_nr_class(svm_model model)\n\t{\n\t\treturn model.nr_class;\n\t}\n\n\tpublic static void svm_get_labels(svm_model model, int[] label)\n\t{\n\t\tif (model.label != null)\n\t\t\tfor(int i=0;i<model.nr_class;i++)\n\t\t\t\tlabel[i] = model.label[i];\n\t}\n\n\tpublic static void svm_get_sv_indices(svm_model model, int[] indices)\n\t{\n\t\tif (model.sv_indices != null)\n\t\t\tfor(int i=0;i<model.l;i++)\n\t\t\t\tindices[i] = model.sv_indices[i];\n\t}\n\n\tpublic static int svm_get_nr_sv(svm_model model)\n\t{\n\t\treturn model.l;\n\t}\n\n\tpublic static double svm_get_svr_probability(svm_model model)\n\t{\n\t\tif ((model.param.svm_type == svm_parameter.EPSILON_SVR || model.param.svm_type == svm_parameter.NU_SVR) &&\n\t\t    model.probA!=null)\n\t\treturn model.probA[0];\n\t\telse\n\t\t{\n\t\t\tSystem.err.print(\"Model doesn't contain information for SVR probability inference\\n\");\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpublic static double svm_predict_values(svm_model model, svm_node[] x, double[] dec_values)\n\t{\n\t\tint i;\n\t\tif(model.param.svm_type == svm_parameter.ONE_CLASS ||\n\t\t   model.param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   model.param.svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\tdouble[] sv_coef = model.sv_coef[0];\n\t\t\tdouble sum = 0;\n\t\t\tfor(i=0;i<model.l;i++)\n\t\t\t\tsum += sv_coef[i] * Kernel.k_function(x,model.SV[i],model.param);\n\t\t\tsum -= model.rho[0];\n\t\t\tdec_values[0] = sum;\n\n\t\t\tif(model.param.svm_type == svm_parameter.ONE_CLASS)\n\t\t\t\treturn (sum>0)?1:-1;\n\t\t\telse\n\t\t\t\treturn sum;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint nr_class = model.nr_class;\n\t\t\tint l = model.l;\n\t\t\n\t\t\tdouble[] kvalue = new double[l];\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tkvalue[i] = Kernel.k_function(x,model.SV[i],model.param);\n\n\t\t\tint[] start = new int[nr_class];\n\t\t\tstart[0] = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tstart[i] = start[i-1]+model.nSV[i-1];\n\n\t\t\tint[] vote = new int[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tvote[i] = 0;\n\n\t\t\tint p=0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tdouble sum = 0;\n\t\t\t\t\tint si = start[i];\n\t\t\t\t\tint sj = start[j];\n\t\t\t\t\tint ci = model.nSV[i];\n\t\t\t\t\tint cj = model.nSV[j];\n\t\t\t\t\n\t\t\t\t\tint k;\n\t\t\t\t\tdouble[] coef1 = model.sv_coef[j-1];\n\t\t\t\t\tdouble[] coef2 = model.sv_coef[i];\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t\tsum += coef1[si+k] * kvalue[si+k];\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t\tsum += coef2[sj+k] * kvalue[sj+k];\n\t\t\t\t\tsum -= model.rho[p];\n\t\t\t\t\tdec_values[p] = sum;\t\t\t\t\t\n\n\t\t\t\t\tif(dec_values[p] > 0)\n\t\t\t\t\t\t++vote[i];\n\t\t\t\t\telse\n\t\t\t\t\t\t++vote[j];\n\t\t\t\t\tp++;\n\t\t\t\t}\n\n\t\t\tint vote_max_idx = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tif(vote[i] > vote[vote_max_idx])\n\t\t\t\t\tvote_max_idx = i;\n\n\t\t\treturn model.label[vote_max_idx];\n\t\t}\n\t}\n\n\tpublic static double svm_predict(svm_model model, svm_node[] x)\n\t{\n\t\tint nr_class = model.nr_class;\n\t\tdouble[] dec_values;\n\t\tif(model.param.svm_type == svm_parameter.ONE_CLASS ||\n\t\t\t\tmodel.param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t\t\tmodel.param.svm_type == svm_parameter.NU_SVR)\n\t\t\tdec_values = new double[1];\n\t\telse\n\t\t\tdec_values = new double[nr_class*(nr_class-1)/2];\n\t\tdouble pred_result = svm_predict_values(model, x, dec_values);\n\t\treturn pred_result;\n\t}\n\n\tpublic static double svm_predict_probability(svm_model model, svm_node[] x, double[] prob_estimates)\n\t{\n\t\tif ((model.param.svm_type == svm_parameter.C_SVC || model.param.svm_type == svm_parameter.NU_SVC) &&\n\t\t    model.probA!=null && model.probB!=null)\n\t\t{\n\t\t\tint i;\n\t\t\tint nr_class = model.nr_class;\n\t\t\tdouble[] dec_values = new double[nr_class*(nr_class-1)/2];\n\t\t\tsvm_predict_values(model, x, dec_values);\n\n\t\t\tdouble min_prob=1e-7;\n\t\t\tdouble[][] pairwise_prob=new double[nr_class][nr_class];\n\t\t\t\n\t\t\tint k=0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tpairwise_prob[i][j]=Math.min(Math.max(sigmoid_predict(dec_values[k],model.probA[k],model.probB[k]),min_prob),1-min_prob);\n\t\t\t\t\tpairwise_prob[j][i]=1-pairwise_prob[i][j];\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\tmulticlass_probability(nr_class,pairwise_prob,prob_estimates);\n\n\t\t\tint prob_max_idx = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tif(prob_estimates[i] > prob_estimates[prob_max_idx])\n\t\t\t\t\tprob_max_idx = i;\n\t\t\treturn model.label[prob_max_idx];\n\t\t}\n\t\telse \n\t\t\treturn svm_predict(model, x);\n\t}\n\n\tstatic final String svm_type_table[] =\n\t{\n\t\t\"c_svc\",\"nu_svc\",\"one_class\",\"epsilon_svr\",\"nu_svr\",\n\t};\n\n\tstatic final String kernel_type_table[]=\n\t{\n\t\t\"linear\",\"polynomial\",\"rbf\",\"sigmoid\",\"precomputed\"\n\t};\n\n\tpublic static void svm_save_model(String model_file_name, svm_model model) throws IOException\n\t{\n\t\tDataOutputStream fp = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(model_file_name)));\n\n\t\tsvm_parameter param = model.param;\n\n\t\tfp.writeBytes(\"svm_type \"+svm_type_table[param.svm_type]+\"\\n\");\n\t\tfp.writeBytes(\"kernel_type \"+kernel_type_table[param.kernel_type]+\"\\n\");\n\n\t\tif(param.kernel_type == svm_parameter.POLY)\n\t\t\tfp.writeBytes(\"degree \"+param.degree+\"\\n\");\n\n\t\tif(param.kernel_type == svm_parameter.POLY ||\n\t\t   param.kernel_type == svm_parameter.RBF ||\n\t\t   param.kernel_type == svm_parameter.SIGMOID)\n\t\t\tfp.writeBytes(\"gamma \"+param.gamma+\"\\n\");\n\n\t\tif(param.kernel_type == svm_parameter.POLY ||\n\t\t   param.kernel_type == svm_parameter.SIGMOID)\n\t\t\tfp.writeBytes(\"coef0 \"+param.coef0+\"\\n\");\n\n\t\tint nr_class = model.nr_class;\n\t\tint l = model.l;\n\t\tfp.writeBytes(\"nr_class \"+nr_class+\"\\n\");\n\t\tfp.writeBytes(\"total_sv \"+l+\"\\n\");\n\t\n\t\t{\n\t\t\tfp.writeBytes(\"rho\");\n\t\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.rho[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\t\n\t\tif(model.label != null)\n\t\t{\n\t\t\tfp.writeBytes(\"label\");\n\t\t\tfor(int i=0;i<nr_class;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.label[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tif(model.probA != null) // regression has probA only\n\t\t{\n\t\t\tfp.writeBytes(\"probA\");\n\t\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.probA[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\t\tif(model.probB != null) \n\t\t{\n\t\t\tfp.writeBytes(\"probB\");\n\t\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.probB[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tif(model.nSV != null)\n\t\t{\n\t\t\tfp.writeBytes(\"nr_sv\");\n\t\t\tfor(int i=0;i<nr_class;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.nSV[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tfp.writeBytes(\"SV\\n\");\n\t\tdouble[][] sv_coef = model.sv_coef;\n\t\tsvm_node[][] SV = model.SV;\n\n\t\tfor(int i=0;i<l;i++)\n\t\t{\n\t\t\tfor(int j=0;j<nr_class-1;j++)\n\t\t\t\tfp.writeBytes(sv_coef[j][i]+\" \");\n\n\t\t\tsvm_node[] p = SV[i];\n\t\t\tif(param.kernel_type == svm_parameter.PRECOMPUTED)\n\t\t\t\tfp.writeBytes(\"0:\"+(int)(p[0].value));\n\t\t\telse\t\n\t\t\t\tfor(int j=0;j<p.length;j++)\n\t\t\t\t\tfp.writeBytes(p[j].index+\":\"+p[j].value+\" \");\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tfp.close();\n\t}\n\n\tprivate static double atof(String s)\n\t{\n\t\treturn Double.valueOf(s).doubleValue();\n\t}\n\n\tprivate static int atoi(String s)\n\t{\n\t\treturn Integer.parseInt(s);\n\t}\n\n\tprivate static boolean read_model_header(BufferedReader fp, svm_model model)\n\t{\n\t\tsvm_parameter param = new svm_parameter();\n\t\tmodel.param = param;\n\t\ttry\n\t\t{\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tString cmd = fp.readLine();\n\t\t\t\tString arg = cmd.substring(cmd.indexOf(' ')+1);\n\n\t\t\t\tif(cmd.startsWith(\"svm_type\"))\n\t\t\t\t{\n\t\t\t\t\tint i;\n\t\t\t\t\tfor(i=0;i<svm_type_table.length;i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(arg.indexOf(svm_type_table[i])!=-1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparam.svm_type=i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(i == svm_type_table.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tSystem.err.print(\"unknown svm type.\\n\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"kernel_type\"))\n\t\t\t\t{\n\t\t\t\t\tint i;\n\t\t\t\t\tfor(i=0;i<kernel_type_table.length;i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(arg.indexOf(kernel_type_table[i])!=-1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparam.kernel_type=i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(i == kernel_type_table.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tSystem.err.print(\"unknown kernel function.\\n\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"degree\"))\n\t\t\t\t\tparam.degree = atoi(arg);\n\t\t\t\telse if(cmd.startsWith(\"gamma\"))\n\t\t\t\t\tparam.gamma = atof(arg);\n\t\t\t\telse if(cmd.startsWith(\"coef0\"))\n\t\t\t\t\tparam.coef0 = atof(arg);\n\t\t\t\telse if(cmd.startsWith(\"nr_class\"))\n\t\t\t\t\tmodel.nr_class = atoi(arg);\n\t\t\t\telse if(cmd.startsWith(\"total_sv\"))\n\t\t\t\t\tmodel.l = atoi(arg);\n\t\t\t\telse if(cmd.startsWith(\"rho\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class * (model.nr_class-1)/2;\n\t\t\t\t\tmodel.rho = new double[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.rho[i] = atof(st.nextToken());\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"label\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class;\n\t\t\t\t\tmodel.label = new int[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.label[i] = atoi(st.nextToken());\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"probA\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class*(model.nr_class-1)/2;\n\t\t\t\t\tmodel.probA = new double[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.probA[i] = atof(st.nextToken());\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"probB\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class*(model.nr_class-1)/2;\n\t\t\t\t\tmodel.probB = new double[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.probB[i] = atof(st.nextToken());\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"nr_sv\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class;\n\t\t\t\t\tmodel.nSV = new int[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.nSV[i] = atoi(st.nextToken());\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"SV\"))\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSystem.err.print(\"unknown text in model file: [\"+cmd+\"]\\n\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch(Exception e)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static svm_model svm_load_model(String model_file_name) throws IOException\n\t{\n\t\treturn svm_load_model(new BufferedReader(new FileReader(model_file_name)));\n\t}\n\n\tpublic static svm_model svm_load_model(BufferedReader fp) throws IOException\n\t{\n\t\t// read parameters\n\n\t\tsvm_model model = new svm_model();\n\t\tmodel.rho = null;\n\t\tmodel.probA = null;\n\t\tmodel.probB = null;\n\t\tmodel.label = null;\n\t\tmodel.nSV = null;\n\n\t\tif (read_model_header(fp, model) == false)\n\t\t{\n\t\t\tSystem.err.print(\"ERROR: failed to read model\\n\");\n\t\t\treturn null;\n\t\t}\n\n\t\t// read sv_coef and SV\n\n\t\tint m = model.nr_class - 1;\n\t\tint l = model.l;\n\t\tmodel.sv_coef = new double[m][l];\n\t\tmodel.SV = new svm_node[l][];\n\n\t\tfor(int i=0;i<l;i++)\n\t\t{\n\t\t\tString line = fp.readLine();\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\n\t\t\tfor(int k=0;k<m;k++)\n\t\t\t\tmodel.sv_coef[k][i] = atof(st.nextToken());\n\t\t\tint n = st.countTokens()/2;\n\t\t\tmodel.SV[i] = new svm_node[n];\n\t\t\tfor(int j=0;j<n;j++)\n\t\t\t{\n\t\t\t\tmodel.SV[i][j] = new svm_node();\n\t\t\t\tmodel.SV[i][j].index = atoi(st.nextToken());\n\t\t\t\tmodel.SV[i][j].value = atof(st.nextToken());\n\t\t\t}\n\t\t}\n\n\t\tfp.close();\n\t\treturn model;\n\t}\n\n\tpublic static String svm_check_parameter(svm_problem prob, svm_parameter param)\n\t{\n\t\t// svm_type\n\n\t\tint svm_type = param.svm_type;\n\t\tif(svm_type != svm_parameter.C_SVC &&\n\t\t   svm_type != svm_parameter.NU_SVC &&\n\t\t   svm_type != svm_parameter.ONE_CLASS &&\n\t\t   svm_type != svm_parameter.EPSILON_SVR &&\n\t\t   svm_type != svm_parameter.NU_SVR)\n\t\treturn \"unknown svm type\";\n\n\t\t// kernel_type, degree\n\t\n\t\tint kernel_type = param.kernel_type;\n\t\tif(kernel_type != svm_parameter.LINEAR &&\n\t\t   kernel_type != svm_parameter.POLY &&\n\t\t   kernel_type != svm_parameter.RBF &&\n\t\t   kernel_type != svm_parameter.SIGMOID &&\n\t\t   kernel_type != svm_parameter.PRECOMPUTED)\n\t\t\treturn \"unknown kernel type\";\n\n\t\tif(param.gamma < 0)\n\t\t\treturn \"gamma < 0\";\n\n\t\tif(param.degree < 0)\n\t\t\treturn \"degree of polynomial kernel < 0\";\n\n\t\t// cache_size,eps,C,nu,p,shrinking\n\n\t\tif(param.cache_size <= 0)\n\t\t\treturn \"cache_size <= 0\";\n\n\t\tif(param.eps <= 0)\n\t\t\treturn \"eps <= 0\";\n\n\t\tif(svm_type == svm_parameter.C_SVC ||\n\t\t   svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   svm_type == svm_parameter.NU_SVR)\n\t\t\tif(param.C <= 0)\n\t\t\t\treturn \"C <= 0\";\n\n\t\tif(svm_type == svm_parameter.NU_SVC ||\n\t\t   svm_type == svm_parameter.ONE_CLASS ||\n\t\t   svm_type == svm_parameter.NU_SVR)\n\t\t\tif(param.nu <= 0 || param.nu > 1)\n\t\t\t\treturn \"nu <= 0 or nu > 1\";\n\n\t\tif(svm_type == svm_parameter.EPSILON_SVR)\n\t\t\tif(param.p < 0)\n\t\t\t\treturn \"p < 0\";\n\n\t\tif(param.shrinking != 0 &&\n\t\t   param.shrinking != 1)\n\t\t\treturn \"shrinking != 0 and shrinking != 1\";\n\n\t\tif(param.probability != 0 &&\n\t\t   param.probability != 1)\n\t\t\treturn \"probability != 0 and probability != 1\";\n\n\t\tif(param.probability == 1 &&\n\t\t   svm_type == svm_parameter.ONE_CLASS)\n\t\t\treturn \"one-class SVM probability output not supported yet\";\n\t\t\n\t\t// check whether nu-svc is feasible\n\t\n\t\tif(svm_type == svm_parameter.NU_SVC)\n\t\t{\n\t\t\tint l = prob.l;\n\t\t\tint max_nr_class = 16;\n\t\t\tint nr_class = 0;\n\t\t\tint[] label = new int[max_nr_class];\n\t\t\tint[] count = new int[max_nr_class];\n\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tint this_label = (int)prob.y[i];\n\t\t\t\tint j;\n\t\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\t\tif(this_label == label[j])\n\t\t\t\t\t{\n\t\t\t\t\t\t++count[j];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\tif(j == nr_class)\n\t\t\t\t{\n\t\t\t\t\tif(nr_class == max_nr_class)\n\t\t\t\t\t{\n\t\t\t\t\t\tmax_nr_class *= 2;\n\t\t\t\t\t\tint[] new_data = new int[max_nr_class];\n\t\t\t\t\t\tSystem.arraycopy(label,0,new_data,0,label.length);\n\t\t\t\t\t\tlabel = new_data;\n\t\t\t\t\t\t\n\t\t\t\t\t\tnew_data = new int[max_nr_class];\n\t\t\t\t\t\tSystem.arraycopy(count,0,new_data,0,count.length);\n\t\t\t\t\t\tcount = new_data;\n\t\t\t\t\t}\n\t\t\t\t\tlabel[nr_class] = this_label;\n\t\t\t\t\tcount[nr_class] = 1;\n\t\t\t\t\t++nr_class;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t{\n\t\t\t\tint n1 = count[i];\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tint n2 = count[j];\n\t\t\t\t\tif(param.nu*(n1+n2)/2 > Math.min(n1,n2))\n\t\t\t\t\t\treturn \"specified nu is infeasible\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic static int svm_check_probability_model(svm_model model)\n\t{\n\t\tif (((model.param.svm_type == svm_parameter.C_SVC || model.param.svm_type == svm_parameter.NU_SVC) &&\n\t\tmodel.probA!=null && model.probB!=null) ||\n\t\t((model.param.svm_type == svm_parameter.EPSILON_SVR || model.param.svm_type == svm_parameter.NU_SVR) &&\n\t\t model.probA!=null))\n\t\t\treturn 1;\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tpublic static void svm_set_print_string_function(svm_print_interface print_func)\n\t{\n\t\tif (print_func == null)\n\t\t\tsvm_print_string = svm_print_stdout;\n\t\telse \n\t\t\tsvm_print_string = print_func;\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm.m4",
    "content": "define(`swap',`do {$1 _=$2; $2=$3; $3=_;} while(false)')\ndefine(`Qfloat',`float')\ndefine(`SIZE_OF_QFLOAT',4)\ndefine(`TAU',1e-12)\nchangecom(`//', )\npackage libsvm;\nimport java.io.*;\nimport java.util.*;\n\n//\n// Kernel Cache\n//\n// l is the number of total data items\n// size is the cache size limit in bytes\n//\nclass Cache {\n\tprivate final int l;\n\tprivate long size;\n\tprivate final class head_t\n\t{\n\t\thead_t prev, next;\t// a cicular list\n\t\tQfloat[] data;\n\t\tint len;\t\t// data[0,len) is cached in this entry\n\t}\n\tprivate final head_t[] head;\n\tprivate head_t lru_head;\n\n\tCache(int l_, long size_)\n\t{\n\t\tl = l_;\n\t\tsize = size_;\n\t\thead = new head_t[l];\n\t\tfor(int i=0;i<l;i++) head[i] = new head_t();\n\t\tsize /= SIZE_OF_QFLOAT;\n\t\tsize -= l * (16/SIZE_OF_QFLOAT);\t// sizeof(head_t) == 16\n\t\tsize = Math.max(size, 2* (long) l);  // cache must be large enough for two columns\n\t\tlru_head = new head_t();\n\t\tlru_head.next = lru_head.prev = lru_head;\n\t}\n\n\tprivate void lru_delete(head_t h)\n\t{\n\t\t// delete from current location\n\t\th.prev.next = h.next;\n\t\th.next.prev = h.prev;\n\t}\n\n\tprivate void lru_insert(head_t h)\n\t{\n\t\t// insert to last position\n\t\th.next = lru_head;\n\t\th.prev = lru_head.prev;\n\t\th.prev.next = h;\n\t\th.next.prev = h;\n\t}\n\n\t// request data [0,len)\n\t// return some position p where [p,len) need to be filled\n\t// (p >= len if nothing needs to be filled)\n\t// java: simulate pointer using single-element array\n\tint get_data(int index, Qfloat[][] data, int len)\n\t{\n\t\thead_t h = head[index];\n\t\tif(h.len > 0) lru_delete(h);\n\t\tint more = len - h.len;\n\n\t\tif(more > 0)\n\t\t{\n\t\t\t// free old space\n\t\t\twhile(size < more)\n\t\t\t{\n\t\t\t\thead_t old = lru_head.next;\n\t\t\t\tlru_delete(old);\n\t\t\t\tsize += old.len;\n\t\t\t\told.data = null;\n\t\t\t\told.len = 0;\n\t\t\t}\n\n\t\t\t// allocate new space\n\t\t\tQfloat[] new_data = new Qfloat[len];\n\t\t\tif(h.data != null) System.arraycopy(h.data,0,new_data,0,h.len);\n\t\t\th.data = new_data;\n\t\t\tsize -= more;\n\t\t\tswap(int,h.len,len);\n\t\t}\n\n\t\tlru_insert(h);\n\t\tdata[0] = h.data;\n\t\treturn len;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tif(i==j) return;\n\t\t\n\t\tif(head[i].len > 0) lru_delete(head[i]);\n\t\tif(head[j].len > 0) lru_delete(head[j]);\n\t\tswap(Qfloat[],head[i].data,head[j].data);\n\t\tswap(int,head[i].len,head[j].len);\n\t\tif(head[i].len > 0) lru_insert(head[i]);\n\t\tif(head[j].len > 0) lru_insert(head[j]);\n\n\t\tif(i>j) swap(int,i,j);\n\t\tfor(head_t h = lru_head.next; h!=lru_head; h=h.next)\n\t\t{\n\t\t\tif(h.len > i)\n\t\t\t{\n\t\t\t\tif(h.len > j)\n\t\t\t\t\tswap(Qfloat,h.data[i],h.data[j]);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// give up\n\t\t\t\t\tlru_delete(h);\n\t\t\t\t\tsize += h.len;\n\t\t\t\t\th.data = null;\n\t\t\t\t\th.len = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Kernel evaluation\n//\n// the static method k_function is for doing single kernel evaluation\n// the constructor of Kernel prepares to calculate the l*l kernel matrix\n// the member function get_Q is for getting one column from the Q Matrix\n//\nabstract class QMatrix {\n\tabstract Qfloat[] get_Q(int column, int len);\n\tabstract double[] get_QD();\n\tabstract void swap_index(int i, int j);\n};\n\nabstract class Kernel extends QMatrix {\n\tprivate svm_node[][] x;\n\tprivate final double[] x_square;\n\n\t// svm_parameter\n\tprivate final int kernel_type;\n\tprivate final int degree;\n\tprivate final double gamma;\n\tprivate final double coef0;\n\n\tabstract Qfloat[] get_Q(int column, int len);\n\tabstract double[] get_QD();\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tswap(svm_node[],x[i],x[j]);\n\t\tif(x_square != null) swap(double,x_square[i],x_square[j]);\n\t}\n\n\tprivate static double powi(double base, int times)\n\t{\n\t\tdouble tmp = base, ret = 1.0;\n\n\t\tfor(int t=times; t>0; t/=2)\n\t\t{\n\t\t\tif(t%2==1) ret*=tmp;\n\t\t\ttmp = tmp * tmp;\n\t\t}\n\t\treturn ret;\n\t}\n\n\tdouble kernel_function(int i, int j)\n\t{\n\t\tswitch(kernel_type)\n\t\t{\n\t\t\tcase svm_parameter.LINEAR:\n\t\t\t\treturn dot(x[i],x[j]);\n\t\t\tcase svm_parameter.POLY:\n\t\t\t\treturn powi(gamma*dot(x[i],x[j])+coef0,degree);\n\t\t\tcase svm_parameter.RBF:\n\t\t\t\treturn Math.exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j])));\n\t\t\tcase svm_parameter.SIGMOID:\n\t\t\t\treturn Math.tanh(gamma*dot(x[i],x[j])+coef0);\n\t\t\tcase svm_parameter.PRECOMPUTED:\n\t\t\t\treturn x[i][(int)(x[j][0].value)].value;\n\t\t\tdefault:\n\t\t\t\treturn 0;\t// java\n\t\t}\n\t}\n\n\tKernel(int l, svm_node[][] x_, svm_parameter param)\n\t{\n\t\tthis.kernel_type = param.kernel_type;\n\t\tthis.degree = param.degree;\n\t\tthis.gamma = param.gamma;\n\t\tthis.coef0 = param.coef0;\n\n\t\tx = (svm_node[][])x_.clone();\n\n\t\tif(kernel_type == svm_parameter.RBF)\n\t\t{\n\t\t\tx_square = new double[l];\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\tx_square[i] = dot(x[i],x[i]);\n\t\t}\n\t\telse x_square = null;\n\t}\n\n\tstatic double dot(svm_node[] x, svm_node[] y)\n\t{\n\t\tdouble sum = 0;\n\t\tint xlen = x.length;\n\t\tint ylen = y.length;\n\t\tint i = 0;\n\t\tint j = 0;\n\t\twhile(i < xlen && j < ylen)\n\t\t{\n\t\t\tif(x[i].index == y[j].index)\n\t\t\t\tsum += x[i++].value * y[j++].value;\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(x[i].index > y[j].index)\n\t\t\t\t\t++j;\n\t\t\t\telse\n\t\t\t\t\t++i;\n\t\t\t}\n\t\t}\n\t\treturn sum;\n\t}\n\n\tstatic double k_function(svm_node[] x, svm_node[] y,\n\t\t\t\t\tsvm_parameter param)\n\t{\n\t\tswitch(param.kernel_type)\n\t\t{\n\t\t\tcase svm_parameter.LINEAR:\n\t\t\t\treturn dot(x,y);\n\t\t\tcase svm_parameter.POLY:\n\t\t\t\treturn powi(param.gamma*dot(x,y)+param.coef0,param.degree);\n\t\t\tcase svm_parameter.RBF:\n\t\t\t{\n\t\t\t\tdouble sum = 0;\n\t\t\t\tint xlen = x.length;\n\t\t\t\tint ylen = y.length;\n\t\t\t\tint i = 0;\n\t\t\t\tint j = 0;\n\t\t\t\twhile(i < xlen && j < ylen)\n\t\t\t\t{\n\t\t\t\t\tif(x[i].index == y[j].index)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble d = x[i++].value - y[j++].value;\n\t\t\t\t\t\tsum += d*d;\n\t\t\t\t\t}\n\t\t\t\t\telse if(x[i].index > y[j].index)\n\t\t\t\t\t{\n\t\t\t\t\t\tsum += y[j].value * y[j].value;\n\t\t\t\t\t\t++j;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tsum += x[i].value * x[i].value;\n\t\t\t\t\t\t++i;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile(i < xlen)\n\t\t\t\t{\n\t\t\t\t\tsum += x[i].value * x[i].value;\n\t\t\t\t\t++i;\n\t\t\t\t}\n\n\t\t\t\twhile(j < ylen)\n\t\t\t\t{\n\t\t\t\t\tsum += y[j].value * y[j].value;\n\t\t\t\t\t++j;\n\t\t\t\t}\n\n\t\t\t\treturn Math.exp(-param.gamma*sum);\n\t\t\t}\n\t\t\tcase svm_parameter.SIGMOID:\n\t\t\t\treturn Math.tanh(param.gamma*dot(x,y)+param.coef0);\n\t\t\tcase svm_parameter.PRECOMPUTED:\n\t\t\t\treturn\tx[(int)(y[0].value)].value;\n\t\t\tdefault:\n\t\t\t\treturn 0;\t// java\n\t\t}\n\t}\n}\n\n// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918\n// Solves:\n//\n//\tmin 0.5(\\alpha^T Q \\alpha) + p^T \\alpha\n//\n//\t\ty^T \\alpha = \\delta\n//\t\ty_i = +1 or -1\n//\t\t0 <= alpha_i <= Cp for y_i = 1\n//\t\t0 <= alpha_i <= Cn for y_i = -1\n//\n// Given:\n//\n//\tQ, p, y, Cp, Cn, and an initial feasible point \\alpha\n//\tl is the size of vectors and matrices\n//\teps is the stopping tolerance\n//\n// solution will be put in \\alpha, objective value will be put in obj\n//\nclass Solver {\n\tint active_size;\n\tbyte[] y;\n\tdouble[] G;\t\t// gradient of objective function\n\tstatic final byte LOWER_BOUND = 0;\n\tstatic final byte UPPER_BOUND = 1;\n\tstatic final byte FREE = 2;\n\tbyte[] alpha_status;\t// LOWER_BOUND, UPPER_BOUND, FREE\n\tdouble[] alpha;\n\tQMatrix Q;\n\tdouble[] QD;\n\tdouble eps;\n\tdouble Cp,Cn;\n\tdouble[] p;\n\tint[] active_set;\n\tdouble[] G_bar;\t\t// gradient, if we treat free variables as 0\n\tint l;\n\tboolean unshrink;\t// XXX\n\t\n\tstatic final double INF = java.lang.Double.POSITIVE_INFINITY;\n\n\tdouble get_C(int i)\n\t{\n\t\treturn (y[i] > 0)? Cp : Cn;\n\t}\n\tvoid update_alpha_status(int i)\n\t{\n\t\tif(alpha[i] >= get_C(i))\n\t\t\talpha_status[i] = UPPER_BOUND;\n\t\telse if(alpha[i] <= 0)\n\t\t\talpha_status[i] = LOWER_BOUND;\n\t\telse alpha_status[i] = FREE;\n\t}\n\tboolean is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }\n\tboolean is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }\n\tboolean is_free(int i) {  return alpha_status[i] == FREE; }\n\n\t// java: information about solution except alpha,\n\t// because we cannot return multiple values otherwise...\n\tstatic class SolutionInfo {\n\t\tdouble obj;\n\t\tdouble rho;\n\t\tdouble upper_bound_p;\n\t\tdouble upper_bound_n;\n\t\tdouble r;\t// for Solver_NU\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tQ.swap_index(i,j);\n\t\tswap(byte,\ty[i],y[j]);\n\t\tswap(double,\tG[i],G[j]);\n\t\tswap(byte,\talpha_status[i],alpha_status[j]);\n\t\tswap(double,\talpha[i],alpha[j]);\n\t\tswap(double,\tp[i],p[j]);\n\t\tswap(int,\tactive_set[i],active_set[j]);\n\t\tswap(double,\tG_bar[i],G_bar[j]);\n\t}\n\n\tvoid reconstruct_gradient()\n\t{\n\t\t// reconstruct inactive elements of G from G_bar and free variables\n\n\t\tif(active_size == l) return;\n\n\t\tint i,j;\n\t\tint nr_free = 0;\n\n\t\tfor(j=active_size;j<l;j++)\n\t\t\tG[j] = G_bar[j] + p[j];\n\n\t\tfor(j=0;j<active_size;j++)\n\t\t\tif(is_free(j))\n\t\t\t\tnr_free++;\n\n\t\tif(2*nr_free < active_size)\n\t\t\tsvm.info(\"\\nWARNING: using -h 0 may be faster\\n\");\n\n\t\tif (nr_free*l > 2*active_size*(l-active_size))\n\t\t{\n\t\t\tfor(i=active_size;i<l;i++)\n\t\t\t{\n\t\t\t\tQfloat[] Q_i = Q.get_Q(i,active_size);\n\t\t\t\tfor(j=0;j<active_size;j++)\n\t\t\t\t\tif(is_free(j))\n\t\t\t\t\t\tG[i] += alpha[j] * Q_i[j];\n\t\t\t}\t\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor(i=0;i<active_size;i++)\n\t\t\t\tif(is_free(i))\n\t\t\t\t{\n\t\t\t\t\tQfloat[] Q_i = Q.get_Q(i,l);\n\t\t\t\t\tdouble alpha_i = alpha[i];\n\t\t\t\t\tfor(j=active_size;j<l;j++)\n\t\t\t\t\t\tG[j] += alpha_i * Q_i[j];\n\t\t\t\t}\n\t\t}\n\t}\n\n\tvoid Solve(int l, QMatrix Q, double[] p_, byte[] y_,\n\t\t   double[] alpha_, double Cp, double Cn, double eps, SolutionInfo si, int shrinking)\n\t{\n\t\tthis.l = l;\n\t\tthis.Q = Q;\n\t\tQD = Q.get_QD();\n\t\tp = (double[])p_.clone();\n\t\ty = (byte[])y_.clone();\n\t\talpha = (double[])alpha_.clone();\n\t\tthis.Cp = Cp;\n\t\tthis.Cn = Cn;\n\t\tthis.eps = eps;\n\t\tthis.unshrink = false;\n\n\t\t// initialize alpha_status\n\t\t{\n\t\t\talpha_status = new byte[l];\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\tupdate_alpha_status(i);\n\t\t}\n\n\t\t// initialize active set (for shrinking)\n\t\t{\n\t\t\tactive_set = new int[l];\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\tactive_set[i] = i;\n\t\t\tactive_size = l;\n\t\t}\n\n\t\t// initialize gradient\n\t\t{\n\t\t\tG = new double[l];\n\t\t\tG_bar = new double[l];\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tG[i] = p[i];\n\t\t\t\tG_bar[i] = 0;\n\t\t\t}\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tif(!is_lower_bound(i))\n\t\t\t\t{\n\t\t\t\t\tQfloat[] Q_i = Q.get_Q(i,l);\n\t\t\t\t\tdouble alpha_i = alpha[i];\n\t\t\t\t\tint j;\n\t\t\t\t\tfor(j=0;j<l;j++)\n\t\t\t\t\t\tG[j] += alpha_i*Q_i[j];\n\t\t\t\t\tif(is_upper_bound(i))\n\t\t\t\t\t\tfor(j=0;j<l;j++)\n\t\t\t\t\t\t\tG_bar[j] += get_C(i) * Q_i[j];\n\t\t\t\t}\n\t\t}\n\n\t\t// optimization step\n\n\t\tint iter = 0;\n\t\tint max_iter = Math.max(10000000, l>Integer.MAX_VALUE/100 ? Integer.MAX_VALUE : 100*l);\n\t\tint counter = Math.min(l,1000)+1;\n\t\tint[] working_set = new int[2];\n\n\t\twhile(iter < max_iter)\n\t\t{\n\t\t\t// show progress and do shrinking\n\n\t\t\tif(--counter == 0)\n\t\t\t{\n\t\t\t\tcounter = Math.min(l,1000);\n\t\t\t\tif(shrinking!=0) do_shrinking();\n\t\t\t\tsvm.info(\".\");\n\t\t\t}\n\n\t\t\tif(select_working_set(working_set)!=0)\n\t\t\t{\n\t\t\t\t// reconstruct the whole gradient\n\t\t\t\treconstruct_gradient();\n\t\t\t\t// reset active set size and check\n\t\t\t\tactive_size = l;\n\t\t\t\tsvm.info(\"*\");\n\t\t\t\tif(select_working_set(working_set)!=0)\n\t\t\t\t\tbreak;\n\t\t\t\telse\n\t\t\t\t\tcounter = 1;\t// do shrinking next iteration\n\t\t\t}\n\t\t\t\n\t\t\tint i = working_set[0];\n\t\t\tint j = working_set[1];\n\n\t\t\t++iter;\n\n\t\t\t// update alpha[i] and alpha[j], handle bounds carefully\n\n\t\t\tQfloat[] Q_i = Q.get_Q(i,active_size);\n\t\t\tQfloat[] Q_j = Q.get_Q(j,active_size);\n\n\t\t\tdouble C_i = get_C(i);\n\t\t\tdouble C_j = get_C(j);\n\n\t\t\tdouble old_alpha_i = alpha[i];\n\t\t\tdouble old_alpha_j = alpha[j];\n\n\t\t\tif(y[i]!=y[j])\n\t\t\t{\n\t\t\t\tdouble quad_coef = QD[i]+QD[j]+2*Q_i[j];\n\t\t\t\tif (quad_coef <= 0)\n\t\t\t\t\tquad_coef = TAU;\n\t\t\t\tdouble delta = (-G[i]-G[j])/quad_coef;\n\t\t\t\tdouble diff = alpha[i] - alpha[j];\n\t\t\t\talpha[i] += delta;\n\t\t\t\talpha[j] += delta;\n\t\t\t\n\t\t\t\tif(diff > 0)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = 0;\n\t\t\t\t\t\talpha[i] = diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = 0;\n\t\t\t\t\t\talpha[j] = -diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(diff > C_i - C_j)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] > C_i)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = C_i;\n\t\t\t\t\t\talpha[j] = C_i - diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] > C_j)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = C_j;\n\t\t\t\t\t\talpha[i] = C_j + diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble quad_coef = QD[i]+QD[j]-2*Q_i[j];\n\t\t\t\tif (quad_coef <= 0)\n\t\t\t\t\tquad_coef = TAU;\n\t\t\t\tdouble delta = (G[i]-G[j])/quad_coef;\n\t\t\t\tdouble sum = alpha[i] + alpha[j];\n\t\t\t\talpha[i] -= delta;\n\t\t\t\talpha[j] += delta;\n\n\t\t\t\tif(sum > C_i)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] > C_i)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = C_i;\n\t\t\t\t\t\talpha[j] = sum - C_i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = 0;\n\t\t\t\t\t\talpha[i] = sum;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(sum > C_j)\n\t\t\t\t{\n\t\t\t\t\tif(alpha[j] > C_j)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[j] = C_j;\n\t\t\t\t\t\talpha[i] = sum - C_j;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(alpha[i] < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\talpha[i] = 0;\n\t\t\t\t\t\talpha[j] = sum;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// update G\n\n\t\t\tdouble delta_alpha_i = alpha[i] - old_alpha_i;\n\t\t\tdouble delta_alpha_j = alpha[j] - old_alpha_j;\n\n\t\t\tfor(int k=0;k<active_size;k++)\n\t\t\t{\n\t\t\t\tG[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;\n\t\t\t}\n\n\t\t\t// update alpha_status and G_bar\n\n\t\t\t{\n\t\t\t\tboolean ui = is_upper_bound(i);\n\t\t\t\tboolean uj = is_upper_bound(j);\n\t\t\t\tupdate_alpha_status(i);\n\t\t\t\tupdate_alpha_status(j);\n\t\t\t\tint k;\n\t\t\t\tif(ui != is_upper_bound(i))\n\t\t\t\t{\n\t\t\t\t\tQ_i = Q.get_Q(i,l);\n\t\t\t\t\tif(ui)\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] -= C_i * Q_i[k];\n\t\t\t\t\telse\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] += C_i * Q_i[k];\n\t\t\t\t}\n\n\t\t\t\tif(uj != is_upper_bound(j))\n\t\t\t\t{\n\t\t\t\t\tQ_j = Q.get_Q(j,l);\n\t\t\t\t\tif(uj)\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] -= C_j * Q_j[k];\n\t\t\t\t\telse\n\t\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\t\tG_bar[k] += C_j * Q_j[k];\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tif(iter >= max_iter)\n\t\t{\n\t\t\tif(active_size < l)\n\t\t\t{\n\t\t\t\t// reconstruct the whole gradient to calculate objective value\n\t\t\t\treconstruct_gradient();\n\t\t\t\tactive_size = l;\n\t\t\t\tsvm.info(\"*\");\n\t\t\t}\n\t\t\tSystem.err.print(\"\\nWARNING: reaching max number of iterations\\n\");\n\t\t}\n\n\t\t// calculate rho\n\n\t\tsi.rho = calculate_rho();\n\n\t\t// calculate objective value\n\t\t{\n\t\t\tdouble v = 0;\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tv += alpha[i] * (G[i] + p[i]);\n\n\t\t\tsi.obj = v/2;\n\t\t}\n\n\t\t// put back the solution\n\t\t{\n\t\t\tfor(int i=0;i<l;i++)\n\t\t\t\talpha_[active_set[i]] = alpha[i];\n\t\t}\n\n\t\tsi.upper_bound_p = Cp;\n\t\tsi.upper_bound_n = Cn;\n\n\t\tsvm.info(\"\\noptimization finished, #iter = \"+iter+\"\\n\");\n\t}\n\n\t// return 1 if already optimal, return 0 otherwise\n\tint select_working_set(int[] working_set)\n\t{\n\t\t// return i,j such that\n\t\t// i: maximizes -y_i * grad(f)_i, i in I_up(\\alpha)\n\t\t// j: mimimizes the decrease of obj value\n\t\t//    (if quadratic coefficeint <= 0, replace it with tau)\n\t\t//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\\alpha)\n\t\t\n\t\tdouble Gmax = -INF;\n\t\tdouble Gmax2 = -INF;\n\t\tint Gmax_idx = -1;\n\t\tint Gmin_idx = -1;\n\t\tdouble obj_diff_min = INF;\n\t\n\t\tfor(int t=0;t<active_size;t++)\n\t\t\tif(y[t]==+1)\t\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(t))\n\t\t\t\t\tif(-G[t] >= Gmax)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmax = -G[t];\n\t\t\t\t\t\tGmax_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(!is_lower_bound(t))\n\t\t\t\t\tif(G[t] >= Gmax)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmax = G[t];\n\t\t\t\t\t\tGmax_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\n\t\tint i = Gmax_idx;\n\t\tQfloat[] Q_i = null;\n\t\tif(i != -1) // null Q_i not accessed: Gmax=-INF if i=-1\n\t\t\tQ_i = Q.get_Q(i,active_size);\n\t\n\t\tfor(int j=0;j<active_size;j++)\n\t\t{\n\t\t\tif(y[j]==+1)\n\t\t\t{\n\t\t\t\tif (!is_lower_bound(j))\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff=Gmax+G[j];\n\t\t\t\t\tif (G[j] >= Gmax2)\n\t\t\t\t\t\tGmax2 = G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!is_upper_bound(j))\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff= Gmax-G[j];\n\t\t\t\t\tif (-G[j] >= Gmax2)\n\t\t\t\t\t\tGmax2 = -G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(Gmax+Gmax2 < eps)\n\t\t\treturn 1;\n\n\t\tworking_set[0] = Gmax_idx;\n\t\tworking_set[1] = Gmin_idx;\n\t\treturn 0;\n\t}\n\n\tprivate boolean be_shrunk(int i, double Gmax1, double Gmax2)\n\t{\t\n\t\tif(is_upper_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(-G[i] > Gmax1);\n\t\t\telse\n\t\t\t\treturn(-G[i] > Gmax2);\n\t\t}\n\t\telse if(is_lower_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(G[i] > Gmax2);\n\t\t\telse\t\n\t\t\t\treturn(G[i] > Gmax1);\n\t\t}\n\t\telse\n\t\t\treturn(false);\n\t}\n\n\tvoid do_shrinking()\n\t{\n\t\tint i;\n\t\tdouble Gmax1 = -INF;\t\t// max { -y_i * grad(f)_i | i in I_up(\\alpha) }\n\t\tdouble Gmax2 = -INF;\t\t// max { y_i * grad(f)_i | i in I_low(\\alpha) }\n\n\t\t// find maximal violating pair first\n\t\tfor(i=0;i<active_size;i++)\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(i))\t\n\t\t\t\t{\n\t\t\t\t\tif(-G[i] >= Gmax1)\n\t\t\t\t\t\tGmax1 = -G[i];\n\t\t\t\t}\n\t\t\t\tif(!is_lower_bound(i))\n\t\t\t\t{\n\t\t\t\t\tif(G[i] >= Gmax2)\n\t\t\t\t\t\tGmax2 = G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\t\t\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(i))\t\n\t\t\t\t{\n\t\t\t\t\tif(-G[i] >= Gmax2)\n\t\t\t\t\t\tGmax2 = -G[i];\n\t\t\t\t}\n\t\t\t\tif(!is_lower_bound(i))\t\n\t\t\t\t{\n\t\t\t\t\tif(G[i] >= Gmax1)\n\t\t\t\t\t\tGmax1 = G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(unshrink == false && Gmax1 + Gmax2 <= eps*10) \n\t\t{\n\t\t\tunshrink = true;\n\t\t\treconstruct_gradient();\n\t\t\tactive_size = l;\n\t\t}\n\n\t\tfor(i=0;i<active_size;i++)\n\t\t\tif (be_shrunk(i, Gmax1, Gmax2))\n\t\t\t{\n\t\t\t\tactive_size--;\n\t\t\t\twhile (active_size > i)\n\t\t\t\t{\n\t\t\t\t\tif (!be_shrunk(active_size, Gmax1, Gmax2))\n\t\t\t\t\t{\n\t\t\t\t\t\tswap_index(i,active_size);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tactive_size--;\n\t\t\t\t}\n\t\t\t}\n\t}\n\n\tdouble calculate_rho()\n\t{\n\t\tdouble r;\n\t\tint nr_free = 0;\n\t\tdouble ub = INF, lb = -INF, sum_free = 0;\n\t\tfor(int i=0;i<active_size;i++)\n\t\t{\n\t\t\tdouble yG = y[i]*G[i];\n\n\t\t\tif(is_lower_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i] > 0)\n\t\t\t\t\tub = Math.min(ub,yG);\n\t\t\t\telse\n\t\t\t\t\tlb = Math.max(lb,yG);\n\t\t\t}\n\t\t\telse if(is_upper_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i] < 0)\n\t\t\t\t\tub = Math.min(ub,yG);\n\t\t\t\telse\n\t\t\t\t\tlb = Math.max(lb,yG);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++nr_free;\n\t\t\t\tsum_free += yG;\n\t\t\t}\n\t\t}\n\n\t\tif(nr_free>0)\n\t\t\tr = sum_free/nr_free;\n\t\telse\n\t\t\tr = (ub+lb)/2;\n\n\t\treturn r;\n\t}\n\n}\n\n//\n// Solver for nu-svm classification and regression\n//\n// additional constraint: e^T \\alpha = constant\n//\nfinal class Solver_NU extends Solver\n{\n\tprivate SolutionInfo si;\n\n\tvoid Solve(int l, QMatrix Q, double[] p, byte[] y,\n\t\t   double[] alpha, double Cp, double Cn, double eps,\n\t\t   SolutionInfo si, int shrinking)\n\t{\n\t\tthis.si = si;\n\t\tsuper.Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking);\n\t}\n\n\t// return 1 if already optimal, return 0 otherwise\n\tint select_working_set(int[] working_set)\n\t{\n\t\t// return i,j such that y_i = y_j and\n\t\t// i: maximizes -y_i * grad(f)_i, i in I_up(\\alpha)\n\t\t// j: minimizes the decrease of obj value\n\t\t//    (if quadratic coefficeint <= 0, replace it with tau)\n\t\t//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\\alpha)\n\t\n\t\tdouble Gmaxp = -INF;\n\t\tdouble Gmaxp2 = -INF;\n\t\tint Gmaxp_idx = -1;\n\t\n\t\tdouble Gmaxn = -INF;\n\t\tdouble Gmaxn2 = -INF;\n\t\tint Gmaxn_idx = -1;\n\t\n\t\tint Gmin_idx = -1;\n\t\tdouble obj_diff_min = INF;\n\t\n\t\tfor(int t=0;t<active_size;t++)\n\t\t\tif(y[t]==+1)\n\t\t\t{\n\t\t\t\tif(!is_upper_bound(t))\n\t\t\t\t\tif(-G[t] >= Gmaxp)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmaxp = -G[t];\n\t\t\t\t\t\tGmaxp_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(!is_lower_bound(t))\n\t\t\t\t\tif(G[t] >= Gmaxn)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmaxn = G[t];\n\t\t\t\t\t\tGmaxn_idx = t;\n\t\t\t\t\t}\n\t\t\t}\n\t\n\t\tint ip = Gmaxp_idx;\n\t\tint in = Gmaxn_idx;\n\t\tQfloat[] Q_ip = null;\n\t\tQfloat[] Q_in = null;\n\t\tif(ip != -1) // null Q_ip not accessed: Gmaxp=-INF if ip=-1\n\t\t\tQ_ip = Q.get_Q(ip,active_size);\n\t\tif(in != -1)\n\t\t\tQ_in = Q.get_Q(in,active_size);\n\t\n\t\tfor(int j=0;j<active_size;j++)\n\t\t{\n\t\t\tif(y[j]==+1)\n\t\t\t{\n\t\t\t\tif (!is_lower_bound(j))\t\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff=Gmaxp+G[j];\n\t\t\t\t\tif (G[j] >= Gmaxp2)\n\t\t\t\t\t\tGmaxp2 = G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[ip]+QD[j]-2*Q_ip[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!is_upper_bound(j))\n\t\t\t\t{\n\t\t\t\t\tdouble grad_diff=Gmaxn-G[j];\n\t\t\t\t\tif (-G[j] >= Gmaxn2)\n\t\t\t\t\t\tGmaxn2 = -G[j];\n\t\t\t\t\tif (grad_diff > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble obj_diff; \n\t\t\t\t\t\tdouble quad_coef = QD[in]+QD[j]-2*Q_in[j];\n\t\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\t\n\t\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(Math.max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps)\n\t\t\treturn 1;\n\t\n\t\tif(y[Gmin_idx] == +1)\n\t\t\tworking_set[0] = Gmaxp_idx;\n\t\telse\n\t\t\tworking_set[0] = Gmaxn_idx;\n\t\tworking_set[1] = Gmin_idx;\n\t\n\t\treturn 0;\n\t}\n\n\tprivate boolean be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4)\n\t{\n\t\tif(is_upper_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(-G[i] > Gmax1);\n\t\t\telse\t\n\t\t\t\treturn(-G[i] > Gmax4);\n\t\t}\n\t\telse if(is_lower_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\treturn(G[i] > Gmax2);\n\t\t\telse\t\n\t\t\t\treturn(G[i] > Gmax3);\n\t\t}\n\t\telse\n\t\t\treturn(false);\n\t}\n\n\tvoid do_shrinking()\n\t{\n\t\tdouble Gmax1 = -INF;\t// max { -y_i * grad(f)_i | y_i = +1, i in I_up(\\alpha) }\n\t\tdouble Gmax2 = -INF;\t// max { y_i * grad(f)_i | y_i = +1, i in I_low(\\alpha) }\n\t\tdouble Gmax3 = -INF;\t// max { -y_i * grad(f)_i | y_i = -1, i in I_up(\\alpha) }\n\t\tdouble Gmax4 = -INF;\t// max { y_i * grad(f)_i | y_i = -1, i in I_low(\\alpha) }\n \n\t\t// find maximal violating pair first\n\t\tint i;\n\t\tfor(i=0;i<active_size;i++)\n\t\t{\n\t\t\tif(!is_upper_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i]==+1)\n\t\t\t\t{\n\t\t\t\t\tif(-G[i] > Gmax1) Gmax1 = -G[i];\n\t\t\t\t}\n\t\t\t\telse\tif(-G[i] > Gmax4) Gmax4 = -G[i];\n\t\t\t}\n\t\t\tif(!is_lower_bound(i))\n\t\t\t{\n\t\t\t\tif(y[i]==+1)\n\t\t\t\t{\t\n\t\t\t\t\tif(G[i] > Gmax2) Gmax2 = G[i];\n\t\t\t\t}\n\t\t\t\telse\tif(G[i] > Gmax3) Gmax3 = G[i];\n\t\t\t}\n\t\t}\n\n\t\tif(unshrink == false && Math.max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) \n\t\t{\n\t\t\tunshrink = true;\n\t\t\treconstruct_gradient();\n\t\t\tactive_size = l;\n\t\t}\n\n\t\tfor(i=0;i<active_size;i++)\n\t\t\tif (be_shrunk(i, Gmax1, Gmax2, Gmax3, Gmax4))\n\t\t\t{\n\t\t\t\tactive_size--;\n\t\t\t\twhile (active_size > i)\n\t\t\t\t{\n\t\t\t\t\tif (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4))\n\t\t\t\t\t{\n\t\t\t\t\t\tswap_index(i,active_size);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tactive_size--;\n\t\t\t\t}\n\t\t\t}\n\t}\n\t\n\tdouble calculate_rho()\n\t{\n\t\tint nr_free1 = 0,nr_free2 = 0;\n\t\tdouble ub1 = INF, ub2 = INF;\n\t\tdouble lb1 = -INF, lb2 = -INF;\n\t\tdouble sum_free1 = 0, sum_free2 = 0;\n\n\t\tfor(int i=0;i<active_size;i++)\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t{\n\t\t\t\tif(is_lower_bound(i))\n\t\t\t\t\tub1 = Math.min(ub1,G[i]);\n\t\t\t\telse if(is_upper_bound(i))\n\t\t\t\t\tlb1 = Math.max(lb1,G[i]);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++nr_free1;\n\t\t\t\t\tsum_free1 += G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(is_lower_bound(i))\n\t\t\t\t\tub2 = Math.min(ub2,G[i]);\n\t\t\t\telse if(is_upper_bound(i))\n\t\t\t\t\tlb2 = Math.max(lb2,G[i]);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++nr_free2;\n\t\t\t\t\tsum_free2 += G[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdouble r1,r2;\n\t\tif(nr_free1 > 0)\n\t\t\tr1 = sum_free1/nr_free1;\n\t\telse\n\t\t\tr1 = (ub1+lb1)/2;\n\n\t\tif(nr_free2 > 0)\n\t\t\tr2 = sum_free2/nr_free2;\n\t\telse\n\t\t\tr2 = (ub2+lb2)/2;\n\n\t\tsi.r = (r1+r2)/2;\n\t\treturn (r1-r2)/2;\n\t}\n}\n\n//\n// Q matrices for various formulations\n//\nclass SVC_Q extends Kernel\n{\n\tprivate final byte[] y;\n\tprivate final Cache cache;\n\tprivate final double[] QD;\n\n\tSVC_Q(svm_problem prob, svm_parameter param, byte[] y_)\n\t{\n\t\tsuper(prob.l, prob.x, param);\n\t\ty = (byte[])y_.clone();\n\t\tcache = new Cache(prob.l,(long)(param.cache_size*(1<<20)));\n\t\tQD = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tQD[i] = kernel_function(i,i);\n\t}\n\n\tQfloat[] get_Q(int i, int len)\n\t{\n\t\tQfloat[][] data = new Qfloat[1][];\n\t\tint start, j;\n\t\tif((start = cache.get_data(i,data,len)) < len)\n\t\t{\n\t\t\tfor(j=start;j<len;j++)\n\t\t\t\tdata[0][j] = (Qfloat)(y[i]*y[j]*kernel_function(i,j));\n\t\t}\n\t\treturn data[0];\n\t}\n\n\tdouble[] get_QD()\n\t{\n\t\treturn QD;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tcache.swap_index(i,j);\n\t\tsuper.swap_index(i,j);\n\t\tswap(byte,y[i],y[j]);\n\t\tswap(double,QD[i],QD[j]);\n\t}\n}\n\nclass ONE_CLASS_Q extends Kernel\n{\n\tprivate final Cache cache;\n\tprivate final double[] QD;\n\n\tONE_CLASS_Q(svm_problem prob, svm_parameter param)\n\t{\n\t\tsuper(prob.l, prob.x, param);\n\t\tcache = new Cache(prob.l,(long)(param.cache_size*(1<<20)));\n\t\tQD = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tQD[i] = kernel_function(i,i);\n\t}\n\n\tQfloat[] get_Q(int i, int len)\n\t{\n\t\tQfloat[][] data = new Qfloat[1][];\n\t\tint start, j;\n\t\tif((start = cache.get_data(i,data,len)) < len)\n\t\t{\n\t\t\tfor(j=start;j<len;j++)\n\t\t\t\tdata[0][j] = (Qfloat)kernel_function(i,j);\n\t\t}\n\t\treturn data[0];\n\t}\n\n\tdouble[] get_QD()\n\t{\n\t\treturn QD;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tcache.swap_index(i,j);\n\t\tsuper.swap_index(i,j);\n\t\tswap(double,QD[i],QD[j]);\n\t}\n}\n\nclass SVR_Q extends Kernel\n{\n\tprivate final int l;\n\tprivate final Cache cache;\n\tprivate final byte[] sign;\n\tprivate final int[] index;\n\tprivate int next_buffer;\n\tprivate Qfloat[][] buffer;\n\tprivate final double[] QD;\n\n\tSVR_Q(svm_problem prob, svm_parameter param)\n\t{\n\t\tsuper(prob.l, prob.x, param);\n\t\tl = prob.l;\n\t\tcache = new Cache(l,(long)(param.cache_size*(1<<20)));\n\t\tQD = new double[2*l];\n\t\tsign = new byte[2*l];\n\t\tindex = new int[2*l];\n\t\tfor(int k=0;k<l;k++)\n\t\t{\n\t\t\tsign[k] = 1;\n\t\t\tsign[k+l] = -1;\n\t\t\tindex[k] = k;\n\t\t\tindex[k+l] = k;\n\t\t\tQD[k] = kernel_function(k,k);\n\t\t\tQD[k+l] = QD[k];\n\t\t}\n\t\tbuffer = new Qfloat[2][2*l];\n\t\tnext_buffer = 0;\n\t}\n\n\tvoid swap_index(int i, int j)\n\t{\n\t\tswap(byte,sign[i],sign[j]);\n\t\tswap(int,index[i],index[j]);\n\t\tswap(double,QD[i],QD[j]);\n\t}\n\n\tQfloat[] get_Q(int i, int len)\n\t{\n\t\tQfloat[][] data = new Qfloat[1][];\n\t\tint j, real_i = index[i];\n\t\tif(cache.get_data(real_i,data,l) < l)\n\t\t{\n\t\t\tfor(j=0;j<l;j++)\n\t\t\t\tdata[0][j] = (Qfloat)kernel_function(real_i,j);\n\t\t}\n\n\t\t// reorder and copy\n\t\tQfloat buf[] = buffer[next_buffer];\n\t\tnext_buffer = 1 - next_buffer;\n\t\tbyte si = sign[i];\n\t\tfor(j=0;j<len;j++)\n\t\t\tbuf[j] = (Qfloat) si * sign[j] * data[0][index[j]];\n\t\treturn buf;\n\t}\n\n\tdouble[] get_QD()\n\t{\n\t\treturn QD;\n\t}\n}\n\npublic class svm {\n\t//\n\t// construct and solve various formulations\n\t//\n\tpublic static final int LIBSVM_VERSION=319; \n\tpublic static final Random rand = new Random();\n\n\tprivate static svm_print_interface svm_print_stdout = new svm_print_interface()\n\t{\n\t\tpublic void print(String s)\n\t\t{\n\t\t\tSystem.out.print(s);\n\t\t\tSystem.out.flush();\n\t\t}\n\t};\n\n\tprivate static svm_print_interface svm_print_string = svm_print_stdout;\n\n\tstatic void info(String s) \n\t{\n\t\tsvm_print_string.print(s);\n\t}\n\n\tprivate static void solve_c_svc(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si,\n\t\t\t\t\tdouble Cp, double Cn)\n\t{\n\t\tint l = prob.l;\n\t\tdouble[] minus_ones = new double[l];\n\t\tbyte[] y = new byte[l];\n\n\t\tint i;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha[i] = 0;\n\t\t\tminus_ones[i] = -1;\n\t\t\tif(prob.y[i] > 0) y[i] = +1; else y[i] = -1;\n\t\t}\n\n\t\tSolver s = new Solver();\n\t\ts.Solve(l, new SVC_Q(prob,param,y), minus_ones, y,\n\t\t\talpha, Cp, Cn, param.eps, si, param.shrinking);\n\n\t\tdouble sum_alpha=0;\n\t\tfor(i=0;i<l;i++)\n\t\t\tsum_alpha += alpha[i];\n\n\t\tif (Cp==Cn)\n\t\t\tsvm.info(\"nu = \"+sum_alpha/(Cp*prob.l)+\"\\n\");\n\n\t\tfor(i=0;i<l;i++)\n\t\t\talpha[i] *= y[i];\n\t}\n\n\tprivate static void solve_nu_svc(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint i;\n\t\tint l = prob.l;\n\t\tdouble nu = param.nu;\n\n\t\tbyte[] y = new byte[l];\n\n\t\tfor(i=0;i<l;i++)\n\t\t\tif(prob.y[i]>0)\n\t\t\t\ty[i] = +1;\n\t\t\telse\n\t\t\t\ty[i] = -1;\n\n\t\tdouble sum_pos = nu*l/2;\n\t\tdouble sum_neg = nu*l/2;\n\n\t\tfor(i=0;i<l;i++)\n\t\t\tif(y[i] == +1)\n\t\t\t{\n\t\t\t\talpha[i] = Math.min(1.0,sum_pos);\n\t\t\t\tsum_pos -= alpha[i];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\talpha[i] = Math.min(1.0,sum_neg);\n\t\t\t\tsum_neg -= alpha[i];\n\t\t\t}\n\n\t\tdouble[] zeros = new double[l];\n\n\t\tfor(i=0;i<l;i++)\n\t\t\tzeros[i] = 0;\n\n\t\tSolver_NU s = new Solver_NU();\n\t\ts.Solve(l, new SVC_Q(prob,param,y), zeros, y,\n\t\t\talpha, 1.0, 1.0, param.eps, si, param.shrinking);\n\t\tdouble r = si.r;\n\n\t\tsvm.info(\"C = \"+1/r+\"\\n\");\n\n\t\tfor(i=0;i<l;i++)\n\t\t\talpha[i] *= y[i]/r;\n\n\t\tsi.rho /= r;\n\t\tsi.obj /= (r*r);\n\t\tsi.upper_bound_p = 1/r;\n\t\tsi.upper_bound_n = 1/r;\n\t}\n\n\tprivate static void solve_one_class(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint l = prob.l;\n\t\tdouble[] zeros = new double[l];\n\t\tbyte[] ones = new byte[l];\n\t\tint i;\n\n\t\tint n = (int)(param.nu*prob.l);\t// # of alpha's at upper bound\n\n\t\tfor(i=0;i<n;i++)\n\t\t\talpha[i] = 1;\n\t\tif(n<prob.l)\n\t\t\talpha[n] = param.nu * prob.l - n;\n\t\tfor(i=n+1;i<l;i++)\n\t\t\talpha[i] = 0;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tzeros[i] = 0;\n\t\t\tones[i] = 1;\n\t\t}\n\n\t\tSolver s = new Solver();\n\t\ts.Solve(l, new ONE_CLASS_Q(prob,param), zeros, ones,\n\t\t\talpha, 1.0, 1.0, param.eps, si, param.shrinking);\n\t}\n\n\tprivate static void solve_epsilon_svr(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint l = prob.l;\n\t\tdouble[] alpha2 = new double[2*l];\n\t\tdouble[] linear_term = new double[2*l];\n\t\tbyte[] y = new byte[2*l];\n\t\tint i;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha2[i] = 0;\n\t\t\tlinear_term[i] = param.p - prob.y[i];\n\t\t\ty[i] = 1;\n\n\t\t\talpha2[i+l] = 0;\n\t\t\tlinear_term[i+l] = param.p + prob.y[i];\n\t\t\ty[i+l] = -1;\n\t\t}\n\n\t\tSolver s = new Solver();\n\t\ts.Solve(2*l, new SVR_Q(prob,param), linear_term, y,\n\t\t\talpha2, param.C, param.C, param.eps, si, param.shrinking);\n\n\t\tdouble sum_alpha = 0;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha[i] = alpha2[i] - alpha2[i+l];\n\t\t\tsum_alpha += Math.abs(alpha[i]);\n\t\t}\n\t\tsvm.info(\"nu = \"+sum_alpha/(param.C*l)+\"\\n\");\n\t}\n\n\tprivate static void solve_nu_svr(svm_problem prob, svm_parameter param,\n\t\t\t\t\tdouble[] alpha, Solver.SolutionInfo si)\n\t{\n\t\tint l = prob.l;\n\t\tdouble C = param.C;\n\t\tdouble[] alpha2 = new double[2*l];\n\t\tdouble[] linear_term = new double[2*l];\n\t\tbyte[] y = new byte[2*l];\n\t\tint i;\n\n\t\tdouble sum = C * param.nu * l / 2;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\talpha2[i] = alpha2[i+l] = Math.min(sum,C);\n\t\t\tsum -= alpha2[i];\n\t\t\t\n\t\t\tlinear_term[i] = - prob.y[i];\n\t\t\ty[i] = 1;\n\n\t\t\tlinear_term[i+l] = prob.y[i];\n\t\t\ty[i+l] = -1;\n\t\t}\n\n\t\tSolver_NU s = new Solver_NU();\n\t\ts.Solve(2*l, new SVR_Q(prob,param), linear_term, y,\n\t\t\talpha2, C, C, param.eps, si, param.shrinking);\n\n\t\tsvm.info(\"epsilon = \"+(-si.r)+\"\\n\");\n\t\t\n\t\tfor(i=0;i<l;i++)\n\t\t\talpha[i] = alpha2[i] - alpha2[i+l];\n\t}\n\n\t//\n\t// decision_function\n\t//\n\tstatic class decision_function\n\t{\n\t\tdouble[] alpha;\n\t\tdouble rho;\t\n\t};\n\n\tstatic decision_function svm_train_one(\n\t\tsvm_problem prob, svm_parameter param,\n\t\tdouble Cp, double Cn)\n\t{\n\t\tdouble[] alpha = new double[prob.l];\n\t\tSolver.SolutionInfo si = new Solver.SolutionInfo();\n\t\tswitch(param.svm_type)\n\t\t{\n\t\t\tcase svm_parameter.C_SVC:\n\t\t\t\tsolve_c_svc(prob,param,alpha,si,Cp,Cn);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.NU_SVC:\n\t\t\t\tsolve_nu_svc(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.ONE_CLASS:\n\t\t\t\tsolve_one_class(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.EPSILON_SVR:\n\t\t\t\tsolve_epsilon_svr(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t\tcase svm_parameter.NU_SVR:\n\t\t\t\tsolve_nu_svr(prob,param,alpha,si);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tsvm.info(\"obj = \"+si.obj+\", rho = \"+si.rho+\"\\n\");\n\n\t\t// output SVs\n\n\t\tint nSV = 0;\n\t\tint nBSV = 0;\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t{\n\t\t\tif(Math.abs(alpha[i]) > 0)\n\t\t\t{\n\t\t\t\t++nSV;\n\t\t\t\tif(prob.y[i] > 0)\n\t\t\t\t{\n\t\t\t\t\tif(Math.abs(alpha[i]) >= si.upper_bound_p)\n\t\t\t\t\t++nBSV;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(Math.abs(alpha[i]) >= si.upper_bound_n)\n\t\t\t\t\t\t++nBSV;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsvm.info(\"nSV = \"+nSV+\", nBSV = \"+nBSV+\"\\n\");\n\n\t\tdecision_function f = new decision_function();\n\t\tf.alpha = alpha;\n\t\tf.rho = si.rho;\n\t\treturn f;\n\t}\n\n\t// Platt's binary SVM Probablistic Output: an improvement from Lin et al.\n\tprivate static void sigmoid_train(int l, double[] dec_values, double[] labels, \n\t\t\t\t  double[] probAB)\n\t{\n\t\tdouble A, B;\n\t\tdouble prior1=0, prior0 = 0;\n\t\tint i;\n\n\t\tfor (i=0;i<l;i++)\n\t\t\tif (labels[i] > 0) prior1+=1;\n\t\t\telse prior0+=1;\n\t\n\t\tint max_iter=100;\t// Maximal number of iterations\n\t\tdouble min_step=1e-10;\t// Minimal step taken in line search\n\t\tdouble sigma=1e-12;\t// For numerically strict PD of Hessian\n\t\tdouble eps=1e-5;\n\t\tdouble hiTarget=(prior1+1.0)/(prior1+2.0);\n\t\tdouble loTarget=1/(prior0+2.0);\n\t\tdouble[] t= new double[l];\n\t\tdouble fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize;\n\t\tdouble newA,newB,newf,d1,d2;\n\t\tint iter; \n\t\n\t\t// Initial Point and Initial Fun Value\n\t\tA=0.0; B=Math.log((prior0+1.0)/(prior1+1.0));\n\t\tdouble fval = 0.0;\n\n\t\tfor (i=0;i<l;i++)\n\t\t{\n\t\t\tif (labels[i]>0) t[i]=hiTarget;\n\t\t\telse t[i]=loTarget;\n\t\t\tfApB = dec_values[i]*A+B;\n\t\t\tif (fApB>=0)\n\t\t\t\tfval += t[i]*fApB + Math.log(1+Math.exp(-fApB));\n\t\t\telse\n\t\t\t\tfval += (t[i] - 1)*fApB +Math.log(1+Math.exp(fApB));\n\t\t}\n\t\tfor (iter=0;iter<max_iter;iter++)\n\t\t{\n\t\t\t// Update Gradient and Hessian (use H' = H + sigma I)\n\t\t\th11=sigma; // numerically ensures strict PD\n\t\t\th22=sigma;\n\t\t\th21=0.0;g1=0.0;g2=0.0;\n\t\t\tfor (i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tfApB = dec_values[i]*A+B;\n\t\t\t\tif (fApB >= 0)\n\t\t\t\t{\n\t\t\t\t\tp=Math.exp(-fApB)/(1.0+Math.exp(-fApB));\n\t\t\t\t\tq=1.0/(1.0+Math.exp(-fApB));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tp=1.0/(1.0+Math.exp(fApB));\n\t\t\t\t\tq=Math.exp(fApB)/(1.0+Math.exp(fApB));\n\t\t\t\t}\n\t\t\t\td2=p*q;\n\t\t\t\th11+=dec_values[i]*dec_values[i]*d2;\n\t\t\t\th22+=d2;\n\t\t\t\th21+=dec_values[i]*d2;\n\t\t\t\td1=t[i]-p;\n\t\t\t\tg1+=dec_values[i]*d1;\n\t\t\t\tg2+=d1;\n\t\t\t}\n\n\t\t\t// Stopping Criteria\n\t\t\tif (Math.abs(g1)<eps && Math.abs(g2)<eps)\n\t\t\t\tbreak;\n\t\t\t\n\t\t\t// Finding Newton direction: -inv(H') * g\n\t\t\tdet=h11*h22-h21*h21;\n\t\t\tdA=-(h22*g1 - h21 * g2) / det;\n\t\t\tdB=-(-h21*g1+ h11 * g2) / det;\n\t\t\tgd=g1*dA+g2*dB;\n\n\n\t\t\tstepsize = 1;\t\t// Line Search\n\t\t\twhile (stepsize >= min_step)\n\t\t\t{\n\t\t\t\tnewA = A + stepsize * dA;\n\t\t\t\tnewB = B + stepsize * dB;\n\n\t\t\t\t// New function value\n\t\t\t\tnewf = 0.0;\n\t\t\t\tfor (i=0;i<l;i++)\n\t\t\t\t{\n\t\t\t\t\tfApB = dec_values[i]*newA+newB;\n\t\t\t\t\tif (fApB >= 0)\n\t\t\t\t\t\tnewf += t[i]*fApB + Math.log(1+Math.exp(-fApB));\n\t\t\t\t\telse\n\t\t\t\t\t\tnewf += (t[i] - 1)*fApB +Math.log(1+Math.exp(fApB));\n\t\t\t\t}\n\t\t\t\t// Check sufficient decrease\n\t\t\t\tif (newf<fval+0.0001*stepsize*gd)\n\t\t\t\t{\n\t\t\t\t\tA=newA;B=newB;fval=newf;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tstepsize = stepsize / 2.0;\n\t\t\t}\n\t\t\t\n\t\t\tif (stepsize < min_step)\n\t\t\t{\n\t\t\t\tsvm.info(\"Line search fails in two-class probability estimates\\n\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (iter>=max_iter)\n\t\t\tsvm.info(\"Reaching maximal iterations in two-class probability estimates\\n\");\n\t\tprobAB[0]=A;probAB[1]=B;\n\t}\n\n\tprivate static double sigmoid_predict(double decision_value, double A, double B)\n\t{\n\t\tdouble fApB = decision_value*A+B;\n\t\tif (fApB >= 0)\n\t\t\treturn Math.exp(-fApB)/(1.0+Math.exp(-fApB));\n\t\telse\n\t\t\treturn 1.0/(1+Math.exp(fApB)) ;\n\t}\n\n\t// Method 2 from the multiclass_prob paper by Wu, Lin, and Weng\n\tprivate static void multiclass_probability(int k, double[][] r, double[] p)\n\t{\n\t\tint t,j;\n\t\tint iter = 0, max_iter=Math.max(100,k);\n\t\tdouble[][] Q=new double[k][k];\n\t\tdouble[] Qp=new double[k];\n\t\tdouble pQp, eps=0.005/k;\n\t\n\t\tfor (t=0;t<k;t++)\n\t\t{\n\t\t\tp[t]=1.0/k;  // Valid if k = 1\n\t\t\tQ[t][t]=0;\n\t\t\tfor (j=0;j<t;j++)\n\t\t\t{\n\t\t\t\tQ[t][t]+=r[j][t]*r[j][t];\n\t\t\t\tQ[t][j]=Q[j][t];\n\t\t\t}\n\t\t\tfor (j=t+1;j<k;j++)\n\t\t\t{\n\t\t\t\tQ[t][t]+=r[j][t]*r[j][t];\n\t\t\t\tQ[t][j]=-r[j][t]*r[t][j];\n\t\t\t}\n\t\t}\n\t\tfor (iter=0;iter<max_iter;iter++)\n\t\t{\n\t\t\t// stopping condition, recalculate QP,pQP for numerical accuracy\n\t\t\tpQp=0;\n\t\t\tfor (t=0;t<k;t++)\n\t\t\t{\n\t\t\t\tQp[t]=0;\n\t\t\t\tfor (j=0;j<k;j++)\n\t\t\t\t\tQp[t]+=Q[t][j]*p[j];\n\t\t\t\tpQp+=p[t]*Qp[t];\n\t\t\t}\n\t\t\tdouble max_error=0;\n\t\t\tfor (t=0;t<k;t++)\n\t\t\t{\n\t\t\t\tdouble error=Math.abs(Qp[t]-pQp);\n\t\t\t\tif (error>max_error)\n\t\t\t\t\tmax_error=error;\n\t\t\t}\n\t\t\tif (max_error<eps) break;\n\t\t\n\t\t\tfor (t=0;t<k;t++)\n\t\t\t{\n\t\t\t\tdouble diff=(-Qp[t]+pQp)/Q[t][t];\n\t\t\t\tp[t]+=diff;\n\t\t\t\tpQp=(pQp+diff*(diff*Q[t][t]+2*Qp[t]))/(1+diff)/(1+diff);\n\t\t\t\tfor (j=0;j<k;j++)\n\t\t\t\t{\n\t\t\t\t\tQp[j]=(Qp[j]+diff*Q[t][j])/(1+diff);\n\t\t\t\t\tp[j]/=(1+diff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (iter>=max_iter)\n\t\t\tsvm.info(\"Exceeds max_iter in multiclass_prob\\n\");\n\t}\n\n\t// Cross-validation decision values for probability estimates\n\tprivate static void svm_binary_svc_probability(svm_problem prob, svm_parameter param, double Cp, double Cn, double[] probAB)\n\t{\n\t\tint i;\n\t\tint nr_fold = 5;\n\t\tint[] perm = new int[prob.l];\n\t\tdouble[] dec_values = new double[prob.l];\n\n\t\t// random shuffle\n\t\tfor(i=0;i<prob.l;i++) perm[i]=i;\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tint j = i+rand.nextInt(prob.l-i);\n\t\t\tswap(int,perm[i],perm[j]);\n\t\t}\n\t\tfor(i=0;i<nr_fold;i++)\n\t\t{\n\t\t\tint begin = i*prob.l/nr_fold;\n\t\t\tint end = (i+1)*prob.l/nr_fold;\n\t\t\tint j,k;\n\t\t\tsvm_problem subprob = new svm_problem();\n\n\t\t\tsubprob.l = prob.l-(end-begin);\n\t\t\tsubprob.x = new svm_node[subprob.l][];\n\t\t\tsubprob.y = new double[subprob.l];\n\t\t\t\n\t\t\tk=0;\n\t\t\tfor(j=0;j<begin;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tfor(j=end;j<prob.l;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tint p_count=0,n_count=0;\n\t\t\tfor(j=0;j<k;j++)\n\t\t\t\tif(subprob.y[j]>0)\n\t\t\t\t\tp_count++;\n\t\t\t\telse\n\t\t\t\t\tn_count++;\n\t\t\t\n\t\t\tif(p_count==0 && n_count==0)\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\tdec_values[perm[j]] = 0;\n\t\t\telse if(p_count > 0 && n_count == 0)\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\tdec_values[perm[j]] = 1;\n\t\t\telse if(p_count == 0 && n_count > 0)\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\tdec_values[perm[j]] = -1;\n\t\t\telse\n\t\t\t{\n\t\t\t\tsvm_parameter subparam = (svm_parameter)param.clone();\n\t\t\t\tsubparam.probability=0;\n\t\t\t\tsubparam.C=1.0;\n\t\t\t\tsubparam.nr_weight=2;\n\t\t\t\tsubparam.weight_label = new int[2];\n\t\t\t\tsubparam.weight = new double[2];\n\t\t\t\tsubparam.weight_label[0]=+1;\n\t\t\t\tsubparam.weight_label[1]=-1;\n\t\t\t\tsubparam.weight[0]=Cp;\n\t\t\t\tsubparam.weight[1]=Cn;\n\t\t\t\tsvm_model submodel = svm_train(subprob,subparam);\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t{\n\t\t\t\t\tdouble[] dec_value=new double[1];\n\t\t\t\t\tsvm_predict_values(submodel,prob.x[perm[j]],dec_value);\n\t\t\t\t\tdec_values[perm[j]]=dec_value[0];\n\t\t\t\t\t// ensure +1 -1 order; reason not using CV subroutine\n\t\t\t\t\tdec_values[perm[j]] *= submodel.label[0];\n\t\t\t\t}\t\t\n\t\t\t}\n\t\t}\t\t\n\t\tsigmoid_train(prob.l,dec_values,prob.y,probAB);\n\t}\n\n\t// Return parameter of a Laplace distribution \n\tprivate static double svm_svr_probability(svm_problem prob, svm_parameter param)\n\t{\n\t\tint i;\n\t\tint nr_fold = 5;\n\t\tdouble[] ymv = new double[prob.l];\n\t\tdouble mae = 0;\n\n\t\tsvm_parameter newparam = (svm_parameter)param.clone();\n\t\tnewparam.probability = 0;\n\t\tsvm_cross_validation(prob,newparam,nr_fold,ymv);\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tymv[i]=prob.y[i]-ymv[i];\n\t\t\tmae += Math.abs(ymv[i]);\n\t\t}\t\t\n\t\tmae /= prob.l;\n\t\tdouble std=Math.sqrt(2*mae*mae);\n\t\tint count=0;\n\t\tmae=0;\n\t\tfor(i=0;i<prob.l;i++)\n\t\t\tif (Math.abs(ymv[i]) > 5*std) \n\t\t\t\tcount=count+1;\n\t\t\telse \n\t\t\t\tmae+=Math.abs(ymv[i]);\n\t\tmae /= (prob.l-count);\n\t\tsvm.info(\"Prob. model for test data: target value = predicted value + z,\\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma=\"+mae+\"\\n\");\n\t\treturn mae;\n\t}\n\n\t// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data\n\t// perm, length l, must be allocated before calling this subroutine\n\tprivate static void svm_group_classes(svm_problem prob, int[] nr_class_ret, int[][] label_ret, int[][] start_ret, int[][] count_ret, int[] perm)\n\t{\n\t\tint l = prob.l;\n\t\tint max_nr_class = 16;\n\t\tint nr_class = 0;\n\t\tint[] label = new int[max_nr_class];\n\t\tint[] count = new int[max_nr_class];\n\t\tint[] data_label = new int[l];\n\t\tint i;\n\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tint this_label = (int)(prob.y[i]);\n\t\t\tint j;\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t{\n\t\t\t\tif(this_label == label[j])\n\t\t\t\t{\n\t\t\t\t\t++count[j];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata_label[i] = j;\n\t\t\tif(j == nr_class)\n\t\t\t{\n\t\t\t\tif(nr_class == max_nr_class)\n\t\t\t\t{\n\t\t\t\t\tmax_nr_class *= 2;\n\t\t\t\t\tint[] new_data = new int[max_nr_class];\n\t\t\t\t\tSystem.arraycopy(label,0,new_data,0,label.length);\n\t\t\t\t\tlabel = new_data;\n\t\t\t\t\tnew_data = new int[max_nr_class];\n\t\t\t\t\tSystem.arraycopy(count,0,new_data,0,count.length);\n\t\t\t\t\tcount = new_data;\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tlabel[nr_class] = this_label;\n\t\t\t\tcount[nr_class] = 1;\n\t\t\t\t++nr_class;\n\t\t\t}\n\t\t}\n\n\t\t//\n\t\t// Labels are ordered by their first occurrence in the training set. \n\t\t// However, for two-class sets with -1/+1 labels and -1 appears first, \n\t\t// we swap labels to ensure that internally the binary SVM has positive data corresponding to the +1 instances.\n\t\t//\n\t\tif (nr_class == 2 && label[0] == -1 && label[1] == +1)\n\t\t{\n\t\t\tswap(int,label[0],label[1]);\n\t\t\tswap(int,count[0],count[1]);\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tif(data_label[i] == 0)\n\t\t\t\t\tdata_label[i] = 1;\n\t\t\t\telse\n\t\t\t\t\tdata_label[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\tint[] start = new int[nr_class];\n\t\tstart[0] = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tstart[i] = start[i-1]+count[i-1];\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tperm[start[data_label[i]]] = i;\n\t\t\t++start[data_label[i]];\n\t\t}\n\t\tstart[0] = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tstart[i] = start[i-1]+count[i-1];\n\n\t\tnr_class_ret[0] = nr_class;\n\t\tlabel_ret[0] = label;\n\t\tstart_ret[0] = start;\n\t\tcount_ret[0] = count;\n\t}\n\n\t//\n\t// Interface functions\n\t//\n\tpublic static svm_model svm_train(svm_problem prob, svm_parameter param)\n\t{\n\t\tsvm_model model = new svm_model();\n\t\tmodel.param = param;\n\n\t\tif(param.svm_type == svm_parameter.ONE_CLASS ||\n\t\t   param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   param.svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\t// regression or one-class-svm\n\t\t\tmodel.nr_class = 2;\n\t\t\tmodel.label = null;\n\t\t\tmodel.nSV = null;\n\t\t\tmodel.probA = null; model.probB = null;\n\t\t\tmodel.sv_coef = new double[1][];\n\n\t\t\tif(param.probability == 1 &&\n\t\t\t   (param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t\t    param.svm_type == svm_parameter.NU_SVR))\n\t\t\t{\n\t\t\t\tmodel.probA = new double[1];\n\t\t\t\tmodel.probA[0] = svm_svr_probability(prob,param);\n\t\t\t}\n\n\t\t\tdecision_function f = svm_train_one(prob,param,0,0);\n\t\t\tmodel.rho = new double[1];\n\t\t\tmodel.rho[0] = f.rho;\n\n\t\t\tint nSV = 0;\n\t\t\tint i;\n\t\t\tfor(i=0;i<prob.l;i++)\n\t\t\t\tif(Math.abs(f.alpha[i]) > 0) ++nSV;\n\t\t\tmodel.l = nSV;\n\t\t\tmodel.SV = new svm_node[nSV][];\n\t\t\tmodel.sv_coef[0] = new double[nSV];\n\t\t\tmodel.sv_indices = new int[nSV];\n\t\t\tint j = 0;\n\t\t\tfor(i=0;i<prob.l;i++)\n\t\t\t\tif(Math.abs(f.alpha[i]) > 0)\n\t\t\t\t{\n\t\t\t\t\tmodel.SV[j] = prob.x[i];\n\t\t\t\t\tmodel.sv_coef[0][j] = f.alpha[i];\n\t\t\t\t\tmodel.sv_indices[j] = i+1;\n\t\t\t\t\t++j;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// classification\n\t\t\tint l = prob.l;\n\t\t\tint[] tmp_nr_class = new int[1];\n\t\t\tint[][] tmp_label = new int[1][];\n\t\t\tint[][] tmp_start = new int[1][];\n\t\t\tint[][] tmp_count = new int[1][];\t\t\t\n\t\t\tint[] perm = new int[l];\n\n\t\t\t// group training data of the same class\n\t\t\tsvm_group_classes(prob,tmp_nr_class,tmp_label,tmp_start,tmp_count,perm);\n\t\t\tint nr_class = tmp_nr_class[0];\t\t\t\n\t\t\tint[] label = tmp_label[0];\n\t\t\tint[] start = tmp_start[0];\n\t\t\tint[] count = tmp_count[0];\n \t\t\t\n\t\t\tif(nr_class == 1) \n\t\t\t\tsvm.info(\"WARNING: training data in only one class. See README for details.\\n\");\n\t\t\t\n\t\t\tsvm_node[][] x = new svm_node[l][];\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tx[i] = prob.x[perm[i]];\n\n\t\t\t// calculate weighted C\n\n\t\t\tdouble[] weighted_C = new double[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tweighted_C[i] = param.C;\n\t\t\tfor(i=0;i<param.nr_weight;i++)\n\t\t\t{\n\t\t\t\tint j;\n\t\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\t\tif(param.weight_label[i] == label[j])\n\t\t\t\t\t\tbreak;\n\t\t\t\tif(j == nr_class)\n\t\t\t\t\tSystem.err.print(\"WARNING: class label \"+param.weight_label[i]+\" specified in weight is not found\\n\");\n\t\t\t\telse\n\t\t\t\t\tweighted_C[j] *= param.weight[i];\n\t\t\t}\n\n\t\t\t// train k*(k-1)/2 models\n\n\t\t\tboolean[] nonzero = new boolean[l];\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tnonzero[i] = false;\n\t\t\tdecision_function[] f = new decision_function[nr_class*(nr_class-1)/2];\n\n\t\t\tdouble[] probA=null,probB=null;\n\t\t\tif (param.probability == 1)\n\t\t\t{\n\t\t\t\tprobA=new double[nr_class*(nr_class-1)/2];\n\t\t\t\tprobB=new double[nr_class*(nr_class-1)/2];\n\t\t\t}\n\n\t\t\tint p = 0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tsvm_problem sub_prob = new svm_problem();\n\t\t\t\t\tint si = start[i], sj = start[j];\n\t\t\t\t\tint ci = count[i], cj = count[j];\n\t\t\t\t\tsub_prob.l = ci+cj;\n\t\t\t\t\tsub_prob.x = new svm_node[sub_prob.l][];\n\t\t\t\t\tsub_prob.y = new double[sub_prob.l];\n\t\t\t\t\tint k;\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tsub_prob.x[k] = x[si+k];\n\t\t\t\t\t\tsub_prob.y[k] = +1;\n\t\t\t\t\t}\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tsub_prob.x[ci+k] = x[sj+k];\n\t\t\t\t\t\tsub_prob.y[ci+k] = -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(param.probability == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble[] probAB=new double[2];\n\t\t\t\t\t\tsvm_binary_svc_probability(sub_prob,param,weighted_C[i],weighted_C[j],probAB);\n\t\t\t\t\t\tprobA[p]=probAB[0];\n\t\t\t\t\t\tprobB[p]=probAB[1];\n\t\t\t\t\t}\n\n\t\t\t\t\tf[p] = svm_train_one(sub_prob,param,weighted_C[i],weighted_C[j]);\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t\tif(!nonzero[si+k] && Math.abs(f[p].alpha[k]) > 0)\n\t\t\t\t\t\t\tnonzero[si+k] = true;\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t\tif(!nonzero[sj+k] && Math.abs(f[p].alpha[ci+k]) > 0)\n\t\t\t\t\t\t\tnonzero[sj+k] = true;\n\t\t\t\t\t++p;\n\t\t\t\t}\n\n\t\t\t// build output\n\n\t\t\tmodel.nr_class = nr_class;\n\n\t\t\tmodel.label = new int[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tmodel.label[i] = label[i];\n\n\t\t\tmodel.rho = new double[nr_class*(nr_class-1)/2];\n\t\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tmodel.rho[i] = f[i].rho;\n\n\t\t\tif(param.probability == 1)\n\t\t\t{\n\t\t\t\tmodel.probA = new double[nr_class*(nr_class-1)/2];\n\t\t\t\tmodel.probB = new double[nr_class*(nr_class-1)/2];\n\t\t\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\t{\n\t\t\t\t\tmodel.probA[i] = probA[i];\n\t\t\t\t\tmodel.probB[i] = probB[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tmodel.probA=null;\n\t\t\t\tmodel.probB=null;\n\t\t\t}\n\n\t\t\tint nnz = 0;\n\t\t\tint[] nz_count = new int[nr_class];\n\t\t\tmodel.nSV = new int[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t{\n\t\t\t\tint nSV = 0;\n\t\t\t\tfor(int j=0;j<count[i];j++)\n\t\t\t\t\tif(nonzero[start[i]+j])\n\t\t\t\t\t{\n\t\t\t\t\t\t++nSV;\n\t\t\t\t\t\t++nnz;\n\t\t\t\t\t}\n\t\t\t\tmodel.nSV[i] = nSV;\n\t\t\t\tnz_count[i] = nSV;\n\t\t\t}\n\n\t\t\tsvm.info(\"Total nSV = \"+nnz+\"\\n\");\n\n\t\t\tmodel.l = nnz;\n\t\t\tmodel.SV = new svm_node[nnz][];\n\t\t\tmodel.sv_indices = new int[nnz];\n\t\t\tp = 0;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tif(nonzero[i])\n\t\t\t\t{\n\t\t\t\t\tmodel.SV[p] = x[i];\n\t\t\t\t\tmodel.sv_indices[p++] = perm[i] + 1;\n\t\t\t\t}\n\n\t\t\tint[] nz_start = new int[nr_class];\n\t\t\tnz_start[0] = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tnz_start[i] = nz_start[i-1]+nz_count[i-1];\n\n\t\t\tmodel.sv_coef = new double[nr_class-1][];\n\t\t\tfor(i=0;i<nr_class-1;i++)\n\t\t\t\tmodel.sv_coef[i] = new double[nnz];\n\n\t\t\tp = 0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\t// classifier (i,j): coefficients with\n\t\t\t\t\t// i are in sv_coef[j-1][nz_start[i]...],\n\t\t\t\t\t// j are in sv_coef[i][nz_start[j]...]\n\n\t\t\t\t\tint si = start[i];\n\t\t\t\t\tint sj = start[j];\n\t\t\t\t\tint ci = count[i];\n\t\t\t\t\tint cj = count[j];\n\n\t\t\t\t\tint q = nz_start[i];\n\t\t\t\t\tint k;\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t\tif(nonzero[si+k])\n\t\t\t\t\t\t\tmodel.sv_coef[j-1][q++] = f[p].alpha[k];\n\t\t\t\t\tq = nz_start[j];\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t\tif(nonzero[sj+k])\n\t\t\t\t\t\t\tmodel.sv_coef[i][q++] = f[p].alpha[ci+k];\n\t\t\t\t\t++p;\n\t\t\t\t}\n\t\t}\n\t\treturn model;\n\t}\n\t\n\t// Stratified cross validation\n\tpublic static void svm_cross_validation(svm_problem prob, svm_parameter param, int nr_fold, double[] target)\n\t{\n\t\tint i;\n\t\tint[] fold_start = new int[nr_fold+1];\n\t\tint l = prob.l;\n\t\tint[] perm = new int[l];\n\t\t\n\t\t// stratified cv may not give leave-one-out rate\n\t\t// Each class to l folds -> some folds may have zero elements\n\t\tif((param.svm_type == svm_parameter.C_SVC ||\n\t\t    param.svm_type == svm_parameter.NU_SVC) && nr_fold < l)\n\t\t{\n\t\t\tint[] tmp_nr_class = new int[1];\n\t\t\tint[][] tmp_label = new int[1][];\n\t\t\tint[][] tmp_start = new int[1][];\n\t\t\tint[][] tmp_count = new int[1][];\n\n\t\t\tsvm_group_classes(prob,tmp_nr_class,tmp_label,tmp_start,tmp_count,perm);\n\n\t\t\tint nr_class = tmp_nr_class[0];\n\t\t\tint[] start = tmp_start[0];\n\t\t\tint[] count = tmp_count[0];\t\t\n\n\t\t\t// random shuffle and then data grouped by fold using the array perm\n\t\t\tint[] fold_count = new int[nr_fold];\n\t\t\tint c;\n\t\t\tint[] index = new int[l];\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tindex[i]=perm[i];\n\t\t\tfor (c=0; c<nr_class; c++)\n\t\t\t\tfor(i=0;i<count[c];i++)\n\t\t\t\t{\n\t\t\t\t\tint j = i+rand.nextInt(count[c]-i);\n\t\t\t\t\tswap(int,index[start[c]+j],index[start[c]+i]);\n\t\t\t\t}\n\t\t\tfor(i=0;i<nr_fold;i++)\n\t\t\t{\n\t\t\t\tfold_count[i] = 0;\n\t\t\t\tfor (c=0; c<nr_class;c++)\n\t\t\t\t\tfold_count[i]+=(i+1)*count[c]/nr_fold-i*count[c]/nr_fold;\n\t\t\t}\n\t\t\tfold_start[0]=0;\n\t\t\tfor (i=1;i<=nr_fold;i++)\n\t\t\t\tfold_start[i] = fold_start[i-1]+fold_count[i-1];\n\t\t\tfor (c=0; c<nr_class;c++)\n\t\t\t\tfor(i=0;i<nr_fold;i++)\n\t\t\t\t{\n\t\t\t\t\tint begin = start[c]+i*count[c]/nr_fold;\n\t\t\t\t\tint end = start[c]+(i+1)*count[c]/nr_fold;\n\t\t\t\t\tfor(int j=begin;j<end;j++)\n\t\t\t\t\t{\n\t\t\t\t\t\tperm[fold_start[i]] = index[j];\n\t\t\t\t\t\tfold_start[i]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tfold_start[0]=0;\n\t\t\tfor (i=1;i<=nr_fold;i++)\n\t\t\t\tfold_start[i] = fold_start[i-1]+fold_count[i-1];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor(i=0;i<l;i++) perm[i]=i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tint j = i+rand.nextInt(l-i);\n\t\t\t\tswap(int,perm[i],perm[j]);\n\t\t\t}\n\t\t\tfor(i=0;i<=nr_fold;i++)\n\t\t\t\tfold_start[i]=i*l/nr_fold;\n\t\t}\n\n\t\tfor(i=0;i<nr_fold;i++)\n\t\t{\n\t\t\tint begin = fold_start[i];\n\t\t\tint end = fold_start[i+1];\n\t\t\tint j,k;\n\t\t\tsvm_problem subprob = new svm_problem();\n\n\t\t\tsubprob.l = l-(end-begin);\n\t\t\tsubprob.x = new svm_node[subprob.l][];\n\t\t\tsubprob.y = new double[subprob.l];\n\n\t\t\tk=0;\n\t\t\tfor(j=0;j<begin;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tfor(j=end;j<l;j++)\n\t\t\t{\n\t\t\t\tsubprob.x[k] = prob.x[perm[j]];\n\t\t\t\tsubprob.y[k] = prob.y[perm[j]];\n\t\t\t\t++k;\n\t\t\t}\n\t\t\tsvm_model submodel = svm_train(subprob,param);\n\t\t\tif(param.probability==1 &&\n\t\t\t   (param.svm_type == svm_parameter.C_SVC ||\n\t\t\t    param.svm_type == svm_parameter.NU_SVC))\n\t\t\t{\n\t\t\t\tdouble[] prob_estimates= new double[svm_get_nr_class(submodel)];\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\ttarget[perm[j]] = svm_predict_probability(submodel,prob.x[perm[j]],prob_estimates);\n\t\t\t}\n\t\t\telse\n\t\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\t\ttarget[perm[j]] = svm_predict(submodel,prob.x[perm[j]]);\n\t\t}\n\t}\n\n\tpublic static int svm_get_svm_type(svm_model model)\n\t{\n\t\treturn model.param.svm_type;\n\t}\n\n\tpublic static int svm_get_nr_class(svm_model model)\n\t{\n\t\treturn model.nr_class;\n\t}\n\n\tpublic static void svm_get_labels(svm_model model, int[] label)\n\t{\n\t\tif (model.label != null)\n\t\t\tfor(int i=0;i<model.nr_class;i++)\n\t\t\t\tlabel[i] = model.label[i];\n\t}\n\n\tpublic static void svm_get_sv_indices(svm_model model, int[] indices)\n\t{\n\t\tif (model.sv_indices != null)\n\t\t\tfor(int i=0;i<model.l;i++)\n\t\t\t\tindices[i] = model.sv_indices[i];\n\t}\n\n\tpublic static int svm_get_nr_sv(svm_model model)\n\t{\n\t\treturn model.l;\n\t}\n\n\tpublic static double svm_get_svr_probability(svm_model model)\n\t{\n\t\tif ((model.param.svm_type == svm_parameter.EPSILON_SVR || model.param.svm_type == svm_parameter.NU_SVR) &&\n\t\t    model.probA!=null)\n\t\treturn model.probA[0];\n\t\telse\n\t\t{\n\t\t\tSystem.err.print(\"Model doesn't contain information for SVR probability inference\\n\");\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpublic static double svm_predict_values(svm_model model, svm_node[] x, double[] dec_values)\n\t{\n\t\tint i;\n\t\tif(model.param.svm_type == svm_parameter.ONE_CLASS ||\n\t\t   model.param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   model.param.svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\tdouble[] sv_coef = model.sv_coef[0];\n\t\t\tdouble sum = 0;\n\t\t\tfor(i=0;i<model.l;i++)\n\t\t\t\tsum += sv_coef[i] * Kernel.k_function(x,model.SV[i],model.param);\n\t\t\tsum -= model.rho[0];\n\t\t\tdec_values[0] = sum;\n\n\t\t\tif(model.param.svm_type == svm_parameter.ONE_CLASS)\n\t\t\t\treturn (sum>0)?1:-1;\n\t\t\telse\n\t\t\t\treturn sum;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint nr_class = model.nr_class;\n\t\t\tint l = model.l;\n\t\t\n\t\t\tdouble[] kvalue = new double[l];\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t\tkvalue[i] = Kernel.k_function(x,model.SV[i],model.param);\n\n\t\t\tint[] start = new int[nr_class];\n\t\t\tstart[0] = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tstart[i] = start[i-1]+model.nSV[i-1];\n\n\t\t\tint[] vote = new int[nr_class];\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tvote[i] = 0;\n\n\t\t\tint p=0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tdouble sum = 0;\n\t\t\t\t\tint si = start[i];\n\t\t\t\t\tint sj = start[j];\n\t\t\t\t\tint ci = model.nSV[i];\n\t\t\t\t\tint cj = model.nSV[j];\n\t\t\t\t\n\t\t\t\t\tint k;\n\t\t\t\t\tdouble[] coef1 = model.sv_coef[j-1];\n\t\t\t\t\tdouble[] coef2 = model.sv_coef[i];\n\t\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\t\tsum += coef1[si+k] * kvalue[si+k];\n\t\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\t\tsum += coef2[sj+k] * kvalue[sj+k];\n\t\t\t\t\tsum -= model.rho[p];\n\t\t\t\t\tdec_values[p] = sum;\t\t\t\t\t\n\n\t\t\t\t\tif(dec_values[p] > 0)\n\t\t\t\t\t\t++vote[i];\n\t\t\t\t\telse\n\t\t\t\t\t\t++vote[j];\n\t\t\t\t\tp++;\n\t\t\t\t}\n\n\t\t\tint vote_max_idx = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tif(vote[i] > vote[vote_max_idx])\n\t\t\t\t\tvote_max_idx = i;\n\n\t\t\treturn model.label[vote_max_idx];\n\t\t}\n\t}\n\n\tpublic static double svm_predict(svm_model model, svm_node[] x)\n\t{\n\t\tint nr_class = model.nr_class;\n\t\tdouble[] dec_values;\n\t\tif(model.param.svm_type == svm_parameter.ONE_CLASS ||\n\t\t\t\tmodel.param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t\t\tmodel.param.svm_type == svm_parameter.NU_SVR)\n\t\t\tdec_values = new double[1];\n\t\telse\n\t\t\tdec_values = new double[nr_class*(nr_class-1)/2];\n\t\tdouble pred_result = svm_predict_values(model, x, dec_values);\n\t\treturn pred_result;\n\t}\n\n\tpublic static double svm_predict_probability(svm_model model, svm_node[] x, double[] prob_estimates)\n\t{\n\t\tif ((model.param.svm_type == svm_parameter.C_SVC || model.param.svm_type == svm_parameter.NU_SVC) &&\n\t\t    model.probA!=null && model.probB!=null)\n\t\t{\n\t\t\tint i;\n\t\t\tint nr_class = model.nr_class;\n\t\t\tdouble[] dec_values = new double[nr_class*(nr_class-1)/2];\n\t\t\tsvm_predict_values(model, x, dec_values);\n\n\t\t\tdouble min_prob=1e-7;\n\t\t\tdouble[][] pairwise_prob=new double[nr_class][nr_class];\n\t\t\t\n\t\t\tint k=0;\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tpairwise_prob[i][j]=Math.min(Math.max(sigmoid_predict(dec_values[k],model.probA[k],model.probB[k]),min_prob),1-min_prob);\n\t\t\t\t\tpairwise_prob[j][i]=1-pairwise_prob[i][j];\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\tmulticlass_probability(nr_class,pairwise_prob,prob_estimates);\n\n\t\t\tint prob_max_idx = 0;\n\t\t\tfor(i=1;i<nr_class;i++)\n\t\t\t\tif(prob_estimates[i] > prob_estimates[prob_max_idx])\n\t\t\t\t\tprob_max_idx = i;\n\t\t\treturn model.label[prob_max_idx];\n\t\t}\n\t\telse \n\t\t\treturn svm_predict(model, x);\n\t}\n\n\tstatic final String svm_type_table[] =\n\t{\n\t\t\"c_svc\",\"nu_svc\",\"one_class\",\"epsilon_svr\",\"nu_svr\",\n\t};\n\n\tstatic final String kernel_type_table[]=\n\t{\n\t\t\"linear\",\"polynomial\",\"rbf\",\"sigmoid\",\"precomputed\"\n\t};\n\n\tpublic static void svm_save_model(String model_file_name, svm_model model) throws IOException\n\t{\n\t\tDataOutputStream fp = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(model_file_name)));\n\n\t\tsvm_parameter param = model.param;\n\n\t\tfp.writeBytes(\"svm_type \"+svm_type_table[param.svm_type]+\"\\n\");\n\t\tfp.writeBytes(\"kernel_type \"+kernel_type_table[param.kernel_type]+\"\\n\");\n\n\t\tif(param.kernel_type == svm_parameter.POLY)\n\t\t\tfp.writeBytes(\"degree \"+param.degree+\"\\n\");\n\n\t\tif(param.kernel_type == svm_parameter.POLY ||\n\t\t   param.kernel_type == svm_parameter.RBF ||\n\t\t   param.kernel_type == svm_parameter.SIGMOID)\n\t\t\tfp.writeBytes(\"gamma \"+param.gamma+\"\\n\");\n\n\t\tif(param.kernel_type == svm_parameter.POLY ||\n\t\t   param.kernel_type == svm_parameter.SIGMOID)\n\t\t\tfp.writeBytes(\"coef0 \"+param.coef0+\"\\n\");\n\n\t\tint nr_class = model.nr_class;\n\t\tint l = model.l;\n\t\tfp.writeBytes(\"nr_class \"+nr_class+\"\\n\");\n\t\tfp.writeBytes(\"total_sv \"+l+\"\\n\");\n\t\n\t\t{\n\t\t\tfp.writeBytes(\"rho\");\n\t\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.rho[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\t\n\t\tif(model.label != null)\n\t\t{\n\t\t\tfp.writeBytes(\"label\");\n\t\t\tfor(int i=0;i<nr_class;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.label[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tif(model.probA != null) // regression has probA only\n\t\t{\n\t\t\tfp.writeBytes(\"probA\");\n\t\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.probA[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\t\tif(model.probB != null) \n\t\t{\n\t\t\tfp.writeBytes(\"probB\");\n\t\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.probB[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tif(model.nSV != null)\n\t\t{\n\t\t\tfp.writeBytes(\"nr_sv\");\n\t\t\tfor(int i=0;i<nr_class;i++)\n\t\t\t\tfp.writeBytes(\" \"+model.nSV[i]);\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tfp.writeBytes(\"SV\\n\");\n\t\tdouble[][] sv_coef = model.sv_coef;\n\t\tsvm_node[][] SV = model.SV;\n\n\t\tfor(int i=0;i<l;i++)\n\t\t{\n\t\t\tfor(int j=0;j<nr_class-1;j++)\n\t\t\t\tfp.writeBytes(sv_coef[j][i]+\" \");\n\n\t\t\tsvm_node[] p = SV[i];\n\t\t\tif(param.kernel_type == svm_parameter.PRECOMPUTED)\n\t\t\t\tfp.writeBytes(\"0:\"+(int)(p[0].value));\n\t\t\telse\t\n\t\t\t\tfor(int j=0;j<p.length;j++)\n\t\t\t\t\tfp.writeBytes(p[j].index+\":\"+p[j].value+\" \");\n\t\t\tfp.writeBytes(\"\\n\");\n\t\t}\n\n\t\tfp.close();\n\t}\n\n\tprivate static double atof(String s)\n\t{\n\t\treturn Double.valueOf(s).doubleValue();\n\t}\n\n\tprivate static int atoi(String s)\n\t{\n\t\treturn Integer.parseInt(s);\n\t}\n\n\tprivate static boolean read_model_header(BufferedReader fp, svm_model model)\n\t{\n\t\tsvm_parameter param = new svm_parameter();\n\t\tmodel.param = param;\n\t\ttry\n\t\t{\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tString cmd = fp.readLine();\n\t\t\t\tString arg = cmd.substring(cmd.indexOf(' ')+1);\n\n\t\t\t\tif(cmd.startsWith(\"svm_type\"))\n\t\t\t\t{\n\t\t\t\t\tint i;\n\t\t\t\t\tfor(i=0;i<svm_type_table.length;i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(arg.indexOf(svm_type_table[i])!=-1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparam.svm_type=i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(i == svm_type_table.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tSystem.err.print(\"unknown svm type.\\n\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"kernel_type\"))\n\t\t\t\t{\n\t\t\t\t\tint i;\n\t\t\t\t\tfor(i=0;i<kernel_type_table.length;i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(arg.indexOf(kernel_type_table[i])!=-1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparam.kernel_type=i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(i == kernel_type_table.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tSystem.err.print(\"unknown kernel function.\\n\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"degree\"))\n\t\t\t\t\tparam.degree = atoi(arg);\n\t\t\t\telse if(cmd.startsWith(\"gamma\"))\n\t\t\t\t\tparam.gamma = atof(arg);\n\t\t\t\telse if(cmd.startsWith(\"coef0\"))\n\t\t\t\t\tparam.coef0 = atof(arg);\n\t\t\t\telse if(cmd.startsWith(\"nr_class\"))\n\t\t\t\t\tmodel.nr_class = atoi(arg);\n\t\t\t\telse if(cmd.startsWith(\"total_sv\"))\n\t\t\t\t\tmodel.l = atoi(arg);\n\t\t\t\telse if(cmd.startsWith(\"rho\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class * (model.nr_class-1)/2;\n\t\t\t\t\tmodel.rho = new double[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.rho[i] = atof(st.nextToken());\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"label\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class;\n\t\t\t\t\tmodel.label = new int[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.label[i] = atoi(st.nextToken());\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"probA\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class*(model.nr_class-1)/2;\n\t\t\t\t\tmodel.probA = new double[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.probA[i] = atof(st.nextToken());\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"probB\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class*(model.nr_class-1)/2;\n\t\t\t\t\tmodel.probB = new double[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.probB[i] = atof(st.nextToken());\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"nr_sv\"))\n\t\t\t\t{\n\t\t\t\t\tint n = model.nr_class;\n\t\t\t\t\tmodel.nSV = new int[n];\n\t\t\t\t\tStringTokenizer st = new StringTokenizer(arg);\n\t\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t\t\tmodel.nSV[i] = atoi(st.nextToken());\n\t\t\t\t}\n\t\t\t\telse if(cmd.startsWith(\"SV\"))\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSystem.err.print(\"unknown text in model file: [\"+cmd+\"]\\n\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch(Exception e)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static svm_model svm_load_model(String model_file_name) throws IOException\n\t{\n\t\treturn svm_load_model(new BufferedReader(new FileReader(model_file_name)));\n\t}\n\n\tpublic static svm_model svm_load_model(BufferedReader fp) throws IOException\n\t{\n\t\t// read parameters\n\n\t\tsvm_model model = new svm_model();\n\t\tmodel.rho = null;\n\t\tmodel.probA = null;\n\t\tmodel.probB = null;\n\t\tmodel.label = null;\n\t\tmodel.nSV = null;\n\n\t\tif (read_model_header(fp, model) == false)\n\t\t{\n\t\t\tSystem.err.print(\"ERROR: failed to read model\\n\");\n\t\t\treturn null;\n\t\t}\n\n\t\t// read sv_coef and SV\n\n\t\tint m = model.nr_class - 1;\n\t\tint l = model.l;\n\t\tmodel.sv_coef = new double[m][l];\n\t\tmodel.SV = new svm_node[l][];\n\n\t\tfor(int i=0;i<l;i++)\n\t\t{\n\t\t\tString line = fp.readLine();\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\n\t\t\tfor(int k=0;k<m;k++)\n\t\t\t\tmodel.sv_coef[k][i] = atof(st.nextToken());\n\t\t\tint n = st.countTokens()/2;\n\t\t\tmodel.SV[i] = new svm_node[n];\n\t\t\tfor(int j=0;j<n;j++)\n\t\t\t{\n\t\t\t\tmodel.SV[i][j] = new svm_node();\n\t\t\t\tmodel.SV[i][j].index = atoi(st.nextToken());\n\t\t\t\tmodel.SV[i][j].value = atof(st.nextToken());\n\t\t\t}\n\t\t}\n\n\t\tfp.close();\n\t\treturn model;\n\t}\n\n\tpublic static String svm_check_parameter(svm_problem prob, svm_parameter param)\n\t{\n\t\t// svm_type\n\n\t\tint svm_type = param.svm_type;\n\t\tif(svm_type != svm_parameter.C_SVC &&\n\t\t   svm_type != svm_parameter.NU_SVC &&\n\t\t   svm_type != svm_parameter.ONE_CLASS &&\n\t\t   svm_type != svm_parameter.EPSILON_SVR &&\n\t\t   svm_type != svm_parameter.NU_SVR)\n\t\treturn \"unknown svm type\";\n\n\t\t// kernel_type, degree\n\t\n\t\tint kernel_type = param.kernel_type;\n\t\tif(kernel_type != svm_parameter.LINEAR &&\n\t\t   kernel_type != svm_parameter.POLY &&\n\t\t   kernel_type != svm_parameter.RBF &&\n\t\t   kernel_type != svm_parameter.SIGMOID &&\n\t\t   kernel_type != svm_parameter.PRECOMPUTED)\n\t\t\treturn \"unknown kernel type\";\n\n\t\tif(param.gamma < 0)\n\t\t\treturn \"gamma < 0\";\n\n\t\tif(param.degree < 0)\n\t\t\treturn \"degree of polynomial kernel < 0\";\n\n\t\t// cache_size,eps,C,nu,p,shrinking\n\n\t\tif(param.cache_size <= 0)\n\t\t\treturn \"cache_size <= 0\";\n\n\t\tif(param.eps <= 0)\n\t\t\treturn \"eps <= 0\";\n\n\t\tif(svm_type == svm_parameter.C_SVC ||\n\t\t   svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   svm_type == svm_parameter.NU_SVR)\n\t\t\tif(param.C <= 0)\n\t\t\t\treturn \"C <= 0\";\n\n\t\tif(svm_type == svm_parameter.NU_SVC ||\n\t\t   svm_type == svm_parameter.ONE_CLASS ||\n\t\t   svm_type == svm_parameter.NU_SVR)\n\t\t\tif(param.nu <= 0 || param.nu > 1)\n\t\t\t\treturn \"nu <= 0 or nu > 1\";\n\n\t\tif(svm_type == svm_parameter.EPSILON_SVR)\n\t\t\tif(param.p < 0)\n\t\t\t\treturn \"p < 0\";\n\n\t\tif(param.shrinking != 0 &&\n\t\t   param.shrinking != 1)\n\t\t\treturn \"shrinking != 0 and shrinking != 1\";\n\n\t\tif(param.probability != 0 &&\n\t\t   param.probability != 1)\n\t\t\treturn \"probability != 0 and probability != 1\";\n\n\t\tif(param.probability == 1 &&\n\t\t   svm_type == svm_parameter.ONE_CLASS)\n\t\t\treturn \"one-class SVM probability output not supported yet\";\n\t\t\n\t\t// check whether nu-svc is feasible\n\t\n\t\tif(svm_type == svm_parameter.NU_SVC)\n\t\t{\n\t\t\tint l = prob.l;\n\t\t\tint max_nr_class = 16;\n\t\t\tint nr_class = 0;\n\t\t\tint[] label = new int[max_nr_class];\n\t\t\tint[] count = new int[max_nr_class];\n\n\t\t\tint i;\n\t\t\tfor(i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tint this_label = (int)prob.y[i];\n\t\t\t\tint j;\n\t\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\t\tif(this_label == label[j])\n\t\t\t\t\t{\n\t\t\t\t\t\t++count[j];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\tif(j == nr_class)\n\t\t\t\t{\n\t\t\t\t\tif(nr_class == max_nr_class)\n\t\t\t\t\t{\n\t\t\t\t\t\tmax_nr_class *= 2;\n\t\t\t\t\t\tint[] new_data = new int[max_nr_class];\n\t\t\t\t\t\tSystem.arraycopy(label,0,new_data,0,label.length);\n\t\t\t\t\t\tlabel = new_data;\n\t\t\t\t\t\t\n\t\t\t\t\t\tnew_data = new int[max_nr_class];\n\t\t\t\t\t\tSystem.arraycopy(count,0,new_data,0,count.length);\n\t\t\t\t\t\tcount = new_data;\n\t\t\t\t\t}\n\t\t\t\t\tlabel[nr_class] = this_label;\n\t\t\t\t\tcount[nr_class] = 1;\n\t\t\t\t\t++nr_class;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t{\n\t\t\t\tint n1 = count[i];\n\t\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t\t{\n\t\t\t\t\tint n2 = count[j];\n\t\t\t\t\tif(param.nu*(n1+n2)/2 > Math.min(n1,n2))\n\t\t\t\t\t\treturn \"specified nu is infeasible\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic static int svm_check_probability_model(svm_model model)\n\t{\n\t\tif (((model.param.svm_type == svm_parameter.C_SVC || model.param.svm_type == svm_parameter.NU_SVC) &&\n\t\tmodel.probA!=null && model.probB!=null) ||\n\t\t((model.param.svm_type == svm_parameter.EPSILON_SVR || model.param.svm_type == svm_parameter.NU_SVR) &&\n\t\t model.probA!=null))\n\t\t\treturn 1;\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tpublic static void svm_set_print_string_function(svm_print_interface print_func)\n\t{\n\t\tif (print_func == null)\n\t\t\tsvm_print_string = svm_print_stdout;\n\t\telse \n\t\t\tsvm_print_string = print_func;\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_model.java",
    "content": "//\n// svm_model\n//\npackage libsvm;\npublic class svm_model implements java.io.Serializable\n{\n\tpublic svm_parameter param;\t// parameter\n\tpublic int nr_class;\t\t// number of classes, = 2 in regression/one class svm\n\tpublic int l;\t\t\t// total #SV\n\tpublic svm_node[][] SV;\t// SVs (SV[l])\n\tpublic double[][] sv_coef;\t// coefficients for SVs in decision functions (sv_coef[k-1][l])\n\tpublic double[] rho;\t\t// constants in decision functions (rho[k*(k-1)/2])\n\tpublic double[] probA;         // pariwise probability information\n\tpublic double[] probB;\n\tpublic int[] sv_indices;       // sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set\n\n\t// for classification only\n\n\tpublic int[] label;\t\t// label of each class (label[k])\n\tpublic int[] nSV;\t\t// number of SVs for each class (nSV[k])\n\t\t\t\t// nSV[0] + nSV[1] + ... + nSV[k-1] = l\n};\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_node.java",
    "content": "package libsvm;\npublic class svm_node implements java.io.Serializable\n{\n\tpublic int index;\n\tpublic double value;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_parameter.java",
    "content": "package libsvm;\npublic class svm_parameter implements Cloneable,java.io.Serializable\n{\n\t/* svm_type */\n\tpublic static final int C_SVC = 0;\n\tpublic static final int NU_SVC = 1;\n\tpublic static final int ONE_CLASS = 2;\n\tpublic static final int EPSILON_SVR = 3;\n\tpublic static final int NU_SVR = 4;\n\n\t/* kernel_type */\n\tpublic static final int LINEAR = 0;\n\tpublic static final int POLY = 1;\n\tpublic static final int RBF = 2;\n\tpublic static final int SIGMOID = 3;\n\tpublic static final int PRECOMPUTED = 4;\n\n\tpublic int svm_type;\n\tpublic int kernel_type;\n\tpublic int degree;\t// for poly\n\tpublic double gamma;\t// for poly/rbf/sigmoid\n\tpublic double coef0;\t// for poly/sigmoid\n\n\t// these are for training only\n\tpublic double cache_size; // in MB\n\tpublic double eps;\t// stopping criteria\n\tpublic double C;\t// for C_SVC, EPSILON_SVR and NU_SVR\n\tpublic int nr_weight;\t\t// for C_SVC\n\tpublic int[] weight_label;\t// for C_SVC\n\tpublic double[] weight;\t\t// for C_SVC\n\tpublic double nu;\t// for NU_SVC, ONE_CLASS, and NU_SVR\n\tpublic double p;\t// for EPSILON_SVR\n\tpublic int shrinking;\t// use the shrinking heuristics\n\tpublic int probability; // do probability estimates\n\n\tpublic Object clone() \n\t{\n\t\ttry \n\t\t{\n\t\t\treturn super.clone();\n\t\t} catch (CloneNotSupportedException e) \n\t\t{\n\t\t\treturn null;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_print_interface.java",
    "content": "package libsvm;\npublic interface svm_print_interface\n{\n\tpublic void print(String s);\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_problem.java",
    "content": "package libsvm;\npublic class svm_problem implements java.io.Serializable\n{\n\tpublic int l;\n\tpublic double[] y;\n\tpublic svm_node[][] x;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_predict.java",
    "content": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\n\nclass svm_predict {\n\tprivate static svm_print_interface svm_print_null = new svm_print_interface()\n\t{\n\t\tpublic void print(String s) {}\n\t};\n\n\tprivate static svm_print_interface svm_print_stdout = new svm_print_interface()\n\t{\n\t\tpublic void print(String s)\n\t\t{\n\t\t\tSystem.out.print(s);\n\t\t}\n\t};\n\n\tprivate static svm_print_interface svm_print_string = svm_print_stdout;\n\n\tstatic void info(String s) \n\t{\n\t\tsvm_print_string.print(s);\n\t}\n\n\tprivate static double atof(String s)\n\t{\n\t\treturn Double.valueOf(s).doubleValue();\n\t}\n\n\tprivate static int atoi(String s)\n\t{\n\t\treturn Integer.parseInt(s);\n\t}\n\n\tprivate static void predict(BufferedReader input, DataOutputStream output, svm_model model, int predict_probability) throws IOException\n\t{\n\t\tint correct = 0;\n\t\tint total = 0;\n\t\tdouble error = 0;\n\t\tdouble sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;\n\n\t\tint svm_type=svm.svm_get_svm_type(model);\n\t\tint nr_class=svm.svm_get_nr_class(model);\n\t\tdouble[] prob_estimates=null;\n\n\t\tif(predict_probability == 1)\n\t\t{\n\t\t\tif(svm_type == svm_parameter.EPSILON_SVR ||\n\t\t\t   svm_type == svm_parameter.NU_SVR)\n\t\t\t{\n\t\t\t\tsvm_predict.info(\"Prob. model for test data: target value = predicted value + z,\\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma=\"+svm.svm_get_svr_probability(model)+\"\\n\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tint[] labels=new int[nr_class];\n\t\t\t\tsvm.svm_get_labels(model,labels);\n\t\t\t\tprob_estimates = new double[nr_class];\n\t\t\t\toutput.writeBytes(\"labels\");\n\t\t\t\tfor(int j=0;j<nr_class;j++)\n\t\t\t\t\toutput.writeBytes(\" \"+labels[j]);\n\t\t\t\toutput.writeBytes(\"\\n\");\n\t\t\t}\n\t\t}\n\t\twhile(true)\n\t\t{\n\t\t\tString line = input.readLine();\n\t\t\tif(line == null) break;\n\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\n\t\t\tdouble target = atof(st.nextToken());\n\t\t\tint m = st.countTokens()/2;\n\t\t\tsvm_node[] x = new svm_node[m];\n\t\t\tfor(int j=0;j<m;j++)\n\t\t\t{\n\t\t\t\tx[j] = new svm_node();\n\t\t\t\tx[j].index = atoi(st.nextToken());\n\t\t\t\tx[j].value = atof(st.nextToken());\n\t\t\t}\n\n\t\t\tdouble v;\n\t\t\tif (predict_probability==1 && (svm_type==svm_parameter.C_SVC || svm_type==svm_parameter.NU_SVC))\n\t\t\t{\n\t\t\t\tv = svm.svm_predict_probability(model,x,prob_estimates);\n\t\t\t\toutput.writeBytes(v+\" \");\n\t\t\t\tfor(int j=0;j<nr_class;j++)\n\t\t\t\t\toutput.writeBytes(prob_estimates[j]+\" \");\n\t\t\t\toutput.writeBytes(\"\\n\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tv = svm.svm_predict(model,x);\n\t\t\t\toutput.writeBytes(v+\"\\n\");\n\t\t\t}\n\n\t\t\tif(v == target)\n\t\t\t\t++correct;\n\t\t\terror += (v-target)*(v-target);\n\t\t\tsumv += v;\n\t\t\tsumy += target;\n\t\t\tsumvv += v*v;\n\t\t\tsumyy += target*target;\n\t\t\tsumvy += v*target;\n\t\t\t++total;\n\t\t}\n\t\tif(svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\tsvm_predict.info(\"Mean squared error = \"+error/total+\" (regression)\\n\");\n\t\t\tsvm_predict.info(\"Squared correlation coefficient = \"+\n\t\t\t\t ((total*sumvy-sumv*sumy)*(total*sumvy-sumv*sumy))/\n\t\t\t\t ((total*sumvv-sumv*sumv)*(total*sumyy-sumy*sumy))+\n\t\t\t\t \" (regression)\\n\");\n\t\t}\n\t\telse\n\t\t\tsvm_predict.info(\"Accuracy = \"+(double)correct/total*100+\n\t\t\t\t \"% (\"+correct+\"/\"+total+\") (classification)\\n\");\n\t}\n\n\tprivate static void exit_with_help()\n\t{\n\t\tSystem.err.print(\"usage: svm_predict [options] test_file model_file output_file\\n\"\n\t\t+\"options:\\n\"\n\t\t+\"-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); one-class SVM not supported yet\\n\"\n\t\t+\"-q : quiet mode (no outputs)\\n\");\n\t\tSystem.exit(1);\n\t}\n\n\tpublic static void main(String argv[]) throws IOException\n\t{\n\t\tint i, predict_probability=0;\n        \tsvm_print_string = svm_print_stdout;\n\n\t\t// parse options\n\t\tfor(i=0;i<argv.length;i++)\n\t\t{\n\t\t\tif(argv[i].charAt(0) != '-') break;\n\t\t\t++i;\n\t\t\tswitch(argv[i-1].charAt(1))\n\t\t\t{\n\t\t\t\tcase 'b':\n\t\t\t\t\tpredict_probability = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'q':\n\t\t\t\t\tsvm_print_string = svm_print_null;\n\t\t\t\t\ti--;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tSystem.err.print(\"Unknown option: \" + argv[i-1] + \"\\n\");\n\t\t\t\t\texit_with_help();\n\t\t\t}\n\t\t}\n\t\tif(i>=argv.length-2)\n\t\t\texit_with_help();\n\t\ttry \n\t\t{\n\t\t\tBufferedReader input = new BufferedReader(new FileReader(argv[i]));\n\t\t\tDataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(argv[i+2])));\n\t\t\tsvm_model model = svm.svm_load_model(argv[i+1]);\n\t\t\tif (model == null)\n\t\t\t{\n\t\t\t\tSystem.err.print(\"can't open model file \"+argv[i+1]+\"\\n\");\n\t\t\t\tSystem.exit(1);\n\t\t\t}\n\t\t\tif(predict_probability == 1)\n\t\t\t{\n\t\t\t\tif(svm.svm_check_probability_model(model)==0)\n\t\t\t\t{\n\t\t\t\t\tSystem.err.print(\"Model does not support probabiliy estimates\\n\");\n\t\t\t\t\tSystem.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(svm.svm_check_probability_model(model)!=0)\n\t\t\t\t{\n\t\t\t\t\tsvm_predict.info(\"Model supports probability estimates, but disabled in prediction.\\n\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpredict(input,output,model,predict_probability);\n\t\t\tinput.close();\n\t\t\toutput.close();\n\t\t} \n\t\tcatch(FileNotFoundException e) \n\t\t{\n\t\t\texit_with_help();\n\t\t}\n\t\tcatch(ArrayIndexOutOfBoundsException e) \n\t\t{\n\t\t\texit_with_help();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_scale.java",
    "content": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\nimport java.text.DecimalFormat;\n\nclass svm_scale\n{\n\tprivate String line = null;\n\tprivate double lower = -1.0;\n\tprivate double upper = 1.0;\n\tprivate double y_lower;\n\tprivate double y_upper;\n\tprivate boolean y_scaling = false;\n\tprivate double[] feature_max;\n\tprivate double[] feature_min;\n\tprivate double y_max = -Double.MAX_VALUE;\n\tprivate double y_min = Double.MAX_VALUE;\n\tprivate int max_index;\n\tprivate long num_nonzeros = 0;\n\tprivate long new_num_nonzeros = 0;\n\n\tprivate static void exit_with_help()\n\t{\n\t\tSystem.out.print(\n\t\t \"Usage: svm-scale [options] data_filename\\n\"\n\t\t+\"options:\\n\"\n\t\t+\"-l lower : x scaling lower limit (default -1)\\n\"\n\t\t+\"-u upper : x scaling upper limit (default +1)\\n\"\n\t\t+\"-y y_lower y_upper : y scaling limits (default: no y scaling)\\n\"\n\t\t+\"-s save_filename : save scaling parameters to save_filename\\n\"\n\t\t+\"-r restore_filename : restore scaling parameters from restore_filename\\n\"\n\t\t);\n\t\tSystem.exit(1);\n\t}\n\n\tprivate BufferedReader rewind(BufferedReader fp, String filename) throws IOException\n\t{\n\t\tfp.close();\n\t\treturn new BufferedReader(new FileReader(filename));\n\t}\n\n\tprivate void output_target(double value)\n\t{\n\t\tif(y_scaling)\n\t\t{\n\t\t\tif(value == y_min)\n\t\t\t\tvalue = y_lower;\n\t\t\telse if(value == y_max)\n\t\t\t\tvalue = y_upper;\n\t\t\telse\n\t\t\t\tvalue = y_lower + (y_upper-y_lower) *\n\t\t\t\t(value-y_min) / (y_max-y_min);\n\t\t}\n\n\t\tSystem.out.print(value + \" \");\n\t}\n\n\tprivate void output(int index, double value)\n\t{\n\t\t/* skip single-valued attribute */\n\t\tif(feature_max[index] == feature_min[index])\n\t\t\treturn;\n\n\t\tif(value == feature_min[index])\n\t\t\tvalue = lower;\n\t\telse if(value == feature_max[index])\n\t\t\tvalue = upper;\n\t\telse\n\t\t\tvalue = lower + (upper-lower) * \n\t\t\t\t(value-feature_min[index])/\n\t\t\t\t(feature_max[index]-feature_min[index]);\n\n\t\tif(value != 0)\n\t\t{\n\t\t\tSystem.out.print(index + \":\" + value + \" \");\n\t\t\tnew_num_nonzeros++;\n\t\t}\n\t}\n\n\tprivate String readline(BufferedReader fp) throws IOException\n\t{\n\t\tline = fp.readLine();\n\t\treturn line;\n\t}\n\n\tprivate void run(String []argv) throws IOException\n\t{\n\t\tint i,index;\n\t\tBufferedReader fp = null, fp_restore = null;\n\t\tString save_filename = null;\n\t\tString restore_filename = null;\n\t\tString data_filename = null;\n\n\n\t\tfor(i=0;i<argv.length;i++)\n\t\t{\n\t\t\tif (argv[i].charAt(0) != '-')\tbreak;\n\t\t\t++i;\n\t\t\tswitch(argv[i-1].charAt(1))\n\t\t\t{\n\t\t\t\tcase 'l': lower = Double.parseDouble(argv[i]);\tbreak;\n\t\t\t\tcase 'u': upper = Double.parseDouble(argv[i]);\tbreak;\n\t\t\t\tcase 'y':\n\t\t\t\t\t  y_lower = Double.parseDouble(argv[i]);\n\t\t\t\t\t  ++i;\n\t\t\t\t\t  y_upper = Double.parseDouble(argv[i]);\n\t\t\t\t\t  y_scaling = true;\n\t\t\t\t\t  break;\n\t\t\t\tcase 's': save_filename = argv[i];\tbreak;\n\t\t\t\tcase 'r': restore_filename = argv[i];\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t  System.err.println(\"unknown option\");\n\t\t\t\t\t  exit_with_help();\n\t\t\t}\n\t\t}\n\n\t\tif(!(upper > lower) || (y_scaling && !(y_upper > y_lower)))\n\t\t{\n\t\t\tSystem.err.println(\"inconsistent lower/upper specification\");\n\t\t\tSystem.exit(1);\n\t\t}\n\t\tif(restore_filename != null && save_filename != null)\n\t\t{\n\t\t\tSystem.err.println(\"cannot use -r and -s simultaneously\");\n\t\t\tSystem.exit(1);\n\t\t}\n\n\t\tif(argv.length != i+1)\n\t\t\texit_with_help();\n\n\t\tdata_filename = argv[i];\n\t\ttry {\n\t\t\tfp = new BufferedReader(new FileReader(data_filename));\n\t\t} catch (Exception e) {\n\t\t\tSystem.err.println(\"can't open file \" + data_filename);\n\t\t\tSystem.exit(1);\n\t\t}\n\n\t\t/* assumption: min index of attributes is 1 */\n\t\t/* pass 1: find out max index of attributes */\n\t\tmax_index = 0;\n\n\t\tif(restore_filename != null)\n\t\t{\n\t\t\tint idx, c;\n\n\t\t\ttry {\n\t\t\t\tfp_restore = new BufferedReader(new FileReader(restore_filename));\n\t\t\t}\n\t\t\tcatch (Exception e) {\n\t\t\t\tSystem.err.println(\"can't open file \" + restore_filename);\n\t\t\t\tSystem.exit(1);\n\t\t\t}\n\t\t\tif((c = fp_restore.read()) == 'y')\n\t\t\t{\n\t\t\t\tfp_restore.readLine();\n\t\t\t\tfp_restore.readLine();\t\t\n\t\t\t\tfp_restore.readLine();\t\t\n\t\t\t}\n\t\t\tfp_restore.readLine();\n\t\t\tfp_restore.readLine();\n\n\t\t\tString restore_line = null;\n\t\t\twhile((restore_line = fp_restore.readLine())!=null)\n\t\t\t{\n\t\t\t\tStringTokenizer st2 = new StringTokenizer(restore_line);\n\t\t\t\tidx = Integer.parseInt(st2.nextToken());\n\t\t\t\tmax_index = Math.max(max_index, idx);\n\t\t\t}\n\t\t\tfp_restore = rewind(fp_restore, restore_filename);\n\t\t}\n\n\t\twhile (readline(fp) != null)\n\t\t{\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\t\t\tst.nextToken();\n\t\t\twhile(st.hasMoreTokens())\n\t\t\t{\n\t\t\t\tindex = Integer.parseInt(st.nextToken());\n\t\t\t\tmax_index = Math.max(max_index, index);\n\t\t\t\tst.nextToken();\n\t\t\t\tnum_nonzeros++;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tfeature_max = new double[(max_index+1)];\n\t\t\tfeature_min = new double[(max_index+1)];\n\t\t} catch(OutOfMemoryError e) {\n\t\t\tSystem.err.println(\"can't allocate enough memory\");\n\t\t\tSystem.exit(1);\n\t\t}\n\n\t\tfor(i=0;i<=max_index;i++)\n\t\t{\n\t\t\tfeature_max[i] = -Double.MAX_VALUE;\n\t\t\tfeature_min[i] = Double.MAX_VALUE;\n\t\t}\n\n\t\tfp = rewind(fp, data_filename);\n\n\t\t/* pass 2: find out min/max value */\n\t\twhile(readline(fp) != null)\n\t\t{\n\t\t\tint next_index = 1;\n\t\t\tdouble target;\n\t\t\tdouble value;\n\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\t\t\ttarget = Double.parseDouble(st.nextToken());\n\t\t\ty_max = Math.max(y_max, target);\n\t\t\ty_min = Math.min(y_min, target);\n\n\t\t\twhile (st.hasMoreTokens())\n\t\t\t{\n\t\t\t\tindex = Integer.parseInt(st.nextToken());\n\t\t\t\tvalue = Double.parseDouble(st.nextToken());\n\n\t\t\t\tfor (i = next_index; i<index; i++)\n\t\t\t\t{\n\t\t\t\t\tfeature_max[i] = Math.max(feature_max[i], 0);\n\t\t\t\t\tfeature_min[i] = Math.min(feature_min[i], 0);\n\t\t\t\t}\n\n\t\t\t\tfeature_max[index] = Math.max(feature_max[index], value);\n\t\t\t\tfeature_min[index] = Math.min(feature_min[index], value);\n\t\t\t\tnext_index = index + 1;\n\t\t\t}\n\n\t\t\tfor(i=next_index;i<=max_index;i++)\n\t\t\t{\n\t\t\t\tfeature_max[i] = Math.max(feature_max[i], 0);\n\t\t\t\tfeature_min[i] = Math.min(feature_min[i], 0);\n\t\t\t}\n\t\t}\n\n\t\tfp = rewind(fp, data_filename);\n\n\t\t/* pass 2.5: save/restore feature_min/feature_max */\n\t\tif(restore_filename != null)\n\t\t{\n\t\t\t// fp_restore rewinded in finding max_index \n\t\t\tint idx, c;\n\t\t\tdouble fmin, fmax;\n\n\t\t\tfp_restore.mark(2);\t\t\t\t// for reset\n\t\t\tif((c = fp_restore.read()) == 'y')\n\t\t\t{\n\t\t\t\tfp_restore.readLine();\t\t// pass the '\\n' after 'y'\n\t\t\t\tStringTokenizer st = new StringTokenizer(fp_restore.readLine());\n\t\t\t\ty_lower = Double.parseDouble(st.nextToken());\n\t\t\t\ty_upper = Double.parseDouble(st.nextToken());\n\t\t\t\tst = new StringTokenizer(fp_restore.readLine());\n\t\t\t\ty_min = Double.parseDouble(st.nextToken());\n\t\t\t\ty_max = Double.parseDouble(st.nextToken());\n\t\t\t\ty_scaling = true;\n\t\t\t}\n\t\t\telse\n\t\t\t\tfp_restore.reset();\n\n\t\t\tif(fp_restore.read() == 'x') {\n\t\t\t\tfp_restore.readLine();\t\t// pass the '\\n' after 'x'\n\t\t\t\tStringTokenizer st = new StringTokenizer(fp_restore.readLine());\n\t\t\t\tlower = Double.parseDouble(st.nextToken());\n\t\t\t\tupper = Double.parseDouble(st.nextToken());\n\t\t\t\tString restore_line = null;\n\t\t\t\twhile((restore_line = fp_restore.readLine())!=null)\n\t\t\t\t{\n\t\t\t\t\tStringTokenizer st2 = new StringTokenizer(restore_line);\n\t\t\t\t\tidx = Integer.parseInt(st2.nextToken());\n\t\t\t\t\tfmin = Double.parseDouble(st2.nextToken());\n\t\t\t\t\tfmax = Double.parseDouble(st2.nextToken());\n\t\t\t\t\tif (idx <= max_index)\n\t\t\t\t\t{\n\t\t\t\t\t\tfeature_min[idx] = fmin;\n\t\t\t\t\t\tfeature_max[idx] = fmax;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfp_restore.close();\n\t\t}\n\n\t\tif(save_filename != null)\n\t\t{\n\t\t\tFormatter formatter = new Formatter(new StringBuilder());\n\t\t\tBufferedWriter fp_save = null;\n\n\t\t\ttry {\n\t\t\t\tfp_save = new BufferedWriter(new FileWriter(save_filename));\n\t\t\t} catch(IOException e) {\n\t\t\t\tSystem.err.println(\"can't open file \" + save_filename);\n\t\t\t\tSystem.exit(1);\n\t\t\t}\n\n\t\t\tif(y_scaling)\n\t\t\t{\n\t\t\t\tformatter.format(\"y\\n\");\n\t\t\t\tformatter.format(\"%.16g %.16g\\n\", y_lower, y_upper);\n\t\t\t\tformatter.format(\"%.16g %.16g\\n\", y_min, y_max);\n\t\t\t}\n\t\t\tformatter.format(\"x\\n\");\n\t\t\tformatter.format(\"%.16g %.16g\\n\", lower, upper);\n\t\t\tfor(i=1;i<=max_index;i++)\n\t\t\t{\n\t\t\t\tif(feature_min[i] != feature_max[i]) \n\t\t\t\t\tformatter.format(\"%d %.16g %.16g\\n\", i, feature_min[i], feature_max[i]);\n\t\t\t}\n\t\t\tfp_save.write(formatter.toString());\n\t\t\tfp_save.close();\n\t\t}\n\n\t\t/* pass 3: scale */\n\t\twhile(readline(fp) != null)\n\t\t{\n\t\t\tint next_index = 1;\n\t\t\tdouble target;\n\t\t\tdouble value;\n\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\t\t\ttarget = Double.parseDouble(st.nextToken());\n\t\t\toutput_target(target);\n\t\t\twhile(st.hasMoreElements())\n\t\t\t{\n\t\t\t\tindex = Integer.parseInt(st.nextToken());\n\t\t\t\tvalue = Double.parseDouble(st.nextToken());\n\t\t\t\tfor (i = next_index; i<index; i++)\n\t\t\t\t\toutput(i, 0);\n\t\t\t\toutput(index, value);\n\t\t\t\tnext_index = index + 1;\n\t\t\t}\n\n\t\t\tfor(i=next_index;i<= max_index;i++)\n\t\t\t\toutput(i, 0);\n\t\t\tSystem.out.print(\"\\n\");\n\t\t}\n\t\tif (new_num_nonzeros > num_nonzeros)\n\t\t\tSystem.err.print(\n\t\t\t \"WARNING: original #nonzeros \" + num_nonzeros+\"\\n\"\n\t\t\t+\"         new      #nonzeros \" + new_num_nonzeros+\"\\n\"\n\t\t\t+\"Use -l 0 if many original feature values are zeros\\n\");\n\n\t\tfp.close();\n\t}\n\n\tpublic static void main(String argv[]) throws IOException\n\t{\n\t\tsvm_scale s = new svm_scale();\n\t\ts.run(argv);\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_toy.java",
    "content": "import libsvm.*;\nimport java.applet.*;\nimport java.awt.*;\nimport java.util.*;\nimport java.awt.event.*;\nimport java.io.*;\n\npublic class svm_toy extends Applet {\n\n\tstatic final String DEFAULT_PARAM=\"-t 2 -c 100\";\n\tint XLEN;\n\tint YLEN;\n\n\t// off-screen buffer\n\n\tImage buffer;\n\tGraphics buffer_gc;\n\n\t// pre-allocated colors\n\n\tfinal static Color colors[] =\n\t{\n\t  new Color(0,0,0),\n\t  new Color(0,120,120),\n\t  new Color(120,120,0),\n\t  new Color(120,0,120),\n\t  new Color(0,200,200),\n\t  new Color(200,200,0),\n\t  new Color(200,0,200)\n\t};\n\n\tclass point {\n\t\tpoint(double x, double y, byte value)\n\t\t{\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.value = value;\n\t\t}\n\t\tdouble x, y;\n\t\tbyte value;\n\t}\n\n\tVector<point> point_list = new Vector<point>();\n\tbyte current_value = 1;\n\n\tpublic void init()\n\t{\n\t\tsetSize(getSize());\n\n\t\tfinal Button button_change = new Button(\"Change\");\n\t\tButton button_run = new Button(\"Run\");\n\t\tButton button_clear = new Button(\"Clear\");\n\t\tButton button_save = new Button(\"Save\");\n\t\tButton button_load = new Button(\"Load\");\n\t\tfinal TextField input_line = new TextField(DEFAULT_PARAM);\n\n\t\tBorderLayout layout = new BorderLayout();\n\t\tthis.setLayout(layout);\n\n\t\tPanel p = new Panel();\n\t\tGridBagLayout gridbag = new GridBagLayout();\n\t\tp.setLayout(gridbag);\n\n\t\tGridBagConstraints c = new GridBagConstraints();\n\t\tc.fill = GridBagConstraints.HORIZONTAL;\n\t\tc.weightx = 1;\n\t\tc.gridwidth = 1;\n\t\tgridbag.setConstraints(button_change,c);\n\t\tgridbag.setConstraints(button_run,c);\n\t\tgridbag.setConstraints(button_clear,c);\n\t\tgridbag.setConstraints(button_save,c);\n\t\tgridbag.setConstraints(button_load,c);\n\t\tc.weightx = 5;\n\t\tc.gridwidth = 5;\n\t\tgridbag.setConstraints(input_line,c);\n\n\t\tbutton_change.setBackground(colors[current_value]);\n\n\t\tp.add(button_change);\n\t\tp.add(button_run);\n\t\tp.add(button_clear);\n\t\tp.add(button_save);\n\t\tp.add(button_load);\n\t\tp.add(input_line);\n\t\tthis.add(p,BorderLayout.SOUTH);\n\n\t\tbutton_change.addActionListener(new ActionListener()\n\t\t{ public void actionPerformed (ActionEvent e)\n\t\t  { button_change_clicked(); button_change.setBackground(colors[current_value]); }});\n\n\t\tbutton_run.addActionListener(new ActionListener()\n\t\t{ public void actionPerformed (ActionEvent e)\n\t\t  { button_run_clicked(input_line.getText()); }});\n\n\t\tbutton_clear.addActionListener(new ActionListener()\n\t\t{ public void actionPerformed (ActionEvent e)\n\t\t  { button_clear_clicked(); }});\n\n\t\tbutton_save.addActionListener(new ActionListener()\n\t\t{ public void actionPerformed (ActionEvent e)\n\t\t  { button_save_clicked(input_line.getText()); }});\n\n\t\tbutton_load.addActionListener(new ActionListener()\n\t\t{ public void actionPerformed (ActionEvent e)\n\t\t  { button_load_clicked(); }});\n\n\t\tinput_line.addActionListener(new ActionListener()\n\t\t{ public void actionPerformed (ActionEvent e)\n\t\t  { button_run_clicked(input_line.getText()); }});\n\n\t\tthis.enableEvents(AWTEvent.MOUSE_EVENT_MASK);\n\t}\n\n\tvoid draw_point(point p)\n\t{\n\t\tColor c = colors[p.value+3];\n\n\t\tGraphics window_gc = getGraphics();\n\t\tbuffer_gc.setColor(c);\n\t\tbuffer_gc.fillRect((int)(p.x*XLEN),(int)(p.y*YLEN),4,4);\n\t\twindow_gc.setColor(c);\n\t\twindow_gc.fillRect((int)(p.x*XLEN),(int)(p.y*YLEN),4,4);\n\t}\n\n\tvoid clear_all()\n\t{\n\t\tpoint_list.removeAllElements();\n\t\tif(buffer != null)\n\t\t{\n\t\t\tbuffer_gc.setColor(colors[0]);\n\t\t\tbuffer_gc.fillRect(0,0,XLEN,YLEN);\n\t\t}\n\t\trepaint();\n\t}\n\n\tvoid draw_all_points()\n\t{\n\t\tint n = point_list.size();\n\t\tfor(int i=0;i<n;i++)\n\t\t\tdraw_point(point_list.elementAt(i));\n\t}\n\n\tvoid button_change_clicked()\n\t{\n\t\t++current_value;\n\t\tif(current_value > 3) current_value = 1;\n\t}\n\n\tprivate static double atof(String s)\n\t{\n\t\treturn Double.valueOf(s).doubleValue();\n\t}\n\n\tprivate static int atoi(String s)\n\t{\n\t\treturn Integer.parseInt(s);\n\t}\n\n\tvoid button_run_clicked(String args)\n\t{\n\t\t// guard\n\t\tif(point_list.isEmpty()) return;\n\n\t\tsvm_parameter param = new svm_parameter();\n\n\t\t// default values\n\t\tparam.svm_type = svm_parameter.C_SVC;\n\t\tparam.kernel_type = svm_parameter.RBF;\n\t\tparam.degree = 3;\n\t\tparam.gamma = 0;\n\t\tparam.coef0 = 0;\n\t\tparam.nu = 0.5;\n\t\tparam.cache_size = 40;\n\t\tparam.C = 1;\n\t\tparam.eps = 1e-3;\n\t\tparam.p = 0.1;\n\t\tparam.shrinking = 1;\n\t\tparam.probability = 0;\n\t\tparam.nr_weight = 0;\n\t\tparam.weight_label = new int[0];\n\t\tparam.weight = new double[0];\n\n\t\t// parse options\n\t\tStringTokenizer st = new StringTokenizer(args);\n\t\tString[] argv = new String[st.countTokens()];\n\t\tfor(int i=0;i<argv.length;i++)\n\t\t\targv[i] = st.nextToken();\n\n\t\tfor(int i=0;i<argv.length;i++)\n\t\t{\n\t\t\tif(argv[i].charAt(0) != '-') break;\n\t\t\tif(++i>=argv.length)\n\t\t\t{\n\t\t\t\tSystem.err.print(\"unknown option\\n\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tswitch(argv[i-1].charAt(1))\n\t\t\t{\n\t\t\t\tcase 's':\n\t\t\t\t\tparam.svm_type = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tparam.kernel_type = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'd':\n\t\t\t\t\tparam.degree = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'g':\n\t\t\t\t\tparam.gamma = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tparam.coef0 = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tparam.nu = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'm':\n\t\t\t\t\tparam.cache_size = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c':\n\t\t\t\t\tparam.C = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'e':\n\t\t\t\t\tparam.eps = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'p':\n\t\t\t\t\tparam.p = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'h':\n\t\t\t\t\tparam.shrinking = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\t\tparam.probability = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'w':\n\t\t\t\t\t++param.nr_weight;\n\t\t\t\t\t{\n\t\t\t\t\t\tint[] old = param.weight_label;\n\t\t\t\t\t\tparam.weight_label = new int[param.nr_weight];\n\t\t\t\t\t\tSystem.arraycopy(old,0,param.weight_label,0,param.nr_weight-1);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble[] old = param.weight;\n\t\t\t\t\t\tparam.weight = new double[param.nr_weight];\n\t\t\t\t\t\tSystem.arraycopy(old,0,param.weight,0,param.nr_weight-1);\n\t\t\t\t\t}\n\n\t\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(argv[i-1].substring(2));\n\t\t\t\t\tparam.weight[param.nr_weight-1] = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tSystem.err.print(\"unknown option\\n\");\n\t\t\t}\n\t\t}\n\n\t\t// build problem\n\t\tsvm_problem prob = new svm_problem();\n\t\tprob.l = point_list.size();\n\t\tprob.y = new double[prob.l];\n\n\t\tif(param.kernel_type == svm_parameter.PRECOMPUTED)\n\t\t{\n\t\t}\n\t\telse if(param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t\tparam.svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\tif(param.gamma == 0) param.gamma = 1;\n\t\t\tprob.x = new svm_node[prob.l][1];\n\t\t\tfor(int i=0;i<prob.l;i++)\n\t\t\t{\n\t\t\t\tpoint p = point_list.elementAt(i);\n\t\t\t\tprob.x[i][0] = new svm_node();\n\t\t\t\tprob.x[i][0].index = 1;\n\t\t\t\tprob.x[i][0].value = p.x;\n\t\t\t\tprob.y[i] = p.y;\n\t\t\t}\n\n\t\t\t// build model & classify\n\t\t\tsvm_model model = svm.svm_train(prob, param);\n\t\t\tsvm_node[] x = new svm_node[1];\n\t\t\tx[0] = new svm_node();\n\t\t\tx[0].index = 1;\n\t\t\tint[] j = new int[XLEN];\n\n\t\t\tGraphics window_gc = getGraphics();\n\t\t\tfor (int i = 0; i < XLEN; i++)\n\t\t\t{\n\t\t\t\tx[0].value = (double) i / XLEN;\n\t\t\t\tj[i] = (int)(YLEN*svm.svm_predict(model, x));\n\t\t\t}\n\t\t\t\n\t\t\tbuffer_gc.setColor(colors[0]);\n\t\t\tbuffer_gc.drawLine(0,0,0,YLEN-1);\n\t\t\twindow_gc.setColor(colors[0]);\n\t\t\twindow_gc.drawLine(0,0,0,YLEN-1);\n\t\t\t\n\t\t\tint p = (int)(param.p * YLEN);\n\t\t\tfor(int i=1;i<XLEN;i++)\n\t\t\t{\n\t\t\t\tbuffer_gc.setColor(colors[0]);\n\t\t\t\tbuffer_gc.drawLine(i,0,i,YLEN-1);\n\t\t\t\twindow_gc.setColor(colors[0]);\n\t\t\t\twindow_gc.drawLine(i,0,i,YLEN-1);\n\n\t\t\t\tbuffer_gc.setColor(colors[5]);\n\t\t\t\twindow_gc.setColor(colors[5]);\n\t\t\t\tbuffer_gc.drawLine(i-1,j[i-1],i,j[i]);\n\t\t\t\twindow_gc.drawLine(i-1,j[i-1],i,j[i]);\n\n\t\t\t\tif(param.svm_type == svm_parameter.EPSILON_SVR)\n\t\t\t\t{\n\t\t\t\t\tbuffer_gc.setColor(colors[2]);\n\t\t\t\t\twindow_gc.setColor(colors[2]);\n\t\t\t\t\tbuffer_gc.drawLine(i-1,j[i-1]+p,i,j[i]+p);\n\t\t\t\t\twindow_gc.drawLine(i-1,j[i-1]+p,i,j[i]+p);\n\n\t\t\t\t\tbuffer_gc.setColor(colors[2]);\n\t\t\t\t\twindow_gc.setColor(colors[2]);\n\t\t\t\t\tbuffer_gc.drawLine(i-1,j[i-1]-p,i,j[i]-p);\n\t\t\t\t\twindow_gc.drawLine(i-1,j[i-1]-p,i,j[i]-p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(param.gamma == 0) param.gamma = 0.5;\n\t\t\tprob.x = new svm_node [prob.l][2];\n\t\t\tfor(int i=0;i<prob.l;i++)\n\t\t\t{\n\t\t\t\tpoint p = point_list.elementAt(i);\n\t\t\t\tprob.x[i][0] = new svm_node();\n\t\t\t\tprob.x[i][0].index = 1;\n\t\t\t\tprob.x[i][0].value = p.x;\n\t\t\t\tprob.x[i][1] = new svm_node();\n\t\t\t\tprob.x[i][1].index = 2;\n\t\t\t\tprob.x[i][1].value = p.y;\n\t\t\t\tprob.y[i] = p.value;\n\t\t\t}\n\n\t\t\t// build model & classify\n\t\t\tsvm_model model = svm.svm_train(prob, param);\n\t\t\tsvm_node[] x = new svm_node[2];\n\t\t\tx[0] = new svm_node();\n\t\t\tx[1] = new svm_node();\n\t\t\tx[0].index = 1;\n\t\t\tx[1].index = 2;\n\n\t\t\tGraphics window_gc = getGraphics();\n\t\t\tfor (int i = 0; i < XLEN; i++)\n\t\t\t\tfor (int j = 0; j < YLEN ; j++) {\n\t\t\t\t\tx[0].value = (double) i / XLEN;\n\t\t\t\t\tx[1].value = (double) j / YLEN;\n\t\t\t\t\tdouble d = svm.svm_predict(model, x);\n\t\t\t\t\tif (param.svm_type == svm_parameter.ONE_CLASS && d<0) d=2;\n\t\t\t\t\tbuffer_gc.setColor(colors[(int)d]);\n\t\t\t\t\twindow_gc.setColor(colors[(int)d]);\n\t\t\t\t\tbuffer_gc.drawLine(i,j,i,j);\n\t\t\t\t\twindow_gc.drawLine(i,j,i,j);\n\t\t\t}\n\t\t}\n\n\t\tdraw_all_points();\n\t}\n\n\tvoid button_clear_clicked()\n\t{\n\t\tclear_all();\n\t}\n\n\tvoid button_save_clicked(String args)\n\t{\n\t\tFileDialog dialog = new FileDialog(new Frame(),\"Save\",FileDialog.SAVE);\n\t\tdialog.setVisible(true);\n\t\tString filename = dialog.getDirectory() + dialog.getFile();\n\t\tif (filename == null) return;\n\t\ttry {\n\t\t\tDataOutputStream fp = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));\n\n\t\t\tint svm_type = svm_parameter.C_SVC;\n\t\t\tint svm_type_idx = args.indexOf(\"-s \");\n\t\t\tif(svm_type_idx != -1)\n\t\t\t{\n\t\t\t\tStringTokenizer svm_str_st = new StringTokenizer(args.substring(svm_type_idx+2).trim());\n\t\t\t\tsvm_type = atoi(svm_str_st.nextToken());\n\t\t\t}\n\n\t\t\tint n = point_list.size();\n\t\t\tif(svm_type == svm_parameter.EPSILON_SVR || svm_type == svm_parameter.NU_SVR)\n\t\t\t{\n\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t{\n\t\t\t\t\tpoint p = point_list.elementAt(i);\n\t\t\t\t\tfp.writeBytes(p.y+\" 1:\"+p.x+\"\\n\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\t{\n\t\t\t\t\tpoint p = point_list.elementAt(i);\n\t\t\t\t\tfp.writeBytes(p.value+\" 1:\"+p.x+\" 2:\"+p.y+\"\\n\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfp.close();\n\t\t} catch (IOException e) { System.err.print(e); }\n\t}\n\n\tvoid button_load_clicked()\n\t{\n\t\tFileDialog dialog = new FileDialog(new Frame(),\"Load\",FileDialog.LOAD);\n\t\tdialog.setVisible(true);\n\t\tString filename = dialog.getDirectory() + dialog.getFile();\n\t\tif (filename == null) return;\n\t\tclear_all();\n\t\ttry {\n\t\t\tBufferedReader fp = new BufferedReader(new FileReader(filename));\n\t\t\tString line;\n\t\t\twhile((line = fp.readLine()) != null)\n\t\t\t{\n\t\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\t\t\t\tif(st.countTokens() == 5)\n\t\t\t\t{\n\t\t\t\t\tbyte value = (byte)atoi(st.nextToken());\n\t\t\t\t\tst.nextToken();\n\t\t\t\t\tdouble x = atof(st.nextToken());\n\t\t\t\t\tst.nextToken();\n\t\t\t\t\tdouble y = atof(st.nextToken());\n\t\t\t\t\tpoint_list.addElement(new point(x,y,value));\n\t\t\t\t}\n\t\t\t\telse if(st.countTokens() == 3)\n\t\t\t\t{\n\t\t\t\t\tdouble y = atof(st.nextToken());\n\t\t\t\t\tst.nextToken();\n\t\t\t\t\tdouble x = atof(st.nextToken());\n\t\t\t\t\tpoint_list.addElement(new point(x,y,current_value));\n\t\t\t\t}else\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tfp.close();\n\t\t} catch (IOException e) { System.err.print(e); }\n\t\tdraw_all_points();\n\t}\n\t\n\tprotected void processMouseEvent(MouseEvent e)\n\t{\n\t\tif(e.getID() == MouseEvent.MOUSE_PRESSED)\n\t\t{\n\t\t\tif(e.getX() >= XLEN || e.getY() >= YLEN) return;\n\t\t\tpoint p = new point((double)e.getX()/XLEN,\n\t\t\t\t\t    (double)e.getY()/YLEN,\n\t\t\t\t\t    current_value);\n\t\t\tpoint_list.addElement(p);\n\t\t\tdraw_point(p);\n\t\t}\n\t}\n\n\tpublic void paint(Graphics g)\n\t{\n\t\t// create buffer first time\n\t\tif(buffer == null) {\n\t\t\tbuffer = this.createImage(XLEN,YLEN);\n\t\t\tbuffer_gc = buffer.getGraphics();\n\t\t\tbuffer_gc.setColor(colors[0]);\n\t\t\tbuffer_gc.fillRect(0,0,XLEN,YLEN);\n\t\t}\n\t\tg.drawImage(buffer,0,0,this);\n\t}\n\n\tpublic Dimension getPreferredSize() { return new Dimension(XLEN,YLEN+50); }\n\n\tpublic void setSize(Dimension d) { setSize(d.width,d.height); }\n\tpublic void setSize(int w,int h) {\n\t\tsuper.setSize(w,h);\n\t\tXLEN = w;\n\t\tYLEN = h-50;\n\t\tclear_all();\n\t}\n\n\tpublic static void main(String[] argv)\n\t{\n\t\tnew AppletFrame(\"svm_toy\",new svm_toy(),500,500+50);\n\t}\n}\n\nclass AppletFrame extends Frame {\n\tAppletFrame(String title, Applet applet, int width, int height)\n\t{\n\t\tsuper(title);\n\t\tthis.addWindowListener(new WindowAdapter() {\n\t\t\tpublic void windowClosing(WindowEvent e) {\n\t\t\t\tSystem.exit(0);\n\t\t\t}\n\t\t});\n\t\tapplet.init();\n\t\tapplet.setSize(width,height);\n\t\tapplet.start();\n\t\tthis.add(applet);\n\t\tthis.pack();\n\t\tthis.setVisible(true);\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_train.java",
    "content": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\n\nclass svm_train {\n\tprivate svm_parameter param;\t\t// set by parse_command_line\n\tprivate svm_problem prob;\t\t// set by read_problem\n\tprivate svm_model model;\n\tprivate String input_file_name;\t\t// set by parse_command_line\n\tprivate String model_file_name;\t\t// set by parse_command_line\n\tprivate String error_msg;\n\tprivate int cross_validation;\n\tprivate int nr_fold;\n\n\tprivate static svm_print_interface svm_print_null = new svm_print_interface()\n\t{\n\t\tpublic void print(String s) {}\n\t};\n\n\tprivate static void exit_with_help()\n\t{\n\t\tSystem.out.print(\n\t\t \"Usage: svm_train [options] training_set_file [model_file]\\n\"\n\t\t+\"options:\\n\"\n\t\t+\"-s svm_type : set type of SVM (default 0)\\n\"\n\t\t+\"\t0 -- C-SVC\t\t(multi-class classification)\\n\"\n\t\t+\"\t1 -- nu-SVC\t\t(multi-class classification)\\n\"\n\t\t+\"\t2 -- one-class SVM\\n\"\n\t\t+\"\t3 -- epsilon-SVR\t(regression)\\n\"\n\t\t+\"\t4 -- nu-SVR\t\t(regression)\\n\"\n\t\t+\"-t kernel_type : set type of kernel function (default 2)\\n\"\n\t\t+\"\t0 -- linear: u'*v\\n\"\n\t\t+\"\t1 -- polynomial: (gamma*u'*v + coef0)^degree\\n\"\n\t\t+\"\t2 -- radial basis function: exp(-gamma*|u-v|^2)\\n\"\n\t\t+\"\t3 -- sigmoid: tanh(gamma*u'*v + coef0)\\n\"\n\t\t+\"\t4 -- precomputed kernel (kernel values in training_set_file)\\n\"\n\t\t+\"-d degree : set degree in kernel function (default 3)\\n\"\n\t\t+\"-g gamma : set gamma in kernel function (default 1/num_features)\\n\"\n\t\t+\"-r coef0 : set coef0 in kernel function (default 0)\\n\"\n\t\t+\"-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)\\n\"\n\t\t+\"-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)\\n\"\n\t\t+\"-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\\n\"\n\t\t+\"-m cachesize : set cache memory size in MB (default 100)\\n\"\n\t\t+\"-e epsilon : set tolerance of termination criterion (default 0.001)\\n\"\n\t\t+\"-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)\\n\"\n\t\t+\"-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)\\n\"\n\t\t+\"-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)\\n\"\n\t\t+\"-v n : n-fold cross validation mode\\n\"\n\t\t+\"-q : quiet mode (no outputs)\\n\"\n\t\t);\n\t\tSystem.exit(1);\n\t}\n\n\tprivate void do_cross_validation()\n\t{\n\t\tint i;\n\t\tint total_correct = 0;\n\t\tdouble total_error = 0;\n\t\tdouble sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;\n\t\tdouble[] target = new double[prob.l];\n\n\t\tsvm.svm_cross_validation(prob,param,nr_fold,target);\n\t\tif(param.svm_type == svm_parameter.EPSILON_SVR ||\n\t\t   param.svm_type == svm_parameter.NU_SVR)\n\t\t{\n\t\t\tfor(i=0;i<prob.l;i++)\n\t\t\t{\n\t\t\t\tdouble y = prob.y[i];\n\t\t\t\tdouble v = target[i];\n\t\t\t\ttotal_error += (v-y)*(v-y);\n\t\t\t\tsumv += v;\n\t\t\t\tsumy += y;\n\t\t\t\tsumvv += v*v;\n\t\t\t\tsumyy += y*y;\n\t\t\t\tsumvy += v*y;\n\t\t\t}\n\t\t\tSystem.out.print(\"Cross Validation Mean squared error = \"+total_error/prob.l+\"\\n\");\n\t\t\tSystem.out.print(\"Cross Validation Squared correlation coefficient = \"+\n\t\t\t\t((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/\n\t\t\t\t((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))+\"\\n\"\n\t\t\t\t);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor(i=0;i<prob.l;i++)\n\t\t\t\tif(target[i] == prob.y[i])\n\t\t\t\t\t++total_correct;\n\t\t\tSystem.out.print(\"Cross Validation Accuracy = \"+100.0*total_correct/prob.l+\"%\\n\");\n\t\t}\n\t}\n\t\n\tprivate void run(String argv[]) throws IOException\n\t{\n\t\tparse_command_line(argv);\n\t\tread_problem();\n\t\terror_msg = svm.svm_check_parameter(prob,param);\n\n\t\tif(error_msg != null)\n\t\t{\n\t\t\tSystem.err.print(\"ERROR: \"+error_msg+\"\\n\");\n\t\t\tSystem.exit(1);\n\t\t}\n\n\t\tif(cross_validation != 0)\n\t\t{\n\t\t\tdo_cross_validation();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmodel = svm.svm_train(prob,param);\n\t\t\tsvm.svm_save_model(model_file_name,model);\n\t\t}\n\t}\n\n\tpublic static void main(String argv[]) throws IOException\n\t{\n\t\tsvm_train t = new svm_train();\n\t\tt.run(argv);\n\t}\n\n\tprivate static double atof(String s)\n\t{\n\t\tdouble d = Double.valueOf(s).doubleValue();\n\t\tif (Double.isNaN(d) || Double.isInfinite(d))\n\t\t{\n\t\t\tSystem.err.print(\"NaN or Infinity in input\\n\");\n\t\t\tSystem.exit(1);\n\t\t}\n\t\treturn(d);\n\t}\n\n\tprivate static int atoi(String s)\n\t{\n\t\treturn Integer.parseInt(s);\n\t}\n\n\tprivate void parse_command_line(String argv[])\n\t{\n\t\tint i;\n\t\tsvm_print_interface print_func = null;\t// default printing to stdout\n\n\t\tparam = new svm_parameter();\n\t\t// default values\n\t\tparam.svm_type = svm_parameter.C_SVC;\n\t\tparam.kernel_type = svm_parameter.RBF;\n\t\tparam.degree = 3;\n\t\tparam.gamma = 0;\t// 1/num_features\n\t\tparam.coef0 = 0;\n\t\tparam.nu = 0.5;\n\t\tparam.cache_size = 100;\n\t\tparam.C = 1;\n\t\tparam.eps = 1e-3;\n\t\tparam.p = 0.1;\n\t\tparam.shrinking = 1;\n\t\tparam.probability = 0;\n\t\tparam.nr_weight = 0;\n\t\tparam.weight_label = new int[0];\n\t\tparam.weight = new double[0];\n\t\tcross_validation = 0;\n\n\t\t// parse options\n\t\tfor(i=0;i<argv.length;i++)\n\t\t{\n\t\t\tif(argv[i].charAt(0) != '-') break;\n\t\t\tif(++i>=argv.length)\n\t\t\t\texit_with_help();\n\t\t\tswitch(argv[i-1].charAt(1))\n\t\t\t{\n\t\t\t\tcase 's':\n\t\t\t\t\tparam.svm_type = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tparam.kernel_type = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'd':\n\t\t\t\t\tparam.degree = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'g':\n\t\t\t\t\tparam.gamma = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tparam.coef0 = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tparam.nu = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'm':\n\t\t\t\t\tparam.cache_size = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c':\n\t\t\t\t\tparam.C = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'e':\n\t\t\t\t\tparam.eps = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'p':\n\t\t\t\t\tparam.p = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'h':\n\t\t\t\t\tparam.shrinking = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\t\tparam.probability = atoi(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'q':\n\t\t\t\t\tprint_func = svm_print_null;\n\t\t\t\t\ti--;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'v':\n\t\t\t\t\tcross_validation = 1;\n\t\t\t\t\tnr_fold = atoi(argv[i]);\n\t\t\t\t\tif(nr_fold < 2)\n\t\t\t\t\t{\n\t\t\t\t\t\tSystem.err.print(\"n-fold cross validation: n must >= 2\\n\");\n\t\t\t\t\t\texit_with_help();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'w':\n\t\t\t\t\t++param.nr_weight;\n\t\t\t\t\t{\n\t\t\t\t\t\tint[] old = param.weight_label;\n\t\t\t\t\t\tparam.weight_label = new int[param.nr_weight];\n\t\t\t\t\t\tSystem.arraycopy(old,0,param.weight_label,0,param.nr_weight-1);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble[] old = param.weight;\n\t\t\t\t\t\tparam.weight = new double[param.nr_weight];\n\t\t\t\t\t\tSystem.arraycopy(old,0,param.weight,0,param.nr_weight-1);\n\t\t\t\t\t}\n\n\t\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(argv[i-1].substring(2));\n\t\t\t\t\tparam.weight[param.nr_weight-1] = atof(argv[i]);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tSystem.err.print(\"Unknown option: \" + argv[i-1] + \"\\n\");\n\t\t\t\t\texit_with_help();\n\t\t\t}\n\t\t}\n\n\t\tsvm.svm_set_print_string_function(print_func);\n\n\t\t// determine filenames\n\n\t\tif(i>=argv.length)\n\t\t\texit_with_help();\n\n\t\tinput_file_name = argv[i];\n\n\t\tif(i<argv.length-1)\n\t\t\tmodel_file_name = argv[i+1];\n\t\telse\n\t\t{\n\t\t\tint p = argv[i].lastIndexOf('/');\n\t\t\t++p;\t// whew...\n\t\t\tmodel_file_name = argv[i].substring(p)+\".model\";\n\t\t}\n\t}\n\n\t// read in a problem (in svmlight format)\n\n\tprivate void read_problem() throws IOException\n\t{\n\t\tBufferedReader fp = new BufferedReader(new FileReader(input_file_name));\n\t\tVector<Double> vy = new Vector<Double>();\n\t\tVector<svm_node[]> vx = new Vector<svm_node[]>();\n\t\tint max_index = 0;\n\n\t\twhile(true)\n\t\t{\n\t\t\tString line = fp.readLine();\n\t\t\tif(line == null) break;\n\n\t\t\tStringTokenizer st = new StringTokenizer(line,\" \\t\\n\\r\\f:\");\n\n\t\t\tvy.addElement(atof(st.nextToken()));\n\t\t\tint m = st.countTokens()/2;\n\t\t\tsvm_node[] x = new svm_node[m];\n\t\t\tfor(int j=0;j<m;j++)\n\t\t\t{\n\t\t\t\tx[j] = new svm_node();\n\t\t\t\tx[j].index = atoi(st.nextToken());\n\t\t\t\tx[j].value = atof(st.nextToken());\n\t\t\t}\n\t\t\tif(m>0) max_index = Math.max(max_index, x[m-1].index);\n\t\t\tvx.addElement(x);\n\t\t}\n\n\t\tprob = new svm_problem();\n\t\tprob.l = vy.size();\n\t\tprob.x = new svm_node[prob.l][];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tprob.x[i] = vx.elementAt(i);\n\t\tprob.y = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tprob.y[i] = vy.elementAt(i);\n\n\t\tif(param.gamma == 0 && max_index > 0)\n\t\t\tparam.gamma = 1.0/max_index;\n\n\t\tif(param.kernel_type == svm_parameter.PRECOMPUTED)\n\t\t\tfor(int i=0;i<prob.l;i++)\n\t\t\t{\n\t\t\t\tif (prob.x[i][0].index != 0)\n\t\t\t\t{\n\t\t\t\t\tSystem.err.print(\"Wrong kernel matrix: first column must be 0:sample_serial_number\\n\");\n\t\t\t\t\tSystem.exit(1);\n\t\t\t\t}\n\t\t\t\tif ((int)prob.x[i][0].value <= 0 || (int)prob.x[i][0].value > max_index)\n\t\t\t\t{\n\t\t\t\t\tSystem.err.print(\"Wrong input format: sample_serial_number out of range\\n\");\n\t\t\t\t\tSystem.exit(1);\n\t\t\t\t}\n\t\t\t}\n\n\t\tfp.close();\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/java/test_applet.html",
    "content": "<APPLET code=\"svm_toy.class\" archive=\"libsvm.jar\" width=300 height=350></APPLET>\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/Makefile",
    "content": "# This Makefile is used under Linux\n\nMATLABDIR ?= /usr/local/matlab\n# for Mac\n# MATLABDIR ?= /opt/local/matlab\n\nCXX ?= g++\n#CXX = g++-4.1\nCFLAGS = -Wall -Wconversion -O3 -fPIC -I$(MATLABDIR)/extern/include -I..\n\nMEX = $(MATLABDIR)/bin/mex\nMEX_OPTION = CC=\"$(CXX)\" CXX=\"$(CXX)\" CFLAGS=\"$(CFLAGS)\" CXXFLAGS=\"$(CFLAGS)\"\n# comment the following line if you use MATLAB on 32-bit computer\nMEX_OPTION += -largeArrayDims\nMEX_EXT = $(shell $(MATLABDIR)/bin/mexext)\n\nall:\tmatlab\n\nmatlab:\tbinary\n\noctave:\n\t@echo \"please type make under Octave\"\n\nbinary: svmpredict.$(MEX_EXT) svmtrain.$(MEX_EXT) libsvmread.$(MEX_EXT) libsvmwrite.$(MEX_EXT)\n\nsvmpredict.$(MEX_EXT):     svmpredict.c ../svm.h ../svm.o svm_model_matlab.o\n\t$(MEX) $(MEX_OPTION) svmpredict.c ../svm.o svm_model_matlab.o\n\nsvmtrain.$(MEX_EXT):       svmtrain.c ../svm.h ../svm.o svm_model_matlab.o\n\t$(MEX) $(MEX_OPTION) svmtrain.c ../svm.o svm_model_matlab.o\n\nlibsvmread.$(MEX_EXT):\tlibsvmread.c\n\t$(MEX) $(MEX_OPTION) libsvmread.c\n\nlibsvmwrite.$(MEX_EXT):\tlibsvmwrite.c\n\t$(MEX) $(MEX_OPTION) libsvmwrite.c\n\nsvm_model_matlab.o:     svm_model_matlab.c ../svm.h\n\t$(CXX) $(CFLAGS) -c svm_model_matlab.c\n\n../svm.o: ../svm.cpp ../svm.h\n\tmake -C .. svm.o\n\nclean:\n\trm -f *~ *.o *.mex* *.obj ../svm.o\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/README",
    "content": "-----------------------------------------\n--- MATLAB/OCTAVE interface of LIBSVM ---\n-----------------------------------------\n\nTable of Contents\n=================\n\n- Introduction\n- Installation\n- Usage\n- Returned Model Structure\n- Other Utilities\n- Examples\n- Additional Information\n\n\nIntroduction\n============\n\nThis tool provides a simple interface to LIBSVM, a library for support vector\nmachines (http://www.csie.ntu.edu.tw/~cjlin/libsvm). It is very easy to use as\nthe usage and the way of specifying parameters are the same as that of LIBSVM.\n\nInstallation\n============\n\nOn Windows systems, pre-built binary files are already in the \ndirectory '..\\windows', so no need to conduct installation. Now we \nprovide binary files only for 64bit MATLAB on Windows. If you would \nlike to re-build the package, please rely on the following steps.\n\nWe recommend using make.m on both MATLAB and OCTAVE. Just type 'make'\nto build 'libsvmread.mex', 'libsvmwrite.mex', 'svmtrain.mex', and\n'svmpredict.mex'.\n\nOn MATLAB or Octave:\n\n        >> make\n\nIf make.m does not work on MATLAB (especially for Windows), try 'mex\n-setup' to choose a suitable compiler for mex. Make sure your compiler\nis accessible and workable. Then type 'make' to start the\ninstallation.\n\nExample:\n\n\tmatlab>> mex -setup\n\t(ps: MATLAB will show the following messages to setup default compiler.)\n\tPlease choose your compiler for building external interface (MEX) files:\n\tWould you like mex to locate installed compilers [y]/n? y\n\tSelect a compiler:\n\t[1] Microsoft Visual C/C++ version 7.1 in C:\\Program Files\\Microsoft Visual Studio\n\t[0] None\n\tCompiler: 1\n\tPlease verify your choices:\n\tCompiler: Microsoft Visual C/C++ 7.1\n\tLocation: C:\\Program Files\\Microsoft Visual Studio\n\tAre these correct?([y]/n): y\n\n\tmatlab>> make\n\nOn Unix systems, if neither make.m nor 'mex -setup' works, please use\nMakefile and type 'make' in a command window. Note that we assume \nyour MATLAB is installed in '/usr/local/matlab'. If not, please change \nMATLABDIR in Makefile.\n\nExample:\n        linux> make\n\nTo use octave, type 'make octave':\n\nExample:\n\tlinux> make octave\n\nFor a list of supported/compatible compilers for MATLAB, please check\nthe following page:\n\nhttp://www.mathworks.com/support/compilers/current_release/\n\nUsage\n=====\n\nmatlab> model = svmtrain(training_label_vector, training_instance_matrix [, 'libsvm_options']);\n\n        -training_label_vector:\n            An m by 1 vector of training labels (type must be double).\n        -training_instance_matrix:\n            An m by n matrix of m training instances with n features.\n            It can be dense or sparse (type must be double).\n        -libsvm_options:\n            A string of training options in the same format as that of LIBSVM.\n\nmatlab> [predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);\nmatlab> [predicted_label] = svmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);\n\n        -testing_label_vector:\n            An m by 1 vector of prediction labels. If labels of test\n            data are unknown, simply use any random values. (type must be double)\n        -testing_instance_matrix:\n            An m by n matrix of m testing instances with n features.\n            It can be dense or sparse. (type must be double)\n        -model:\n            The output of svmtrain.\n        -libsvm_options:\n            A string of testing options in the same format as that of LIBSVM.\n\nReturned Model Structure\n========================\n\nThe 'svmtrain' function returns a model which can be used for future\nprediction.  It is a structure and is organized as [Parameters, nr_class,\ntotalSV, rho, Label, ProbA, ProbB, nSV, sv_coef, SVs]:\n\n        -Parameters: parameters\n        -nr_class: number of classes; = 2 for regression/one-class svm\n        -totalSV: total #SV\n        -rho: -b of the decision function(s) wx+b\n        -Label: label of each class; empty for regression/one-class SVM\n        -sv_indices: values in [1,...,num_traning_data] to indicate SVs in the training set\n        -ProbA: pairwise probability information; empty if -b 0 or in one-class SVM\n        -ProbB: pairwise probability information; empty if -b 0 or in one-class SVM\n        -nSV: number of SVs for each class; empty for regression/one-class SVM\n        -sv_coef: coefficients for SVs in decision functions\n        -SVs: support vectors\n\nIf you do not use the option '-b 1', ProbA and ProbB are empty\nmatrices. If the '-v' option is specified, cross validation is\nconducted and the returned model is just a scalar: cross-validation\naccuracy for classification and mean-squared error for regression.\n\nMore details about this model can be found in LIBSVM FAQ\n(http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html) and LIBSVM\nimplementation document\n(http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf).\n\nResult of Prediction\n====================\n\nThe function 'svmpredict' has three outputs. The first one,\npredictd_label, is a vector of predicted labels. The second output,\naccuracy, is a vector including accuracy (for classification), mean\nsquared error, and squared correlation coefficient (for regression).\nThe third is a matrix containing decision values or probability\nestimates (if '-b 1' is specified). If k is the number of classes\nin training data, for decision values, each row includes results of \npredicting k(k-1)/2 binary-class SVMs. For classification, k = 1 is a\nspecial case. Decision value +1 is returned for each testing instance,\ninstead of an empty vector. For probabilities, each row contains k values\nindicating the probability that the testing instance is in each class.\nNote that the order of classes here is the same as 'Label' field\nin the model structure.\n\nOther Utilities\n===============\n\nA matlab function libsvmread reads files in LIBSVM format: \n\n[label_vector, instance_matrix] = libsvmread('data.txt'); \n\nTwo outputs are labels and instances, which can then be used as inputs\nof svmtrain or svmpredict. \n\nA matlab function libsvmwrite writes Matlab matrix to a file in LIBSVM format:\n\nlibsvmwrite('data.txt', label_vector, instance_matrix]\n\nThe instance_matrix must be a sparse matrix. (type must be double)\nFor 32bit and 64bit MATLAB on Windows, pre-built binary files are ready \nin the directory `..\\windows', but in future releases, we will only \ninclude 64bit MATLAB binary files.\n\nThese codes are prepared by Rong-En Fan and Kai-Wei Chang from National\nTaiwan University.\n\nExamples\n========\n\nTrain and test on the provided data heart_scale:\n\nmatlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');\nmatlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');\nmatlab> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training data\n\nFor probability estimates, you need '-b 1' for training and testing:\n\nmatlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');\nmatlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -b 1');\nmatlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');\nmatlab> [predict_label, accuracy, prob_estimates] = svmpredict(heart_scale_label, heart_scale_inst, model, '-b 1');\n\nTo use precomputed kernel, you must include sample serial number as\nthe first column of the training and testing data (assume your kernel\nmatrix is K, # of instances is n):\n\nmatlab> K1 = [(1:n)', K]; % include sample serial number as first column\nmatlab> model = svmtrain(label_vector, K1, '-t 4');\nmatlab> [predict_label, accuracy, dec_values] = svmpredict(label_vector, K1, model); % test the training data\n\nWe give the following detailed example by splitting heart_scale into\n150 training and 120 testing data.  Constructing a linear kernel\nmatrix and then using the precomputed kernel gives exactly the same\ntesting error as using the LIBSVM built-in linear kernel.\n\nmatlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');\nmatlab>\nmatlab> % Split Data\nmatlab> train_data = heart_scale_inst(1:150,:);\nmatlab> train_label = heart_scale_label(1:150,:);\nmatlab> test_data = heart_scale_inst(151:270,:);\nmatlab> test_label = heart_scale_label(151:270,:);\nmatlab>\nmatlab> % Linear Kernel\nmatlab> model_linear = svmtrain(train_label, train_data, '-t 0');\nmatlab> [predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label, test_data, model_linear);\nmatlab>\nmatlab> % Precomputed Kernel\nmatlab> model_precomputed = svmtrain(train_label, [(1:150)', train_data*train_data'], '-t 4');\nmatlab> [predict_label_P, accuracy_P, dec_values_P] = svmpredict(test_label, [(1:120)', test_data*train_data'], model_precomputed);\nmatlab>\nmatlab> accuracy_L % Display the accuracy using linear kernel\nmatlab> accuracy_P % Display the accuracy using precomputed kernel\n\nNote that for testing, you can put anything in the\ntesting_label_vector.  For more details of precomputed kernels, please\nread the section ``Precomputed Kernels'' in the README of the LIBSVM\npackage.\n\nAdditional Information\n======================\n\nThis interface was initially written by Jun-Cheng Chen, Kuan-Jen Peng,\nChih-Yuan Yang and Chih-Huai Cheng from Department of Computer\nScience, National Taiwan University. The current version was prepared\nby Rong-En Fan and Ting-Fan Wu. If you find this tool useful, please\ncite LIBSVM as follows\n\nChih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support\nvector machines. ACM Transactions on Intelligent Systems and\nTechnology, 2:27:1--27:27, 2011. Software available at\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm\n\nFor any question, please contact Chih-Jen Lin <cjlin@csie.ntu.edu.tw>,\nor check the FAQ page:\n\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q10:_MATLAB_interface\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/libsvmread.c",
    "content": "#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <errno.h>\n\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif \n#endif \n#ifndef max\n#define max(x,y) (((x)>(y))?(x):(y))\n#endif\n#ifndef min\n#define min(x,y) (((x)<(y))?(x):(y))\n#endif\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\"Usage: [label_vector, instance_matrix] = libsvmread('filename');\\n\"\n\t);\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nstatic char *line;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\t\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line, max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\n// read in a problem (in libsvm format)\nvoid read_problem(const char *filename, int nlhs, mxArray *plhs[])\n{\n\tint max_index, min_index, inst_max_index;\n\tsize_t elements, k, i, l=0;\n\tFILE *fp = fopen(filename,\"r\");\n\tchar *endptr;\n\tmwIndex *ir, *jc;\n\tdouble *labels, *samples;\n\n\tif(fp == NULL)\n\t{\n\t\tmexPrintf(\"can't open input file %s\\n\",filename);\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tmax_line_len = 1024;\n\tline = (char *) malloc(max_line_len*sizeof(char));\n\n\tmax_index = 0;\n\tmin_index = 1; // our index starts from 1\n\telements = 0;\n\twhile(readline(fp) != NULL)\n\t{\n\t\tchar *idx, *val;\n\t\t// features\n\t\tint index = 0;\n\n\t\tinst_max_index = -1; // strtol gives 0 if wrong format, and precomputed kernel has <index> start from 0\n\t\tstrtok(line,\" \\t\"); // label\n\t\twhile (1)\n\t\t{\n\t\t\tidx = strtok(NULL,\":\"); // index:value\n\t\t\tval = strtok(NULL,\" \\t\");\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\n\t\t\terrno = 0;\n\t\t\tindex = (int) strtol(idx,&endptr,10);\n\t\t\tif(endptr == idx || errno != 0 || *endptr != '\\0' || index <= inst_max_index)\n\t\t\t{\n\t\t\t\tmexPrintf(\"Wrong input format at line %d\\n\",l+1);\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse\n\t\t\t\tinst_max_index = index;\n\n\t\t\tmin_index = min(min_index, index);\n\t\t\telements++;\n\t\t}\n\t\tmax_index = max(max_index, inst_max_index);\n\t\tl++;\n\t}\n\trewind(fp);\n\n\t// y\n\tplhs[0] = mxCreateDoubleMatrix(l, 1, mxREAL);\n\t// x^T\n\tif (min_index <= 0)\n\t\tplhs[1] = mxCreateSparse(max_index-min_index+1, l, elements, mxREAL);\n\telse\n\t\tplhs[1] = mxCreateSparse(max_index, l, elements, mxREAL);\n\n\tlabels = mxGetPr(plhs[0]);\n\tsamples = mxGetPr(plhs[1]);\n\tir = mxGetIr(plhs[1]);\n\tjc = mxGetJc(plhs[1]);\n\n\tk=0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tchar *idx, *val, *label;\n\t\tjc[i] = k;\n\n\t\treadline(fp);\n\n\t\tlabel = strtok(line,\" \\t\\n\");\n\t\tif(label == NULL)\n\t\t{\n\t\t\tmexPrintf(\"Empty line at line %d\\n\",i+1);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\t\tlabels[i] = strtod(label,&endptr);\n\t\tif(endptr == label || *endptr != '\\0')\n\t\t{\n\t\t\tmexPrintf(\"Wrong input format at line %d\\n\",i+1);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\t// features\n\t\twhile(1)\n\t\t{\n\t\t\tidx = strtok(NULL,\":\");\n\t\t\tval = strtok(NULL,\" \\t\");\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\n\t\t\tir[k] = (mwIndex) (strtol(idx,&endptr,10) - min_index); // precomputed kernel has <index> start from 0\n\n\t\t\terrno = 0;\n\t\t\tsamples[k] = strtod(val,&endptr);\n\t\t\tif (endptr == val || errno != 0 || (*endptr != '\\0' && !isspace(*endptr)))\n\t\t\t{\n\t\t\t\tmexPrintf(\"Wrong input format at line %d\\n\",i+1);\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t++k;\n\t\t}\n\t}\n\tjc[l] = k;\n\n\tfclose(fp);\n\tfree(line);\n\n\t{\n\t\tmxArray *rhs[1], *lhs[1];\n\t\trhs[0] = plhs[1];\n\t\tif(mexCallMATLAB(1, lhs, 1, rhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose problem\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\t\tplhs[1] = lhs[0];\n\t}\n}\n\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tchar filename[256];\n\n\tif(nrhs != 1 || nlhs != 2)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tmxGetString(prhs[0], filename, mxGetN(prhs[0]) + 1);\n\n\tif(filename == NULL)\n\t{\n\t\tmexPrintf(\"Error: filename is NULL\\n\");\n\t\treturn;\n\t}\n\n\tread_problem(filename, nlhs, plhs);\n\n\treturn;\n}\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/libsvmwrite.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\"Usage: libsvmwrite('filename', label_vector, instance_matrix);\\n\"\n\t);\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nvoid libsvmwrite(const char *filename, const mxArray *label_vec, const mxArray *instance_mat)\n{\n\tFILE *fp = fopen(filename,\"w\");\n\tmwIndex *ir, *jc, k, low, high;\n\tsize_t i, l, label_vector_row_num;\n\tdouble *samples, *labels;\n\tmxArray *instance_mat_col; // instance sparse matrix in column format\n\n\tif(fp ==NULL)\n\t{\n\t\tmexPrintf(\"can't open output file %s\\n\",filename);\t\t\t\n\t\treturn;\n\t}\n\n\t// transpose instance matrix\n\t{\n\t\tmxArray *prhs[1], *plhs[1];\n\t\tprhs[0] = mxDuplicateArray(instance_mat);\n\t\tif(mexCallMATLAB(1, plhs, 1, prhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose instance matrix\\n\");\n\t\t\treturn;\n\t\t}\n\t\tinstance_mat_col = plhs[0];\n\t\tmxDestroyArray(prhs[0]);\n\t}\n\n\t// the number of instance\n\tl = mxGetN(instance_mat_col);\n\tlabel_vector_row_num = mxGetM(label_vec);\n\n\tif(label_vector_row_num!=l)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\treturn;\n\t}\n\n\t// each column is one instance\n\tlabels = mxGetPr(label_vec);\n\tsamples = mxGetPr(instance_mat_col);\n\tir = mxGetIr(instance_mat_col);\n\tjc = mxGetJc(instance_mat_col);\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tfprintf(fp,\"%g\", labels[i]);\n\n\t\tlow = jc[i], high = jc[i+1];\n\t\tfor(k=low;k<high;k++)\n\t\t\tfprintf(fp,\" %zu:%g\", (size_t)ir[k]+1, samples[k]);\t\t\n\n\t\tfprintf(fp,\"\\n\");\n\t}\n\n\tfclose(fp);\n\treturn;\n}\n\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tif(nlhs > 0)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\t\n\t// Transform the input Matrix to libsvm format\n\tif(nrhs == 3)\n\t{\n\t\tchar filename[256];\n\t\tif(!mxIsDouble(prhs[1]) || !mxIsDouble(prhs[2]))\n\t\t{\n\t\t\tmexPrintf(\"Error: label vector and instance matrix must be double\\n\");\t\t\t\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmxGetString(prhs[0], filename, mxGetN(prhs[0])+1);\t\t\n\n\t\tif(mxIsSparse(prhs[2]))\n\t\t\tlibsvmwrite(filename, prhs[1], prhs[2]);\n\t\telse\n\t\t{\n\t\t\tmexPrintf(\"Instance_matrix must be sparse\\n\");\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\telse\n\t{\n\t\texit_with_help();\t\t\n\t\treturn;\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/make.m",
    "content": "% This make.m is for MATLAB and OCTAVE under Windows, Mac, and Unix\n\ntry\n\tType = ver;\n\t% This part is for OCTAVE\n\tif(strcmp(Type(1).Name, 'Octave') == 1)\n\t\tmex libsvmread.c\n\t\tmex libsvmwrite.c\n\t\tmex svmtrain.c ../svm.cpp svm_model_matlab.c\n\t\tmex svmpredict.c ../svm.cpp svm_model_matlab.c\n\t% This part is for MATLAB\n\t% Add -largeArrayDims on 64-bit machines of MATLAB\n\telse\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims libsvmread.c\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims libsvmwrite.c\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims svmtrain.c ../svm.cpp svm_model_matlab.c\n\t\tmex CFLAGS=\"\\$CFLAGS -std=c99\" -largeArrayDims svmpredict.c ../svm.cpp svm_model_matlab.c\n\tend\ncatch\n\tfprintf('If make.m fails, please check README about detailed instructions.\\n');\nend\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svm_model_matlab.c",
    "content": "#include <stdlib.h>\n#include <string.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\n#define NUM_OF_RETURN_FIELD 11\n\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n\nstatic const char *field_names[] = {\n\t\"Parameters\",\n\t\"nr_class\",\n\t\"totalSV\",\n\t\"rho\",\n\t\"Label\",\n\t\"sv_indices\",\n\t\"ProbA\",\n\t\"ProbB\",\n\t\"nSV\",\n\t\"sv_coef\",\n\t\"SVs\"\n};\n\nconst char *model_to_matlab_structure(mxArray *plhs[], int num_of_feature, struct svm_model *model)\n{\n\tint i, j, n;\n\tdouble *ptr;\n\tmxArray *return_model, **rhs;\n\tint out_id = 0;\n\n\trhs = (mxArray **)mxMalloc(sizeof(mxArray *)*NUM_OF_RETURN_FIELD);\n\n\t// Parameters\n\trhs[out_id] = mxCreateDoubleMatrix(5, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model->param.svm_type;\n\tptr[1] = model->param.kernel_type;\n\tptr[2] = model->param.degree;\n\tptr[3] = model->param.gamma;\n\tptr[4] = model->param.coef0;\n\tout_id++;\n\n\t// nr_class\n\trhs[out_id] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model->nr_class;\n\tout_id++;\n\n\t// total SV\n\trhs[out_id] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tptr[0] = model->l;\n\tout_id++;\n\n\t// rho\n\tn = model->nr_class*(model->nr_class-1)/2;\n\trhs[out_id] = mxCreateDoubleMatrix(n, 1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tfor(i = 0; i < n; i++)\n\t\tptr[i] = model->rho[i];\n\tout_id++;\n\n\t// Label\n\tif(model->label)\n\t{\n\t\trhs[out_id] = mxCreateDoubleMatrix(model->nr_class, 1, mxREAL);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tfor(i = 0; i < model->nr_class; i++)\n\t\t\tptr[i] = model->label[i];\n\t}\n\telse\n\t\trhs[out_id] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\tout_id++;\n\n\t// sv_indices\n\tif(model->sv_indices)\n\t{\n\t\trhs[out_id] = mxCreateDoubleMatrix(model->l, 1, mxREAL);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tfor(i = 0; i < model->l; i++)\n\t\t\tptr[i] = model->sv_indices[i];\n\t}\n\telse\n\t\trhs[out_id] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\tout_id++;\n\n\t// probA\n\tif(model->probA != NULL)\n\t{\n\t\trhs[out_id] = mxCreateDoubleMatrix(n, 1, mxREAL);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tfor(i = 0; i < n; i++)\n\t\t\tptr[i] = model->probA[i];\n\t}\n\telse\n\t\trhs[out_id] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\tout_id ++;\n\n\t// probB\n\tif(model->probB != NULL)\n\t{\n\t\trhs[out_id] = mxCreateDoubleMatrix(n, 1, mxREAL);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tfor(i = 0; i < n; i++)\n\t\t\tptr[i] = model->probB[i];\n\t}\n\telse\n\t\trhs[out_id] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\tout_id++;\n\n\t// nSV\n\tif(model->nSV)\n\t{\n\t\trhs[out_id] = mxCreateDoubleMatrix(model->nr_class, 1, mxREAL);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tfor(i = 0; i < model->nr_class; i++)\n\t\t\tptr[i] = model->nSV[i];\n\t}\n\telse\n\t\trhs[out_id] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\tout_id++;\n\n\t// sv_coef\n\trhs[out_id] = mxCreateDoubleMatrix(model->l, model->nr_class-1, mxREAL);\n\tptr = mxGetPr(rhs[out_id]);\n\tfor(i = 0; i < model->nr_class-1; i++)\n\t\tfor(j = 0; j < model->l; j++)\n\t\t\tptr[(i*(model->l))+j] = model->sv_coef[i][j];\n\tout_id++;\n\n\t// SVs\n\t{\n\t\tint ir_index, nonzero_element;\n\t\tmwIndex *ir, *jc;\n\t\tmxArray *pprhs[1], *pplhs[1];\t\n\n\t\tif(model->param.kernel_type == PRECOMPUTED)\n\t\t{\n\t\t\tnonzero_element = model->l;\n\t\t\tnum_of_feature = 1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnonzero_element = 0;\n\t\t\tfor(i = 0; i < model->l; i++) {\n\t\t\t\tj = 0;\n\t\t\t\twhile(model->SV[i][j].index != -1) \n\t\t\t\t{\n\t\t\t\t\tnonzero_element++;\n\t\t\t\t\tj++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// SV in column, easier accessing\n\t\trhs[out_id] = mxCreateSparse(num_of_feature, model->l, nonzero_element, mxREAL);\n\t\tir = mxGetIr(rhs[out_id]);\n\t\tjc = mxGetJc(rhs[out_id]);\n\t\tptr = mxGetPr(rhs[out_id]);\n\t\tjc[0] = ir_index = 0;\t\t\n\t\tfor(i = 0;i < model->l; i++)\n\t\t{\n\t\t\tif(model->param.kernel_type == PRECOMPUTED)\n\t\t\t{\n\t\t\t\t// make a (1 x model->l) matrix\n\t\t\t\tir[ir_index] = 0; \n\t\t\t\tptr[ir_index] = model->SV[i][0].value;\n\t\t\t\tir_index++;\n\t\t\t\tjc[i+1] = jc[i] + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tint x_index = 0;\n\t\t\t\twhile (model->SV[i][x_index].index != -1)\n\t\t\t\t{\n\t\t\t\t\tir[ir_index] = model->SV[i][x_index].index - 1; \n\t\t\t\t\tptr[ir_index] = model->SV[i][x_index].value;\n\t\t\t\t\tir_index++, x_index++;\n\t\t\t\t}\n\t\t\t\tjc[i+1] = jc[i] + x_index;\n\t\t\t}\n\t\t}\n\t\t// transpose back to SV in row\n\t\tpprhs[0] = rhs[out_id];\n\t\tif(mexCallMATLAB(1, pplhs, 1, pprhs, \"transpose\"))\n\t\t\treturn \"cannot transpose SV matrix\";\n\t\trhs[out_id] = pplhs[0];\n\t\tout_id++;\n\t}\n\n\t/* Create a struct matrix contains NUM_OF_RETURN_FIELD fields */\n\treturn_model = mxCreateStructMatrix(1, 1, NUM_OF_RETURN_FIELD, field_names);\n\n\t/* Fill struct matrix with input arguments */\n\tfor(i = 0; i < NUM_OF_RETURN_FIELD; i++)\n\t\tmxSetField(return_model,0,field_names[i],mxDuplicateArray(rhs[i]));\n\t/* return */\n\tplhs[0] = return_model;\n\tmxFree(rhs);\n\n\treturn NULL;\n}\n\nstruct svm_model *matlab_matrix_to_model(const mxArray *matlab_struct, const char **msg)\n{\n\tint i, j, n, num_of_fields;\n\tdouble *ptr;\n\tint id = 0;\n\tstruct svm_node *x_space;\n\tstruct svm_model *model;\n\tmxArray **rhs;\n\n\tnum_of_fields = mxGetNumberOfFields(matlab_struct);\n\tif(num_of_fields != NUM_OF_RETURN_FIELD) \n\t{\n\t\t*msg = \"number of return field is not correct\";\n\t\treturn NULL;\n\t}\n\trhs = (mxArray **) mxMalloc(sizeof(mxArray *)*num_of_fields);\n\n\tfor(i=0;i<num_of_fields;i++)\n\t\trhs[i] = mxGetFieldByNumber(matlab_struct, 0, i);\n\n\tmodel = Malloc(struct svm_model, 1);\n\tmodel->rho = NULL;\n\tmodel->probA = NULL;\n\tmodel->probB = NULL;\n\tmodel->label = NULL;\n\tmodel->sv_indices = NULL;\n\tmodel->nSV = NULL;\n\tmodel->free_sv = 1; // XXX\n\n\tptr = mxGetPr(rhs[id]);\n\tmodel->param.svm_type = (int)ptr[0];\n\tmodel->param.kernel_type  = (int)ptr[1];\n\tmodel->param.degree\t  = (int)ptr[2];\n\tmodel->param.gamma\t  = ptr[3];\n\tmodel->param.coef0\t  = ptr[4];\n\tid++;\n\n\tptr = mxGetPr(rhs[id]);\n\tmodel->nr_class = (int)ptr[0];\n\tid++;\n\n\tptr = mxGetPr(rhs[id]);\n\tmodel->l = (int)ptr[0];\n\tid++;\n\n\t// rho\n\tn = model->nr_class * (model->nr_class-1)/2;\n\tmodel->rho = (double*) malloc(n*sizeof(double));\n\tptr = mxGetPr(rhs[id]);\n\tfor(i=0;i<n;i++)\n\t\tmodel->rho[i] = ptr[i];\n\tid++;\n\n\t// label\n\tif(mxIsEmpty(rhs[id]) == 0)\n\t{\n\t\tmodel->label = (int*) malloc(model->nr_class*sizeof(int));\n\t\tptr = mxGetPr(rhs[id]);\n\t\tfor(i=0;i<model->nr_class;i++)\n\t\t\tmodel->label[i] = (int)ptr[i];\n\t}\n\tid++;\n\n\t// sv_indices\n\tif(mxIsEmpty(rhs[id]) == 0)\n\t{\n\t\tmodel->sv_indices = (int*) malloc(model->l*sizeof(int));\n\t\tptr = mxGetPr(rhs[id]);\n\t\tfor(i=0;i<model->l;i++)\n\t\t\tmodel->sv_indices[i] = (int)ptr[i];\n\t}\n\tid++;\n\n\t// probA\n\tif(mxIsEmpty(rhs[id]) == 0)\n\t{\n\t\tmodel->probA = (double*) malloc(n*sizeof(double));\n\t\tptr = mxGetPr(rhs[id]);\n\t\tfor(i=0;i<n;i++)\n\t\t\tmodel->probA[i] = ptr[i];\n\t}\n\tid++;\n\n\t// probB\n\tif(mxIsEmpty(rhs[id]) == 0)\n\t{\n\t\tmodel->probB = (double*) malloc(n*sizeof(double));\n\t\tptr = mxGetPr(rhs[id]);\n\t\tfor(i=0;i<n;i++)\n\t\t\tmodel->probB[i] = ptr[i];\n\t}\n\tid++;\n\n\t// nSV\n\tif(mxIsEmpty(rhs[id]) == 0)\n\t{\n\t\tmodel->nSV = (int*) malloc(model->nr_class*sizeof(int));\n\t\tptr = mxGetPr(rhs[id]);\n\t\tfor(i=0;i<model->nr_class;i++)\n\t\t\tmodel->nSV[i] = (int)ptr[i];\n\t}\n\tid++;\n\n\t// sv_coef\n\tptr = mxGetPr(rhs[id]);\n\tmodel->sv_coef = (double**) malloc((model->nr_class-1)*sizeof(double));\n\tfor( i=0 ; i< model->nr_class -1 ; i++ )\n\t\tmodel->sv_coef[i] = (double*) malloc((model->l)*sizeof(double));\n\tfor(i = 0; i < model->nr_class - 1; i++)\n\t\tfor(j = 0; j < model->l; j++)\n\t\t\tmodel->sv_coef[i][j] = ptr[i*(model->l)+j];\n\tid++;\n\n\t// SV\n\t{\n\t\tint sr, elements;\n\t\tint num_samples;\n\t\tmwIndex *ir, *jc;\n\t\tmxArray *pprhs[1], *pplhs[1];\n\n\t\t// transpose SV\n\t\tpprhs[0] = rhs[id];\n\t\tif(mexCallMATLAB(1, pplhs, 1, pprhs, \"transpose\")) \n\t\t{\n\t\t\tsvm_free_and_destroy_model(&model);\n\t\t\t*msg = \"cannot transpose SV matrix\";\n\t\t\treturn NULL;\n\t\t}\n\t\trhs[id] = pplhs[0];\n\n\t\tsr = (int)mxGetN(rhs[id]);\n\n\t\tptr = mxGetPr(rhs[id]);\n\t\tir = mxGetIr(rhs[id]);\n\t\tjc = mxGetJc(rhs[id]);\n\n\t\tnum_samples = (int)mxGetNzmax(rhs[id]);\n\n\t\telements = num_samples + sr;\n\n\t\tmodel->SV = (struct svm_node **) malloc(sr * sizeof(struct svm_node *));\n\t\tx_space = (struct svm_node *)malloc(elements * sizeof(struct svm_node));\n\n\t\t// SV is in column\n\t\tfor(i=0;i<sr;i++)\n\t\t{\n\t\t\tint low = (int)jc[i], high = (int)jc[i+1];\n\t\t\tint x_index = 0;\n\t\t\tmodel->SV[i] = &x_space[low+i];\n\t\t\tfor(j=low;j<high;j++)\n\t\t\t{\n\t\t\t\tmodel->SV[i][x_index].index = (int)ir[j] + 1; \n\t\t\t\tmodel->SV[i][x_index].value = ptr[j];\n\t\t\t\tx_index++;\n\t\t\t}\n\t\t\tmodel->SV[i][x_index].index = -1;\n\t\t}\n\n\t\tid++;\n\t}\n\tmxFree(rhs);\n\n\treturn model;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svm_model_matlab.h",
    "content": "const char *model_to_matlab_structure(mxArray *plhs[], int num_of_feature, struct svm_model *model);\nstruct svm_model *matlab_matrix_to_model(const mxArray *matlab_struct, const char **error_message);\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svmpredict.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n#include \"svm_model_matlab.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\n#define CMD_LEN 2048\n\nint print_null(const char *s,...) {}\nint (*info)(const char *fmt,...) = &mexPrintf;\n\nvoid read_sparse_instance(const mxArray *prhs, int index, struct svm_node *x)\n{\n\tint i, j, low, high;\n\tmwIndex *ir, *jc;\n\tdouble *samples;\n\n\tir = mxGetIr(prhs);\n\tjc = mxGetJc(prhs);\n\tsamples = mxGetPr(prhs);\n\n\t// each column is one instance\n\tj = 0;\n\tlow = (int)jc[index], high = (int)jc[index+1];\n\tfor(i=low;i<high;i++)\n\t{\n\t\tx[j].index = (int)ir[i] + 1;\n\t\tx[j].value = samples[i];\n\t\tj++;\n\t}\n\tx[j].index = -1;\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\nvoid predict(int nlhs, mxArray *plhs[], const mxArray *prhs[], struct svm_model *model, const int predict_probability)\n{\n\tint label_vector_row_num, label_vector_col_num;\n\tint feature_number, testing_instance_number;\n\tint instance_index;\n\tdouble *ptr_instance, *ptr_label, *ptr_predict_label; \n\tdouble *ptr_prob_estimates, *ptr_dec_values, *ptr;\n\tstruct svm_node *x;\n\tmxArray *pplhs[1]; // transposed instance sparse matrix\n\tmxArray *tplhs[3]; // temporary storage for plhs[]\n\n\tint correct = 0;\n\tint total = 0;\n\tdouble error = 0;\n\tdouble sump = 0, sumt = 0, sumpp = 0, sumtt = 0, sumpt = 0;\n\n\tint svm_type=svm_get_svm_type(model);\n\tint nr_class=svm_get_nr_class(model);\n\tdouble *prob_estimates=NULL;\n\n\t// prhs[1] = testing instance matrix\n\tfeature_number = (int)mxGetN(prhs[1]);\n\ttesting_instance_number = (int)mxGetM(prhs[1]);\n\tlabel_vector_row_num = (int)mxGetM(prhs[0]);\n\tlabel_vector_col_num = (int)mxGetN(prhs[0]);\n\n\tif(label_vector_row_num!=testing_instance_number)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\tif(label_vector_col_num!=1)\n\t{\n\t\tmexPrintf(\"label (1st argument) should be a vector (# of column is 1).\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tptr_instance = mxGetPr(prhs[1]);\n\tptr_label    = mxGetPr(prhs[0]);\n\n\t// transpose instance matrix\n\tif(mxIsSparse(prhs[1]))\n\t{\n\t\tif(model->param.kernel_type == PRECOMPUTED)\n\t\t{\n\t\t\t// precomputed kernel requires dense matrix, so we make one\n\t\t\tmxArray *rhs[1], *lhs[1];\n\t\t\trhs[0] = mxDuplicateArray(prhs[1]);\n\t\t\tif(mexCallMATLAB(1, lhs, 1, rhs, \"full\"))\n\t\t\t{\n\t\t\t\tmexPrintf(\"Error: cannot full testing instance matrix\\n\");\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tptr_instance = mxGetPr(lhs[0]);\n\t\t\tmxDestroyArray(rhs[0]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmxArray *pprhs[1];\n\t\t\tpprhs[0] = mxDuplicateArray(prhs[1]);\n\t\t\tif(mexCallMATLAB(1, pplhs, 1, pprhs, \"transpose\"))\n\t\t\t{\n\t\t\t\tmexPrintf(\"Error: cannot transpose testing instance matrix\\n\");\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(predict_probability)\n\t{\n\t\tif(svm_type==NU_SVR || svm_type==EPSILON_SVR)\n\t\t\tinfo(\"Prob. model for test data: target value = predicted value + z,\\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma=%g\\n\",svm_get_svr_probability(model));\n\t\telse\n\t\t\tprob_estimates = (double *) malloc(nr_class*sizeof(double));\n\t}\n\n\ttplhs[0] = mxCreateDoubleMatrix(testing_instance_number, 1, mxREAL);\n\tif(predict_probability)\n\t{\n\t\t// prob estimates are in plhs[2]\n\t\tif(svm_type==C_SVC || svm_type==NU_SVC)\n\t\t\ttplhs[2] = mxCreateDoubleMatrix(testing_instance_number, nr_class, mxREAL);\n\t\telse\n\t\t\ttplhs[2] = mxCreateDoubleMatrix(0, 0, mxREAL);\n\t}\n\telse\n\t{\n\t\t// decision values are in plhs[2]\n\t\tif(svm_type == ONE_CLASS ||\n\t\t   svm_type == EPSILON_SVR ||\n\t\t   svm_type == NU_SVR ||\n\t\t   nr_class == 1) // if only one class in training data, decision values are still returned.\n\t\t\ttplhs[2] = mxCreateDoubleMatrix(testing_instance_number, 1, mxREAL);\n\t\telse\n\t\t\ttplhs[2] = mxCreateDoubleMatrix(testing_instance_number, nr_class*(nr_class-1)/2, mxREAL);\n\t}\n\n\tptr_predict_label = mxGetPr(tplhs[0]);\n\tptr_prob_estimates = mxGetPr(tplhs[2]);\n\tptr_dec_values = mxGetPr(tplhs[2]);\n\tx = (struct svm_node*)malloc((feature_number+1)*sizeof(struct svm_node) );\n\tfor(instance_index=0;instance_index<testing_instance_number;instance_index++)\n\t{\n\t\tint i;\n\t\tdouble target_label, predict_label;\n\n\t\ttarget_label = ptr_label[instance_index];\n\n\t\tif(mxIsSparse(prhs[1]) && model->param.kernel_type != PRECOMPUTED) // prhs[1]^T is still sparse\n\t\t\tread_sparse_instance(pplhs[0], instance_index, x);\n\t\telse\n\t\t{\n\t\t\tfor(i=0;i<feature_number;i++)\n\t\t\t{\n\t\t\t\tx[i].index = i+1;\n\t\t\t\tx[i].value = ptr_instance[testing_instance_number*i+instance_index];\n\t\t\t}\n\t\t\tx[feature_number].index = -1;\n\t\t}\n\n\t\tif(predict_probability)\n\t\t{\n\t\t\tif(svm_type==C_SVC || svm_type==NU_SVC)\n\t\t\t{\n\t\t\t\tpredict_label = svm_predict_probability(model, x, prob_estimates);\n\t\t\t\tptr_predict_label[instance_index] = predict_label;\n\t\t\t\tfor(i=0;i<nr_class;i++)\n\t\t\t\t\tptr_prob_estimates[instance_index + i * testing_instance_number] = prob_estimates[i];\n\t\t\t} else {\n\t\t\t\tpredict_label = svm_predict(model,x);\n\t\t\t\tptr_predict_label[instance_index] = predict_label;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(svm_type == ONE_CLASS ||\n\t\t\t   svm_type == EPSILON_SVR ||\n\t\t\t   svm_type == NU_SVR)\n\t\t\t{\n\t\t\t\tdouble res;\n\t\t\t\tpredict_label = svm_predict_values(model, x, &res);\n\t\t\t\tptr_dec_values[instance_index] = res;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble *dec_values = (double *) malloc(sizeof(double) * nr_class*(nr_class-1)/2);\n\t\t\t\tpredict_label = svm_predict_values(model, x, dec_values);\n\t\t\t\tif(nr_class == 1) \n\t\t\t\t\tptr_dec_values[instance_index] = 1;\n\t\t\t\telse\n\t\t\t\t\tfor(i=0;i<(nr_class*(nr_class-1))/2;i++)\n\t\t\t\t\t\tptr_dec_values[instance_index + i * testing_instance_number] = dec_values[i];\n\t\t\t\tfree(dec_values);\n\t\t\t}\n\t\t\tptr_predict_label[instance_index] = predict_label;\n\t\t}\n\n\t\tif(predict_label == target_label)\n\t\t\t++correct;\n\t\terror += (predict_label-target_label)*(predict_label-target_label);\n\t\tsump += predict_label;\n\t\tsumt += target_label;\n\t\tsumpp += predict_label*predict_label;\n\t\tsumtt += target_label*target_label;\n\t\tsumpt += predict_label*target_label;\n\t\t++total;\n\t}\n\tif(svm_type==NU_SVR || svm_type==EPSILON_SVR)\n\t{\n\t\tinfo(\"Mean squared error = %g (regression)\\n\",error/total);\n\t\tinfo(\"Squared correlation coefficient = %g (regression)\\n\",\n\t\t\t((total*sumpt-sump*sumt)*(total*sumpt-sump*sumt))/\n\t\t\t((total*sumpp-sump*sump)*(total*sumtt-sumt*sumt))\n\t\t\t);\n\t}\n\telse\n\t\tinfo(\"Accuracy = %g%% (%d/%d) (classification)\\n\",\n\t\t\t(double)correct/total*100,correct,total);\n\n\t// return accuracy, mean squared error, squared correlation coefficient\n\ttplhs[1] = mxCreateDoubleMatrix(3, 1, mxREAL);\n\tptr = mxGetPr(tplhs[1]);\n\tptr[0] = (double)correct/total*100;\n\tptr[1] = error/total;\n\tptr[2] = ((total*sumpt-sump*sumt)*(total*sumpt-sump*sumt))/\n\t\t\t\t((total*sumpp-sump*sump)*(total*sumtt-sumt*sumt));\n\n\tfree(x);\n\tif(prob_estimates != NULL)\n\t\tfree(prob_estimates);\n\n\tswitch(nlhs)\n\t{\n\t\tcase 3:\n\t\t\tplhs[2] = tplhs[2];\n\t\t\tplhs[1] = tplhs[1];\n\t\tcase 1:\n\t\tcase 0:\n\t\t\tplhs[0] = tplhs[0];\n\t}\n}\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\t\"Usage: [predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options')\\n\"\n\t\t\"       [predicted_label] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options')\\n\"\n\t\t\"Parameters:\\n\"\n\t\t\"  model: SVM model structure from svmtrain.\\n\"\n\t\t\"  libsvm_options:\\n\"\n\t\t\"    -b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); one-class SVM not supported yet\\n\"\n\t\t\"    -q : quiet mode (no outputs)\\n\"\n\t\t\"Returns:\\n\"\n\t\t\"  predicted_label: SVM prediction output vector.\\n\"\n\t\t\"  accuracy: a vector with accuracy, mean squared error, squared correlation coefficient.\\n\"\n\t\t\"  prob_estimates: If selected, probability estimate vector.\\n\"\n\t);\n}\n\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\t int nrhs, const mxArray *prhs[] )\n{\n\tint prob_estimate_flag = 0;\n\tstruct svm_model *model;\n\tinfo = &mexPrintf;\n\n\tif(nlhs == 2 || nlhs > 3 || nrhs > 4 || nrhs < 3)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tif(!mxIsDouble(prhs[0]) || !mxIsDouble(prhs[1])) {\n\t\tmexPrintf(\"Error: label vector and instance matrix must be double\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\tif(mxIsStruct(prhs[2]))\n\t{\n\t\tconst char *error_msg;\n\n\t\t// parse options\n\t\tif(nrhs==4)\n\t\t{\n\t\t\tint i, argc = 1;\n\t\t\tchar cmd[CMD_LEN], *argv[CMD_LEN/2];\n\n\t\t\t// put options in argv[]\n\t\t\tmxGetString(prhs[3], cmd,  mxGetN(prhs[3]) + 1);\n\t\t\tif((argv[argc] = strtok(cmd, \" \")) != NULL)\n\t\t\t\twhile((argv[++argc] = strtok(NULL, \" \")) != NULL)\n\t\t\t\t\t;\n\n\t\t\tfor(i=1;i<argc;i++)\n\t\t\t{\n\t\t\t\tif(argv[i][0] != '-') break;\n\t\t\t\tif((++i>=argc) && argv[i-1][1] != 'q')\n\t\t\t\t{\n\t\t\t\t\texit_with_help();\n\t\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch(argv[i-1][1])\n\t\t\t\t{\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tprob_estimate_flag = atoi(argv[i]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\ti--;\n\t\t\t\t\t\tinfo = &print_null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmexPrintf(\"Unknown option: -%c\\n\", argv[i-1][1]);\n\t\t\t\t\t\texit_with_help();\n\t\t\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmodel = matlab_matrix_to_model(prhs[2], &error_msg);\n\t\tif (model == NULL)\n\t\t{\n\t\t\tmexPrintf(\"Error: can't read model: %s\\n\", error_msg);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(prob_estimate_flag)\n\t\t{\n\t\t\tif(svm_check_probability_model(model)==0)\n\t\t\t{\n\t\t\t\tmexPrintf(\"Model does not support probabiliy estimates\\n\");\n\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\tsvm_free_and_destroy_model(&model);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(svm_check_probability_model(model)!=0)\n\t\t\t\tinfo(\"Model supports probability estimates, but disabled in predicton.\\n\");\n\t\t}\n\n\t\tpredict(nlhs, plhs, prhs, model, prob_estimate_flag);\n\t\t// destroy model\n\t\tsvm_free_and_destroy_model(&model);\n\t}\n\telse\n\t{\n\t\tmexPrintf(\"model file should be a struct array\\n\");\n\t\tfake_answer(nlhs, plhs);\n\t}\n\n\treturn;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svmtrain.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n#include \"svm_model_matlab.h\"\n\n#ifdef MX_API_VER\n#if MX_API_VER < 0x07030000\ntypedef int mwIndex;\n#endif\n#endif\n\n#define CMD_LEN 2048\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n\nvoid print_null(const char *s) {}\nvoid print_string_matlab(const char *s) {mexPrintf(s);}\n\nvoid exit_with_help()\n{\n\tmexPrintf(\n\t\"Usage: model = svmtrain(training_label_vector, training_instance_matrix, 'libsvm_options');\\n\"\n\t\"libsvm_options:\\n\"\n\t\"-s svm_type : set type of SVM (default 0)\\n\"\n\t\"\t0 -- C-SVC\t\t(multi-class classification)\\n\"\n\t\"\t1 -- nu-SVC\t\t(multi-class classification)\\n\"\n\t\"\t2 -- one-class SVM\\n\"\n\t\"\t3 -- epsilon-SVR\t(regression)\\n\"\n\t\"\t4 -- nu-SVR\t\t(regression)\\n\"\n\t\"-t kernel_type : set type of kernel function (default 2)\\n\"\n\t\"\t0 -- linear: u'*v\\n\"\n\t\"\t1 -- polynomial: (gamma*u'*v + coef0)^degree\\n\"\n\t\"\t2 -- radial basis function: exp(-gamma*|u-v|^2)\\n\"\n\t\"\t3 -- sigmoid: tanh(gamma*u'*v + coef0)\\n\"\n\t\"\t4 -- precomputed kernel (kernel values in training_instance_matrix)\\n\"\n\t\"-d degree : set degree in kernel function (default 3)\\n\"\n\t\"-g gamma : set gamma in kernel function (default 1/num_features)\\n\"\n\t\"-r coef0 : set coef0 in kernel function (default 0)\\n\"\n\t\"-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)\\n\"\n\t\"-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)\\n\"\n\t\"-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\\n\"\n\t\"-m cachesize : set cache memory size in MB (default 100)\\n\"\n\t\"-e epsilon : set tolerance of termination criterion (default 0.001)\\n\"\n\t\"-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)\\n\"\n\t\"-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)\\n\"\n\t\"-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)\\n\"\n\t\"-v n : n-fold cross validation mode\\n\"\n\t\"-q : quiet mode (no outputs)\\n\"\n\t);\n}\n\n// svm arguments\nstruct svm_parameter param;\t\t// set by parse_command_line\nstruct svm_problem prob;\t\t// set by read_problem\nstruct svm_model *model;\nstruct svm_node *x_space;\nint cross_validation;\nint nr_fold;\n\n\ndouble do_cross_validation()\n{\n\tint i;\n\tint total_correct = 0;\n\tdouble total_error = 0;\n\tdouble sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;\n\tdouble *target = Malloc(double,prob.l);\n\tdouble retval = 0.0;\n\n\tsvm_cross_validation(&prob,&param,nr_fold,target);\n\tif(param.svm_type == EPSILON_SVR ||\n\t   param.svm_type == NU_SVR)\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tdouble y = prob.y[i];\n\t\t\tdouble v = target[i];\n\t\t\ttotal_error += (v-y)*(v-y);\n\t\t\tsumv += v;\n\t\t\tsumy += y;\n\t\t\tsumvv += v*v;\n\t\t\tsumyy += y*y;\n\t\t\tsumvy += v*y;\n\t\t}\n\t\tmexPrintf(\"Cross Validation Mean squared error = %g\\n\",total_error/prob.l);\n\t\tmexPrintf(\"Cross Validation Squared correlation coefficient = %g\\n\",\n\t\t\t((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/\n\t\t\t((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))\n\t\t\t);\n\t\tretval = total_error/prob.l;\n\t}\n\telse\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t\tif(target[i] == prob.y[i])\n\t\t\t\t++total_correct;\n\t\tmexPrintf(\"Cross Validation Accuracy = %g%%\\n\",100.0*total_correct/prob.l);\n\t\tretval = 100.0*total_correct/prob.l;\n\t}\n\tfree(target);\n\treturn retval;\n}\n\n// nrhs should be 3\nint parse_command_line(int nrhs, const mxArray *prhs[], char *model_file_name)\n{\n\tint i, argc = 1;\n\tchar cmd[CMD_LEN];\n\tchar *argv[CMD_LEN/2];\n\tvoid (*print_func)(const char *) = print_string_matlab;\t// default printing to matlab display\n\n\t// default values\n\tparam.svm_type = C_SVC;\n\tparam.kernel_type = RBF;\n\tparam.degree = 3;\n\tparam.gamma = 0;\t// 1/num_features\n\tparam.coef0 = 0;\n\tparam.nu = 0.5;\n\tparam.cache_size = 100;\n\tparam.C = 1;\n\tparam.eps = 1e-3;\n\tparam.p = 0.1;\n\tparam.shrinking = 1;\n\tparam.probability = 0;\n\tparam.nr_weight = 0;\n\tparam.weight_label = NULL;\n\tparam.weight = NULL;\n\tcross_validation = 0;\n\n\tif(nrhs <= 1)\n\t\treturn 1;\n\n\tif(nrhs > 2)\n\t{\n\t\t// put options in argv[]\n\t\tmxGetString(prhs[2], cmd, mxGetN(prhs[2]) + 1);\n\t\tif((argv[argc] = strtok(cmd, \" \")) != NULL)\n\t\t\twhile((argv[++argc] = strtok(NULL, \" \")) != NULL)\n\t\t\t\t;\n\t}\n\n\t// parse options\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\t++i;\n\t\tif(i>=argc && argv[i-1][1] != 'q')\t// since option -q has no parameter\n\t\t\treturn 1;\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 's':\n\t\t\t\tparam.svm_type = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tparam.kernel_type = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'd':\n\t\t\t\tparam.degree = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'g':\n\t\t\t\tparam.gamma = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'r':\n\t\t\t\tparam.coef0 = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'n':\n\t\t\t\tparam.nu = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tparam.cache_size = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tparam.C = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'e':\n\t\t\t\tparam.eps = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'p':\n\t\t\t\tparam.p = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\t\tparam.shrinking = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'b':\n\t\t\t\tparam.probability = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tprint_func = &print_null;\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\t\t\tcase 'v':\n\t\t\t\tcross_validation = 1;\n\t\t\t\tnr_fold = atoi(argv[i]);\n\t\t\t\tif(nr_fold < 2)\n\t\t\t\t{\n\t\t\t\t\tmexPrintf(\"n-fold cross validation: n must >= 2\\n\");\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'w':\n\t\t\t\t++param.nr_weight;\n\t\t\t\tparam.weight_label = (int *)realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\tparam.weight = (double *)realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(&argv[i-1][2]);\n\t\t\t\tparam.weight[param.nr_weight-1] = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmexPrintf(\"Unknown option -%c\\n\", argv[i-1][1]);\n\t\t\t\treturn 1;\n\t\t}\n\t}\n\n\tsvm_set_print_string_function(print_func);\n\n\treturn 0;\n}\n\n// read in a problem (in svmlight format)\nint read_problem_dense(const mxArray *label_vec, const mxArray *instance_mat)\n{\n\t// using size_t due to the output type of matlab functions\n\tsize_t i, j, k, l;\n\tsize_t elements, max_index, sc, label_vector_row_num;\n\tdouble *samples, *labels;\n\n\tprob.x = NULL;\n\tprob.y = NULL;\n\tx_space = NULL;\n\n\tlabels = mxGetPr(label_vec);\n\tsamples = mxGetPr(instance_mat);\n\tsc = mxGetN(instance_mat);\n\n\telements = 0;\n\t// number of instances\n\tl = mxGetM(instance_mat);\n\tlabel_vector_row_num = mxGetM(label_vec);\n\tprob.l = (int)l;\n\n\tif(label_vector_row_num!=l)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\treturn -1;\n\t}\n\n\tif(param.kernel_type == PRECOMPUTED)\n\t\telements = l * (sc + 1);\n\telse\n\t{\n\t\tfor(i = 0; i < l; i++)\n\t\t{\n\t\t\tfor(k = 0; k < sc; k++)\n\t\t\t\tif(samples[k * l + i] != 0)\n\t\t\t\t\telements++;\n\t\t\t// count the '-1' element\n\t\t\telements++;\n\t\t}\n\t}\n\n\tprob.y = Malloc(double,l);\n\tprob.x = Malloc(struct svm_node *,l);\n\tx_space = Malloc(struct svm_node, elements);\n\n\tmax_index = sc;\n\tj = 0;\n\tfor(i = 0; i < l; i++)\n\t{\n\t\tprob.x[i] = &x_space[j];\n\t\tprob.y[i] = labels[i];\n\n\t\tfor(k = 0; k < sc; k++)\n\t\t{\n\t\t\tif(param.kernel_type == PRECOMPUTED || samples[k * l + i] != 0)\n\t\t\t{\n\t\t\t\tx_space[j].index = (int)k + 1;\n\t\t\t\tx_space[j].value = samples[k * l + i];\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\t\tx_space[j++].index = -1;\n\t}\n\n\tif(param.gamma == 0 && max_index > 0)\n\t\tparam.gamma = (double)(1.0/max_index);\n\n\tif(param.kernel_type == PRECOMPUTED)\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tif((int)prob.x[i][0].value <= 0 || (int)prob.x[i][0].value > (int)max_index)\n\t\t\t{\n\t\t\t\tmexPrintf(\"Wrong input format: sample_serial_number out of range\\n\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\n\treturn 0;\n}\n\nint read_problem_sparse(const mxArray *label_vec, const mxArray *instance_mat)\n{\n\tmwIndex *ir, *jc, low, high, k;\n\t// using size_t due to the output type of matlab functions\n\tsize_t i, j, l, elements, max_index, label_vector_row_num;\n\tmwSize num_samples;\n\tdouble *samples, *labels;\n\tmxArray *instance_mat_col; // transposed instance sparse matrix\n\n\tprob.x = NULL;\n\tprob.y = NULL;\n\tx_space = NULL;\n\n\t// transpose instance matrix\n\t{\n\t\tmxArray *prhs[1], *plhs[1];\n\t\tprhs[0] = mxDuplicateArray(instance_mat);\n\t\tif(mexCallMATLAB(1, plhs, 1, prhs, \"transpose\"))\n\t\t{\n\t\t\tmexPrintf(\"Error: cannot transpose training instance matrix\\n\");\n\t\t\treturn -1;\n\t\t}\n\t\tinstance_mat_col = plhs[0];\n\t\tmxDestroyArray(prhs[0]);\n\t}\n\n\t// each column is one instance\n\tlabels = mxGetPr(label_vec);\n\tsamples = mxGetPr(instance_mat_col);\n\tir = mxGetIr(instance_mat_col);\n\tjc = mxGetJc(instance_mat_col);\n\n\tnum_samples = mxGetNzmax(instance_mat_col);\n\n\t// number of instances\n\tl = mxGetN(instance_mat_col);\n\tlabel_vector_row_num = mxGetM(label_vec);\n\tprob.l = (int) l;\n\n\tif(label_vector_row_num!=l)\n\t{\n\t\tmexPrintf(\"Length of label vector does not match # of instances.\\n\");\n\t\treturn -1;\n\t}\n\n\telements = num_samples + l;\n\tmax_index = mxGetM(instance_mat_col);\n\n\tprob.y = Malloc(double,l);\n\tprob.x = Malloc(struct svm_node *,l);\n\tx_space = Malloc(struct svm_node, elements);\n\n\tj = 0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\tprob.x[i] = &x_space[j];\n\t\tprob.y[i] = labels[i];\n\t\tlow = jc[i], high = jc[i+1];\n\t\tfor(k=low;k<high;k++)\n\t\t{\n\t\t\tx_space[j].index = (int)ir[k] + 1;\n\t\t\tx_space[j].value = samples[k];\n\t\t\tj++;\n\t \t}\n\t\tx_space[j++].index = -1;\n\t}\n\n\tif(param.gamma == 0 && max_index > 0)\n\t\tparam.gamma = (double)(1.0/max_index);\n\n\treturn 0;\n}\n\nstatic void fake_answer(int nlhs, mxArray *plhs[])\n{\n\tint i;\n\tfor(i=0;i<nlhs;i++)\n\t\tplhs[i] = mxCreateDoubleMatrix(0, 0, mxREAL);\n}\n\n// Interface function of matlab\n// now assume prhs[0]: label prhs[1]: features\nvoid mexFunction( int nlhs, mxArray *plhs[],\n\t\tint nrhs, const mxArray *prhs[] )\n{\n\tconst char *error_msg;\n\n\t// fix random seed to have same results for each run\n\t// (for cross validation and probability estimation)\n\tsrand(1);\n\n\tif(nlhs > 1)\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n\n\t// Transform the input Matrix to libsvm format\n\tif(nrhs > 1 && nrhs < 4)\n\t{\n\t\tint err;\n\n\t\tif(!mxIsDouble(prhs[0]) || !mxIsDouble(prhs[1]))\n\t\t{\n\t\t\tmexPrintf(\"Error: label vector and instance matrix must be double\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(mxIsSparse(prhs[0]))\n\t\t{\n\t\t\tmexPrintf(\"Error: label vector should not be in sparse format\\n\");\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(parse_command_line(nrhs, prhs, NULL))\n\t\t{\n\t\t\texit_with_help();\n\t\t\tsvm_destroy_param(&param);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(mxIsSparse(prhs[1]))\n\t\t{\n\t\t\tif(param.kernel_type == PRECOMPUTED)\n\t\t\t{\n\t\t\t\t// precomputed kernel requires dense matrix, so we make one\n\t\t\t\tmxArray *rhs[1], *lhs[1];\n\n\t\t\t\trhs[0] = mxDuplicateArray(prhs[1]);\n\t\t\t\tif(mexCallMATLAB(1, lhs, 1, rhs, \"full\"))\n\t\t\t\t{\n\t\t\t\t\tmexPrintf(\"Error: cannot generate a full training instance matrix\\n\");\n\t\t\t\t\tsvm_destroy_param(&param);\n\t\t\t\t\tfake_answer(nlhs, plhs);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\terr = read_problem_dense(prhs[0], lhs[0]);\n\t\t\t\tmxDestroyArray(lhs[0]);\n\t\t\t\tmxDestroyArray(rhs[0]);\n\t\t\t}\n\t\t\telse\n\t\t\t\terr = read_problem_sparse(prhs[0], prhs[1]);\n\t\t}\n\t\telse\n\t\t\terr = read_problem_dense(prhs[0], prhs[1]);\n\n\t\t// svmtrain's original code\n\t\terror_msg = svm_check_parameter(&prob, &param);\n\n\t\tif(err || error_msg)\n\t\t{\n\t\t\tif (error_msg != NULL)\n\t\t\t\tmexPrintf(\"Error: %s\\n\", error_msg);\n\t\t\tsvm_destroy_param(&param);\n\t\t\tfree(prob.y);\n\t\t\tfree(prob.x);\n\t\t\tfree(x_space);\n\t\t\tfake_answer(nlhs, plhs);\n\t\t\treturn;\n\t\t}\n\n\t\tif(cross_validation)\n\t\t{\n\t\t\tdouble *ptr;\n\t\t\tplhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);\n\t\t\tptr = mxGetPr(plhs[0]);\n\t\t\tptr[0] = do_cross_validation();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint nr_feat = (int)mxGetN(prhs[1]);\n\t\t\tconst char *error_msg;\n\t\t\tmodel = svm_train(&prob, &param);\n\t\t\terror_msg = model_to_matlab_structure(plhs, nr_feat, model);\n\t\t\tif(error_msg)\n\t\t\t\tmexPrintf(\"Error: can't convert libsvm model to matrix structure: %s\\n\", error_msg);\n\t\t\tsvm_free_and_destroy_model(&model);\n\t\t}\n\t\tsvm_destroy_param(&param);\n\t\tfree(prob.y);\n\t\tfree(prob.x);\n\t\tfree(x_space);\n\t}\n\telse\n\t{\n\t\texit_with_help();\n\t\tfake_answer(nlhs, plhs);\n\t\treturn;\n\t}\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/python/Makefile",
    "content": "all = lib\n\nlib:\n\tmake -C .. lib\n"
  },
  {
    "path": "Matlab/libsvm-3.19/python/README",
    "content": "----------------------------------\n--- Python interface of LIBSVM ---\n----------------------------------\n\nTable of Contents\n=================\n\n- Introduction\n- Installation\n- Quick Start\n- Design Description\n- Data Structures\n- Utility Functions\n- Additional Information\n\nIntroduction\n============\n\nPython (http://www.python.org/) is a programming language suitable for rapid\ndevelopment. This tool provides a simple Python interface to LIBSVM, a library\nfor support vector machines (http://www.csie.ntu.edu.tw/~cjlin/libsvm). The\ninterface is very easy to use as the usage is the same as that of LIBSVM. The\ninterface is developed with the built-in Python library \"ctypes.\"\n\nInstallation\n============\n\nOn Unix systems, type\n\n> make\n\nThe interface needs only LIBSVM shared library, which is generated by\nthe above command. We assume that the shared library is on the LIBSVM\nmain directory or in the system path.\n\nFor windows, the shared library libsvm.dll for 32-bit python is ready\nin the directory `..\\windows'. You can also copy it to the system\ndirectory (e.g., `C:\\WINDOWS\\system32\\' for Windows XP). To regenerate\nthe shared library, please follow the instruction of building windows\nbinaries in LIBSVM README.\n\nQuick Start\n===========\n\nThere are two levels of usage. The high-level one uses utility functions\nin svmutil.py and the usage is the same as the LIBSVM MATLAB interface.\n\n>>> from svmutil import *\n# Read data in LIBSVM format\n>>> y, x = svm_read_problem('../heart_scale')\n>>> m = svm_train(y[:200], x[:200], '-c 4')\n>>> p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)\n\n# Construct problem in python format\n# Dense data\n>>> y, x = [1,-1], [[1,0,1], [-1,0,-1]]\n# Sparse data\n>>> y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}]\n>>> prob  = svm_problem(y, x)\n>>> param = svm_parameter('-t 0 -c 4 -b 1')\n>>> m = svm_train(prob, param)\n\n# Precomputed kernel data (-t 4)\n# Dense data\n>>> y, x = [1,-1], [[1, 2, -2], [2, -2, 2]]\n# Sparse data\n>>> y, x = [1,-1], [{0:1, 1:2, 2:-2}, {0:2, 1:-2, 2:2}]\n# isKernel=True must be set for precomputer kernel\n>>> prob  = svm_problem(y, x, isKernel=True)\n>>> param = svm_parameter('-t 4 -c 4 -b 1')\n>>> m = svm_train(prob, param)\n# For the format of precomputed kernel, please read LIBSVM README.\n\n\n# Other utility functions\n>>> svm_save_model('heart_scale.model', m)\n>>> m = svm_load_model('heart_scale.model')\n>>> p_label, p_acc, p_val = svm_predict(y, x, m, '-b 1')\n>>> ACC, MSE, SCC = evaluations(y, p_label)\n\n# Getting online help\n>>> help(svm_train)\n\nThe low-level use directly calls C interfaces imported by svm.py. Note that\nall arguments and return values are in ctypes format. You need to handle them\ncarefully.\n\n>>> from svm import *\n>>> prob = svm_problem([1,-1], [{1:1, 3:1}, {1:-1,3:-1}])\n>>> param = svm_parameter('-c 4')\n>>> m = libsvm.svm_train(prob, param) # m is a ctype pointer to an svm_model\n# Convert a Python-format instance to svm_nodearray, a ctypes structure\n>>> x0, max_idx = gen_svm_nodearray({1:1, 3:1})\n>>> label = libsvm.svm_predict(m, x0)\n\nDesign Description\n==================\n\nThere are two files svm.py and svmutil.py, which respectively correspond to\nlow-level and high-level use of the interface.\n\nIn svm.py, we adopt the Python built-in library \"ctypes,\" so that\nPython can directly access C structures and interface functions defined\nin svm.h.\n\nWhile advanced users can use structures/functions in svm.py, to\navoid handling ctypes structures, in svmutil.py we provide some easy-to-use\nfunctions. The usage is similar to LIBSVM MATLAB interface.\n\nData Structures\n===============\n\nFour data structures derived from svm.h are svm_node, svm_problem, svm_parameter, \nand svm_model. They all contain fields with the same names in svm.h. Access \nthese fields carefully because you directly use a C structure instead of a \nPython object. For svm_model, accessing the field directly is not recommanded. \nProgrammers should use the interface functions or methods of svm_model class\nin Python to get the values. The following description introduces additional\nfields and methods.\n\nBefore using the data structures, execute the following command to load the\nLIBSVM shared library:\n\n    >>> from svm import *\n\n- class svm_node:\n\n    Construct an svm_node.\n\n    >>> node = svm_node(idx, val)\n\n    idx: an integer indicates the feature index.\n\n    val: a float indicates the feature value.\n\n    Show the index and the value of a node.\n\n    >>> print(node) \n\n- Function: gen_svm_nodearray(xi [,feature_max=None [,isKernel=False]])\n\n    Generate a feature vector from a Python list/tuple or a dictionary:\n\n    >>> xi, max_idx = gen_svm_nodearray({1:1, 3:1, 5:-2})\n\n    xi: the returned svm_nodearray (a ctypes structure)\n\n    max_idx: the maximal feature index of xi\n\n    feature_max: if feature_max is assigned, features with indices larger than\n                 feature_max are removed.\n    \n    isKernel: if isKernel == True, the list index starts from 0 for precomputed\n              kernel. Otherwise, the list index starts from 1. The default \n\t      value is False.\n\n- class svm_problem:\n\n    Construct an svm_problem instance\n\n    >>> prob = svm_problem(y, x)\n\n    y: a Python list/tuple of l labels (type must be int/double).\n\n    x: a Python list/tuple of l data instances. Each element of x must be\n       an instance of list/tuple/dictionary type.\n\n    Note that if your x contains sparse data (i.e., dictionary), the internal\n    ctypes data format is still sparse.\n\n    For pre-computed kernel, the isKernel flag should be set to True:\n\n    >>> prob = svm_problem(y, x, isKernel=True)\n\n    Please read LIBSVM README for more details of pre-computed kernel.\n\n- class svm_parameter:\n\n    Construct an svm_parameter instance\n\n    >>> param = svm_parameter('training_options')\n\n    If 'training_options' is empty, LIBSVM default values are applied.\n\n    Set param to LIBSVM default values.\n\n    >>> param.set_to_default_values()\n\n    Parse a string of options.\n\n    >>> param.parse_options('training_options')\n\n    Show values of parameters.\n\n    >>> print(param)\n\n- class svm_model:\n\n    There are two ways to obtain an instance of svm_model:\n\n    >>> model = svm_train(y, x)\n    >>> model = svm_load_model('model_file_name')\n\n    Note that the returned structure of interface functions\n    libsvm.svm_train and libsvm.svm_load_model is a ctypes pointer of\n    svm_model, which is different from the svm_model object returned\n    by svm_train and svm_load_model in svmutil.py. We provide a\n    function toPyModel for the conversion:\n\n    >>> model_ptr = libsvm.svm_train(prob, param)\n    >>> model = toPyModel(model_ptr)\n\n    If you obtain a model in a way other than the above approaches,\n    handle it carefully to avoid memory leak or segmentation fault.\n\n    Some interface functions to access LIBSVM models are wrapped as\n    members of the class svm_model:\n\n    >>> svm_type = model.get_svm_type()\n    >>> nr_class = model.get_nr_class()\n    >>> svr_probability = model.get_svr_probability()\n    >>> class_labels = model.get_labels()\n    >>> sv_indices = model.get_sv_indices()\n    >>> nr_sv = model.get_nr_sv()\n    >>> is_prob_model = model.is_probability_model()\n    >>> support_vector_coefficients = model.get_sv_coef()\n    >>> support_vectors = model.get_SV() \n\nUtility Functions\n=================\n\nTo use utility functions, type\n\n    >>> from svmutil import *\n\nThe above command loads\n    svm_train()        : train an SVM model\n    svm_predict()      : predict testing data\n    svm_read_problem() : read the data from a LIBSVM-format file.\n    svm_load_model()   : load a LIBSVM model.\n    svm_save_model()   : save model to a file.\n    evaluations()      : evaluate prediction results.\n\n- Function: svm_train\n\n    There are three ways to call svm_train()\n\n    >>> model = svm_train(y, x [, 'training_options'])\n    >>> model = svm_train(prob [, 'training_options'])\n    >>> model = svm_train(prob, param)\n\n    y: a list/tuple of l training labels (type must be int/double).\n\n    x: a list/tuple of l training instances. The feature vector of\n       each training instance is an instance of list/tuple or dictionary.\n\n    training_options: a string in the same form as that for LIBSVM command\n                      mode.\n\n    prob: an svm_problem instance generated by calling\n          svm_problem(y, x).\n\t  For pre-computed kernel, you should use\n\t  svm_problem(y, x, isKernel=True)\n\n    param: an svm_parameter instance generated by calling\n           svm_parameter('training_options')\n\n    model: the returned svm_model instance. See svm.h for details of this\n           structure. If '-v' is specified, cross validation is\n           conducted and the returned model is just a scalar: cross-validation\n           accuracy for classification and mean-squared error for regression.\n\n    To train the same data many times with different\n    parameters, the second and the third ways should be faster..\n\n    Examples:\n\n    >>> y, x = svm_read_problem('../heart_scale')\n    >>> prob = svm_problem(y, x)\n    >>> param = svm_parameter('-s 3 -c 5 -h 0')\n    >>> m = svm_train(y, x, '-c 5')\n    >>> m = svm_train(prob, '-t 2 -c 5')\n    >>> m = svm_train(prob, param)\n    >>> CV_ACC = svm_train(y, x, '-v 3')\n\n- Function: svm_predict\n\n    To predict testing data with a model, use\n\n    >>> p_labs, p_acc, p_vals = svm_predict(y, x, model [,'predicting_options'])\n\n    y: a list/tuple of l true labels (type must be int/double). It is used\n       for calculating the accuracy. Use [0]*len(x) if true labels are\n       unavailable.\n\n    x: a list/tuple of l predicting instances. The feature vector of\n       each predicting instance is an instance of list/tuple or dictionary.\n\n    predicting_options: a string of predicting options in the same format as\n                        that of LIBSVM.\n\n    model: an svm_model instance.\n\n    p_labels: a list of predicted labels\n\n    p_acc: a tuple including accuracy (for classification), mean\n           squared error, and squared correlation coefficient (for\n           regression).\n\n    p_vals: a list of decision values or probability estimates (if '-b 1'\n            is specified). If k is the number of classes in training data, \n\t    for decision values, each element includes results of predicting \n\t    k(k-1)/2 binary-class SVMs. For classification, k = 1 is a \n\t    special case. Decision value [+1] is returned for each testing\n\t    instance, instead of an empty list.\n\t    For probabilities, each element contains k values indicating\n            the probability that the testing instance is in each class.\n            Note that the order of classes is the same as the 'model.label'\n            field in the model structure.\n\n    Example:\n\n    >>> m = svm_train(y, x, '-c 5')\n    >>> p_labels, p_acc, p_vals = svm_predict(y, x, m)\n\n- Functions:  svm_read_problem/svm_load_model/svm_save_model\n\n    See the usage by examples:\n\n    >>> y, x = svm_read_problem('data.txt')\n    >>> m = svm_load_model('model_file')\n    >>> svm_save_model('model_file', m)\n\n- Function: evaluations\n\n    Calculate some evaluations using the true values (ty) and predicted\n    values (pv):\n\n    >>> (ACC, MSE, SCC) = evaluations(ty, pv)\n\n    ty: a list of true values.\n\n    pv: a list of predict values.\n\n    ACC: accuracy.\n\n    MSE: mean squared error.\n\n    SCC: squared correlation coefficient.\n\n\nAdditional Information\n======================\n\nThis interface was written by Hsiang-Fu Yu from Department of Computer\nScience, National Taiwan University. If you find this tool useful, please\ncite LIBSVM as follows\n\nChih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support\nvector machines. ACM Transactions on Intelligent Systems and\nTechnology, 2:27:1--27:27, 2011. Software available at\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm\n\nFor any question, please contact Chih-Jen Lin <cjlin@csie.ntu.edu.tw>,\nor check the FAQ page:\n\nhttp://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html\n"
  },
  {
    "path": "Matlab/libsvm-3.19/python/svm.py",
    "content": "#!/usr/bin/env python\n\nfrom ctypes import *\nfrom ctypes.util import find_library\nfrom os import path\nimport sys\n\n__all__ = ['libsvm', 'svm_problem', 'svm_parameter',\n           'toPyModel', 'gen_svm_nodearray', 'print_null', 'svm_node', 'C_SVC',\n           'EPSILON_SVR', 'LINEAR', 'NU_SVC', 'NU_SVR', 'ONE_CLASS',\n           'POLY', 'PRECOMPUTED', 'PRINT_STRING_FUN', 'RBF',\n           'SIGMOID', 'c_double', 'svm_model']\n\ntry:\n\tdirname = path.dirname(path.abspath(__file__))\n\tif sys.platform == 'win32':\n\t\tlibsvm = CDLL(path.join(dirname, r'..\\windows\\libsvm.dll'))\n\telse:\n\t\tlibsvm = CDLL(path.join(dirname, '../libsvm.so.2'))\nexcept:\n# For unix the prefix 'lib' is not considered.\n\tif find_library('svm'):\n\t\tlibsvm = CDLL(find_library('svm'))\n\telif find_library('libsvm'):\n\t\tlibsvm = CDLL(find_library('libsvm'))\n\telse:\n\t\traise Exception('LIBSVM library not found.')\n\nC_SVC = 0\nNU_SVC = 1\nONE_CLASS = 2\nEPSILON_SVR = 3\nNU_SVR = 4\n\nLINEAR = 0\nPOLY = 1\nRBF = 2\nSIGMOID = 3\nPRECOMPUTED = 4\n\nPRINT_STRING_FUN = CFUNCTYPE(None, c_char_p)\ndef print_null(s):\n\treturn\n\ndef genFields(names, types):\n\treturn list(zip(names, types))\n\ndef fillprototype(f, restype, argtypes):\n\tf.restype = restype\n\tf.argtypes = argtypes\n\nclass svm_node(Structure):\n\t_names = [\"index\", \"value\"]\n\t_types = [c_int, c_double]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __str__(self):\n\t\treturn '%d:%g' % (self.index, self.value)\n\ndef gen_svm_nodearray(xi, feature_max=None, isKernel=None):\n\tif isinstance(xi, dict):\n\t\tindex_range = xi.keys()\n\telif isinstance(xi, (list, tuple)):\n\t\tif not isKernel:\n\t\t\txi = [0] + xi  # idx should start from 1\n\t\tindex_range = range(len(xi))\n\telse:\n\t\traise TypeError('xi should be a dictionary, list or tuple')\n\n\tif feature_max:\n\t\tassert(isinstance(feature_max, int))\n\t\tindex_range = filter(lambda j: j <= feature_max, index_range)\n\tif not isKernel:\n\t\tindex_range = filter(lambda j:xi[j] != 0, index_range)\n\n\tindex_range = sorted(index_range)\n\tret = (svm_node * (len(index_range)+1))()\n\tret[-1].index = -1\n\tfor idx, j in enumerate(index_range):\n\t\tret[idx].index = j\n\t\tret[idx].value = xi[j]\n\tmax_idx = 0\n\tif index_range:\n\t\tmax_idx = index_range[-1]\n\treturn ret, max_idx\n\nclass svm_problem(Structure):\n\t_names = [\"l\", \"y\", \"x\"]\n\t_types = [c_int, POINTER(c_double), POINTER(POINTER(svm_node))]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __init__(self, y, x, isKernel=None):\n\t\tif len(y) != len(x):\n\t\t\traise ValueError(\"len(y) != len(x)\")\n\t\tself.l = l = len(y)\n\n\t\tmax_idx = 0\n\t\tx_space = self.x_space = []\n\t\tfor i, xi in enumerate(x):\n\t\t\ttmp_xi, tmp_idx = gen_svm_nodearray(xi,isKernel=isKernel)\n\t\t\tx_space += [tmp_xi]\n\t\t\tmax_idx = max(max_idx, tmp_idx)\n\t\tself.n = max_idx\n\n\t\tself.y = (c_double * l)()\n\t\tfor i, yi in enumerate(y): self.y[i] = yi\n\n\t\tself.x = (POINTER(svm_node) * l)()\n\t\tfor i, xi in enumerate(self.x_space): self.x[i] = xi\n\nclass svm_parameter(Structure):\n\t_names = [\"svm_type\", \"kernel_type\", \"degree\", \"gamma\", \"coef0\",\n\t\t\t\"cache_size\", \"eps\", \"C\", \"nr_weight\", \"weight_label\", \"weight\",\n\t\t\t\"nu\", \"p\", \"shrinking\", \"probability\"]\n\t_types = [c_int, c_int, c_int, c_double, c_double,\n\t\t\tc_double, c_double, c_double, c_int, POINTER(c_int), POINTER(c_double),\n\t\t\tc_double, c_double, c_int, c_int]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __init__(self, options = None):\n\t\tif options == None:\n\t\t\toptions = ''\n\t\tself.parse_options(options)\n\n\tdef __str__(self):\n\t\ts = ''\n\t\tattrs = svm_parameter._names + list(self.__dict__.keys())\n\t\tvalues = map(lambda attr: getattr(self, attr), attrs)\n\t\tfor attr, val in zip(attrs, values):\n\t\t\ts += (' %s: %s\\n' % (attr, val))\n\t\ts = s.strip()\n\n\t\treturn s\n\n\tdef set_to_default_values(self):\n\t\tself.svm_type = C_SVC;\n\t\tself.kernel_type = RBF\n\t\tself.degree = 3\n\t\tself.gamma = 0\n\t\tself.coef0 = 0\n\t\tself.nu = 0.5\n\t\tself.cache_size = 100\n\t\tself.C = 1\n\t\tself.eps = 0.001\n\t\tself.p = 0.1\n\t\tself.shrinking = 1\n\t\tself.probability = 0\n\t\tself.nr_weight = 0\n\t\tself.weight_label = (c_int*0)()\n\t\tself.weight = (c_double*0)()\n\t\tself.cross_validation = False\n\t\tself.nr_fold = 0\n\t\tself.print_func = cast(None, PRINT_STRING_FUN)\n\n\tdef parse_options(self, options):\n\t\tif isinstance(options, list):\n\t\t\targv = options\n\t\telif isinstance(options, str):\n\t\t\targv = options.split()\n\t\telse:\n\t\t\traise TypeError(\"arg 1 should be a list or a str.\")\n\t\tself.set_to_default_values()\n\t\tself.print_func = cast(None, PRINT_STRING_FUN)\n\t\tweight_label = []\n\t\tweight = []\n\n\t\ti = 0\n\t\twhile i < len(argv):\n\t\t\tif argv[i] == \"-s\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.svm_type = int(argv[i])\n\t\t\telif argv[i] == \"-t\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.kernel_type = int(argv[i])\n\t\t\telif argv[i] == \"-d\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.degree = int(argv[i])\n\t\t\telif argv[i] == \"-g\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.gamma = float(argv[i])\n\t\t\telif argv[i] == \"-r\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.coef0 = float(argv[i])\n\t\t\telif argv[i] == \"-n\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.nu = float(argv[i])\n\t\t\telif argv[i] == \"-m\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.cache_size = float(argv[i])\n\t\t\telif argv[i] == \"-c\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.C = float(argv[i])\n\t\t\telif argv[i] == \"-e\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.eps = float(argv[i])\n\t\t\telif argv[i] == \"-p\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.p = float(argv[i])\n\t\t\telif argv[i] == \"-h\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.shrinking = int(argv[i])\n\t\t\telif argv[i] == \"-b\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.probability = int(argv[i])\n\t\t\telif argv[i] == \"-q\":\n\t\t\t\tself.print_func = PRINT_STRING_FUN(print_null)\n\t\t\telif argv[i] == \"-v\":\n\t\t\t\ti = i + 1\n\t\t\t\tself.cross_validation = 1\n\t\t\t\tself.nr_fold = int(argv[i])\n\t\t\t\tif self.nr_fold < 2:\n\t\t\t\t\traise ValueError(\"n-fold cross validation: n must >= 2\")\n\t\t\telif argv[i].startswith(\"-w\"):\n\t\t\t\ti = i + 1\n\t\t\t\tself.nr_weight += 1\n\t\t\t\tnr_weight = self.nr_weight\n\t\t\t\tweight_label += [int(argv[i-1][2:])]\n\t\t\t\tweight += [float(argv[i])]\n\t\t\telse:\n\t\t\t\traise ValueError(\"Wrong options\")\n\t\t\ti += 1\n\n\t\tlibsvm.svm_set_print_string_function(self.print_func)\n\t\tself.weight_label = (c_int*self.nr_weight)()\n\t\tself.weight = (c_double*self.nr_weight)()\n\t\tfor i in range(self.nr_weight):\n\t\t\tself.weight[i] = weight[i]\n\t\t\tself.weight_label[i] = weight_label[i]\n\nclass svm_model(Structure):\n\t_names = ['param', 'nr_class', 'l', 'SV', 'sv_coef', 'rho',\n\t\t\t'probA', 'probB', 'sv_indices', 'label', 'nSV', 'free_sv']\n\t_types = [svm_parameter, c_int, c_int, POINTER(POINTER(svm_node)),\n\t\t\tPOINTER(POINTER(c_double)), POINTER(c_double),\n\t\t\tPOINTER(c_double), POINTER(c_double), POINTER(c_int),\n\t\t\tPOINTER(c_int), POINTER(c_int), c_int]\n\t_fields_ = genFields(_names, _types)\n\n\tdef __init__(self):\n\t\tself.__createfrom__ = 'python'\n\n\tdef __del__(self):\n\t\t# free memory created by C to avoid memory leak\n\t\tif hasattr(self, '__createfrom__') and self.__createfrom__ == 'C':\n\t\t\tlibsvm.svm_free_and_destroy_model(pointer(self))\n\n\tdef get_svm_type(self):\n\t\treturn libsvm.svm_get_svm_type(self)\n\n\tdef get_nr_class(self):\n\t\treturn libsvm.svm_get_nr_class(self)\n\n\tdef get_svr_probability(self):\n\t\treturn libsvm.svm_get_svr_probability(self)\n\n\tdef get_labels(self):\n\t\tnr_class = self.get_nr_class()\n\t\tlabels = (c_int * nr_class)()\n\t\tlibsvm.svm_get_labels(self, labels)\n\t\treturn labels[:nr_class]\n\n\tdef get_sv_indices(self):\n\t\ttotal_sv = self.get_nr_sv()\n\t\tsv_indices = (c_int * total_sv)()\n\t\tlibsvm.svm_get_sv_indices(self, sv_indices)\n\t\treturn sv_indices[:total_sv]\n\n\tdef get_nr_sv(self):\n\t\treturn libsvm.svm_get_nr_sv(self)\n\n\tdef is_probability_model(self):\n\t\treturn (libsvm.svm_check_probability_model(self) == 1)\n\n\tdef get_sv_coef(self):\n\t\treturn [tuple(self.sv_coef[j][i] for j in xrange(self.nr_class - 1))\n\t\t\t\tfor i in xrange(self.l)]\n\n\tdef get_SV(self):\n\t\tresult = []\n\t\tfor sparse_sv in self.SV[:self.l]:\n\t\t\trow = dict()\n\n\t\t\ti = 0\n\t\t\twhile True:\n\t\t\t\trow[sparse_sv[i].index] = sparse_sv[i].value\n\t\t\t\tif sparse_sv[i].index == -1:\n\t\t\t\t\tbreak\n\t\t\t\ti += 1\n\n\t\t\tresult.append(row)\n\t\treturn result\n\ndef toPyModel(model_ptr):\n\t\"\"\"\n\ttoPyModel(model_ptr) -> svm_model\n\n\tConvert a ctypes POINTER(svm_model) to a Python svm_model\n\t\"\"\"\n\tif bool(model_ptr) == False:\n\t\traise ValueError(\"Null pointer\")\n\tm = model_ptr.contents\n\tm.__createfrom__ = 'C'\n\treturn m\n\nfillprototype(libsvm.svm_train, POINTER(svm_model), [POINTER(svm_problem), POINTER(svm_parameter)])\nfillprototype(libsvm.svm_cross_validation, None, [POINTER(svm_problem), POINTER(svm_parameter), c_int, POINTER(c_double)])\n\nfillprototype(libsvm.svm_save_model, c_int, [c_char_p, POINTER(svm_model)])\nfillprototype(libsvm.svm_load_model, POINTER(svm_model), [c_char_p])\n\nfillprototype(libsvm.svm_get_svm_type, c_int, [POINTER(svm_model)])\nfillprototype(libsvm.svm_get_nr_class, c_int, [POINTER(svm_model)])\nfillprototype(libsvm.svm_get_labels, None, [POINTER(svm_model), POINTER(c_int)])\nfillprototype(libsvm.svm_get_sv_indices, None, [POINTER(svm_model), POINTER(c_int)])\nfillprototype(libsvm.svm_get_nr_sv, c_int, [POINTER(svm_model)])\nfillprototype(libsvm.svm_get_svr_probability, c_double, [POINTER(svm_model)])\n\nfillprototype(libsvm.svm_predict_values, c_double, [POINTER(svm_model), POINTER(svm_node), POINTER(c_double)])\nfillprototype(libsvm.svm_predict, c_double, [POINTER(svm_model), POINTER(svm_node)])\nfillprototype(libsvm.svm_predict_probability, c_double, [POINTER(svm_model), POINTER(svm_node), POINTER(c_double)])\n\nfillprototype(libsvm.svm_free_model_content, None, [POINTER(svm_model)])\nfillprototype(libsvm.svm_free_and_destroy_model, None, [POINTER(POINTER(svm_model))])\nfillprototype(libsvm.svm_destroy_param, None, [POINTER(svm_parameter)])\n\nfillprototype(libsvm.svm_check_parameter, c_char_p, [POINTER(svm_problem), POINTER(svm_parameter)])\nfillprototype(libsvm.svm_check_probability_model, c_int, [POINTER(svm_model)])\nfillprototype(libsvm.svm_set_print_string_function, None, [PRINT_STRING_FUN])\n"
  },
  {
    "path": "Matlab/libsvm-3.19/python/svmutil.py",
    "content": "#!/usr/bin/env python\n\nimport os\nimport sys\nfrom svm import *\nfrom svm import __all__ as svm_all\n\n\n__all__ = ['evaluations', 'svm_load_model', 'svm_predict', 'svm_read_problem',\n           'svm_save_model', 'svm_train'] + svm_all\n\nsys.path = [os.path.dirname(os.path.abspath(__file__))] + sys.path\n\ndef svm_read_problem(data_file_name):\n\t\"\"\"\n\tsvm_read_problem(data_file_name) -> [y, x]\n\n\tRead LIBSVM-format data from data_file_name and return labels y\n\tand data instances x.\n\t\"\"\"\n\tprob_y = []\n\tprob_x = []\n\tfor line in open(data_file_name):\n\t\tline = line.split(None, 1)\n\t\t# In case an instance with all zero features\n\t\tif len(line) == 1: line += ['']\n\t\tlabel, features = line\n\t\txi = {}\n\t\tfor e in features.split():\n\t\t\tind, val = e.split(\":\")\n\t\t\txi[int(ind)] = float(val)\n\t\tprob_y += [float(label)]\n\t\tprob_x += [xi]\n\treturn (prob_y, prob_x)\n\ndef svm_load_model(model_file_name):\n\t\"\"\"\n\tsvm_load_model(model_file_name) -> model\n\n\tLoad a LIBSVM model from model_file_name and return.\n\t\"\"\"\n\tmodel = libsvm.svm_load_model(model_file_name.encode())\n\tif not model:\n\t\tprint(\"can't open model file %s\" % model_file_name)\n\t\treturn None\n\tmodel = toPyModel(model)\n\treturn model\n\ndef svm_save_model(model_file_name, model):\n\t\"\"\"\n\tsvm_save_model(model_file_name, model) -> None\n\n\tSave a LIBSVM model to the file model_file_name.\n\t\"\"\"\n\tlibsvm.svm_save_model(model_file_name.encode(), model)\n\ndef evaluations(ty, pv):\n\t\"\"\"\n\tevaluations(ty, pv) -> (ACC, MSE, SCC)\n\n\tCalculate accuracy, mean squared error and squared correlation coefficient\n\tusing the true values (ty) and predicted values (pv).\n\t\"\"\"\n\tif len(ty) != len(pv):\n\t\traise ValueError(\"len(ty) must equal to len(pv)\")\n\ttotal_correct = total_error = 0\n\tsumv = sumy = sumvv = sumyy = sumvy = 0\n\tfor v, y in zip(pv, ty):\n\t\tif y == v:\n\t\t\ttotal_correct += 1\n\t\ttotal_error += (v-y)*(v-y)\n\t\tsumv += v\n\t\tsumy += y\n\t\tsumvv += v*v\n\t\tsumyy += y*y\n\t\tsumvy += v*y\n\tl = len(ty)\n\tACC = 100.0*total_correct/l\n\tMSE = total_error/l\n\ttry:\n\t\tSCC = ((l*sumvy-sumv*sumy)*(l*sumvy-sumv*sumy))/((l*sumvv-sumv*sumv)*(l*sumyy-sumy*sumy))\n\texcept:\n\t\tSCC = float('nan')\n\treturn (ACC, MSE, SCC)\n\ndef svm_train(arg1, arg2=None, arg3=None):\n\t\"\"\"\n\tsvm_train(y, x [, options]) -> model | ACC | MSE\n\tsvm_train(prob [, options]) -> model | ACC | MSE\n\tsvm_train(prob, param) -> model | ACC| MSE\n\n\tTrain an SVM model from data (y, x) or an svm_problem prob using\n\t'options' or an svm_parameter param.\n\tIf '-v' is specified in 'options' (i.e., cross validation)\n\teither accuracy (ACC) or mean-squared error (MSE) is returned.\n\toptions:\n\t    -s svm_type : set type of SVM (default 0)\n\t        0 -- C-SVC\t\t(multi-class classification)\n\t        1 -- nu-SVC\t\t(multi-class classification)\n\t        2 -- one-class SVM\n\t        3 -- epsilon-SVR\t(regression)\n\t        4 -- nu-SVR\t\t(regression)\n\t    -t kernel_type : set type of kernel function (default 2)\n\t        0 -- linear: u'*v\n\t        1 -- polynomial: (gamma*u'*v + coef0)^degree\n\t        2 -- radial basis function: exp(-gamma*|u-v|^2)\n\t        3 -- sigmoid: tanh(gamma*u'*v + coef0)\n\t        4 -- precomputed kernel (kernel values in training_set_file)\n\t    -d degree : set degree in kernel function (default 3)\n\t    -g gamma : set gamma in kernel function (default 1/num_features)\n\t    -r coef0 : set coef0 in kernel function (default 0)\n\t    -c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)\n\t    -n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)\n\t    -p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\n\t    -m cachesize : set cache memory size in MB (default 100)\n\t    -e epsilon : set tolerance of termination criterion (default 0.001)\n\t    -h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)\n\t    -b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)\n\t    -wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)\n\t    -v n: n-fold cross validation mode\n\t    -q : quiet mode (no outputs)\n\t\"\"\"\n\tprob, param = None, None\n\tif isinstance(arg1, (list, tuple)):\n\t\tassert isinstance(arg2, (list, tuple))\n\t\ty, x, options = arg1, arg2, arg3\n\t\tparam = svm_parameter(options)\n\t\tprob = svm_problem(y, x, isKernel=(param.kernel_type == PRECOMPUTED))\n\telif isinstance(arg1, svm_problem):\n\t\tprob = arg1\n\t\tif isinstance(arg2, svm_parameter):\n\t\t\tparam = arg2\n\t\telse:\n\t\t\tparam = svm_parameter(arg2)\n\tif prob == None or param == None:\n\t\traise TypeError(\"Wrong types for the arguments\")\n\n\tif param.kernel_type == PRECOMPUTED:\n\t\tfor xi in prob.x_space:\n\t\t\tidx, val = xi[0].index, xi[0].value\n\t\t\tif xi[0].index != 0:\n\t\t\t\traise ValueError('Wrong input format: first column must be 0:sample_serial_number')\n\t\t\tif val <= 0 or val > prob.n:\n\t\t\t\traise ValueError('Wrong input format: sample_serial_number out of range')\n\n\tif param.gamma == 0 and prob.n > 0:\n\t\tparam.gamma = 1.0 / prob.n\n\tlibsvm.svm_set_print_string_function(param.print_func)\n\terr_msg = libsvm.svm_check_parameter(prob, param)\n\tif err_msg:\n\t\traise ValueError('Error: %s' % err_msg)\n\n\tif param.cross_validation:\n\t\tl, nr_fold = prob.l, param.nr_fold\n\t\ttarget = (c_double * l)()\n\t\tlibsvm.svm_cross_validation(prob, param, nr_fold, target)\n\t\tACC, MSE, SCC = evaluations(prob.y[:l], target[:l])\n\t\tif param.svm_type in [EPSILON_SVR, NU_SVR]:\n\t\t\tprint(\"Cross Validation Mean squared error = %g\" % MSE)\n\t\t\tprint(\"Cross Validation Squared correlation coefficient = %g\" % SCC)\n\t\t\treturn MSE\n\t\telse:\n\t\t\tprint(\"Cross Validation Accuracy = %g%%\" % ACC)\n\t\t\treturn ACC\n\telse:\n\t\tm = libsvm.svm_train(prob, param)\n\t\tm = toPyModel(m)\n\n\t\t# If prob is destroyed, data including SVs pointed by m can remain.\n\t\tm.x_space = prob.x_space\n\t\treturn m\n\ndef svm_predict(y, x, m, options=\"\"):\n\t\"\"\"\n\tsvm_predict(y, x, m [, options]) -> (p_labels, p_acc, p_vals)\n\n\tPredict data (y, x) with the SVM model m.\n\toptions:\n\t    -b probability_estimates: whether to predict probability estimates,\n\t        0 or 1 (default 0); for one-class SVM only 0 is supported.\n\t    -q : quiet mode (no outputs).\n\n\tThe return tuple contains\n\tp_labels: a list of predicted labels\n\tp_acc: a tuple including  accuracy (for classification), mean-squared\n\t       error, and squared correlation coefficient (for regression).\n\tp_vals: a list of decision values or probability estimates (if '-b 1'\n\t        is specified). If k is the number of classes, for decision values,\n\t        each element includes results of predicting k(k-1)/2 binary-class\n\t        SVMs. For probabilities, each element contains k values indicating\n\t        the probability that the testing instance is in each class.\n\t        Note that the order of classes here is the same as 'model.label'\n\t        field in the model structure.\n\t\"\"\"\n\n\tdef info(s):\n\t\tprint(s)\n\n\tpredict_probability = 0\n\targv = options.split()\n\ti = 0\n\twhile i < len(argv):\n\t\tif argv[i] == '-b':\n\t\t\ti += 1\n\t\t\tpredict_probability = int(argv[i])\n\t\telif argv[i] == '-q':\n\t\t\tinfo = print_null\n\t\telse:\n\t\t\traise ValueError(\"Wrong options\")\n\t\ti+=1\n\n\tsvm_type = m.get_svm_type()\n\tis_prob_model = m.is_probability_model()\n\tnr_class = m.get_nr_class()\n\tpred_labels = []\n\tpred_values = []\n\n\tif predict_probability:\n\t\tif not is_prob_model:\n\t\t\traise ValueError(\"Model does not support probabiliy estimates\")\n\n\t\tif svm_type in [NU_SVR, EPSILON_SVR]:\n\t\t\tinfo(\"Prob. model for test data: target value = predicted value + z,\\n\"\n\t\t\t\"z: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma=%g\" % m.get_svr_probability());\n\t\t\tnr_class = 0\n\n\t\tprob_estimates = (c_double * nr_class)()\n\t\tfor xi in x:\n\t\t\txi, idx = gen_svm_nodearray(xi, isKernel=(m.param.kernel_type == PRECOMPUTED))\n\t\t\tlabel = libsvm.svm_predict_probability(m, xi, prob_estimates)\n\t\t\tvalues = prob_estimates[:nr_class]\n\t\t\tpred_labels += [label]\n\t\t\tpred_values += [values]\n\telse:\n\t\tif is_prob_model:\n\t\t\tinfo(\"Model supports probability estimates, but disabled in predicton.\")\n\t\tif svm_type in (ONE_CLASS, EPSILON_SVR, NU_SVC):\n\t\t\tnr_classifier = 1\n\t\telse:\n\t\t\tnr_classifier = nr_class*(nr_class-1)//2\n\t\tdec_values = (c_double * nr_classifier)()\n\t\tfor xi in x:\n\t\t\txi, idx = gen_svm_nodearray(xi, isKernel=(m.param.kernel_type == PRECOMPUTED))\n\t\t\tlabel = libsvm.svm_predict_values(m, xi, dec_values)\n\t\t\tif(nr_class == 1):\n\t\t\t\tvalues = [1]\n\t\t\telse:\n\t\t\t\tvalues = dec_values[:nr_classifier]\n\t\t\tpred_labels += [label]\n\t\t\tpred_values += [values]\n\n\tACC, MSE, SCC = evaluations(y, pred_labels)\n\tl = len(y)\n\tif svm_type in [EPSILON_SVR, NU_SVR]:\n\t\tinfo(\"Mean squared error = %g (regression)\" % MSE)\n\t\tinfo(\"Squared correlation coefficient = %g (regression)\" % SCC)\n\telse:\n\t\tinfo(\"Accuracy = %g%% (%d/%d) (classification)\" % (ACC, int(l*ACC/100), l))\n\n\treturn pred_labels, (ACC, MSE, SCC), pred_values\n\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-predict.c",
    "content": "#include <stdio.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include \"svm.h\"\n\nint print_null(const char *s,...) {return 0;}\n\nstatic int (*info)(const char *fmt,...) = &printf;\n\nstruct svm_node *x;\nint max_nr_attr = 64;\n\nstruct svm_model* model;\nint predict_probability=0;\n\nstatic char *line = NULL;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line,max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\nvoid exit_input_error(int line_num)\n{\n\tfprintf(stderr,\"Wrong input format at line %d\\n\", line_num);\n\texit(1);\n}\n\nvoid predict(FILE *input, FILE *output)\n{\n\tint correct = 0;\n\tint total = 0;\n\tdouble error = 0;\n\tdouble sump = 0, sumt = 0, sumpp = 0, sumtt = 0, sumpt = 0;\n\n\tint svm_type=svm_get_svm_type(model);\n\tint nr_class=svm_get_nr_class(model);\n\tdouble *prob_estimates=NULL;\n\tint j;\n\n\tif(predict_probability)\n\t{\n\t\tif (svm_type==NU_SVR || svm_type==EPSILON_SVR)\n\t\t\tinfo(\"Prob. model for test data: target value = predicted value + z,\\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma=%g\\n\",svm_get_svr_probability(model));\n\t\telse\n\t\t{\n\t\t\tint *labels=(int *) malloc(nr_class*sizeof(int));\n\t\t\tsvm_get_labels(model,labels);\n\t\t\tprob_estimates = (double *) malloc(nr_class*sizeof(double));\n\t\t\tfprintf(output,\"labels\");\t\t\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\tfprintf(output,\" %d\",labels[j]);\n\t\t\tfprintf(output,\"\\n\");\n\t\t\tfree(labels);\n\t\t}\n\t}\n\n\tmax_line_len = 1024;\n\tline = (char *)malloc(max_line_len*sizeof(char));\n\twhile(readline(input) != NULL)\n\t{\n\t\tint i = 0;\n\t\tdouble target_label, predict_label;\n\t\tchar *idx, *val, *label, *endptr;\n\t\tint inst_max_index = -1; // strtol gives 0 if wrong format, and precomputed kernel has <index> start from 0\n\n\t\tlabel = strtok(line,\" \\t\\n\");\n\t\tif(label == NULL) // empty line\n\t\t\texit_input_error(total+1);\n\n\t\ttarget_label = strtod(label,&endptr);\n\t\tif(endptr == label || *endptr != '\\0')\n\t\t\texit_input_error(total+1);\n\n\t\twhile(1)\n\t\t{\n\t\t\tif(i>=max_nr_attr-1)\t// need one more for index = -1\n\t\t\t{\n\t\t\t\tmax_nr_attr *= 2;\n\t\t\t\tx = (struct svm_node *) realloc(x,max_nr_attr*sizeof(struct svm_node));\n\t\t\t}\n\n\t\t\tidx = strtok(NULL,\":\");\n\t\t\tval = strtok(NULL,\" \\t\");\n\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\t\t\terrno = 0;\n\t\t\tx[i].index = (int) strtol(idx,&endptr,10);\n\t\t\tif(endptr == idx || errno != 0 || *endptr != '\\0' || x[i].index <= inst_max_index)\n\t\t\t\texit_input_error(total+1);\n\t\t\telse\n\t\t\t\tinst_max_index = x[i].index;\n\n\t\t\terrno = 0;\n\t\t\tx[i].value = strtod(val,&endptr);\n\t\t\tif(endptr == val || errno != 0 || (*endptr != '\\0' && !isspace(*endptr)))\n\t\t\t\texit_input_error(total+1);\n\n\t\t\t++i;\n\t\t}\n\t\tx[i].index = -1;\n\n\t\tif (predict_probability && (svm_type==C_SVC || svm_type==NU_SVC))\n\t\t{\n\t\t\tpredict_label = svm_predict_probability(model,x,prob_estimates);\n\t\t\tfprintf(output,\"%g\",predict_label);\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\tfprintf(output,\" %g\",prob_estimates[j]);\n\t\t\tfprintf(output,\"\\n\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tpredict_label = svm_predict(model,x);\n\t\t\tfprintf(output,\"%g\\n\",predict_label);\n\t\t}\n\n\t\tif(predict_label == target_label)\n\t\t\t++correct;\n\t\terror += (predict_label-target_label)*(predict_label-target_label);\n\t\tsump += predict_label;\n\t\tsumt += target_label;\n\t\tsumpp += predict_label*predict_label;\n\t\tsumtt += target_label*target_label;\n\t\tsumpt += predict_label*target_label;\n\t\t++total;\n\t}\n\tif (svm_type==NU_SVR || svm_type==EPSILON_SVR)\n\t{\n\t\tinfo(\"Mean squared error = %g (regression)\\n\",error/total);\n\t\tinfo(\"Squared correlation coefficient = %g (regression)\\n\",\n\t\t\t((total*sumpt-sump*sumt)*(total*sumpt-sump*sumt))/\n\t\t\t((total*sumpp-sump*sump)*(total*sumtt-sumt*sumt))\n\t\t\t);\n\t}\n\telse\n\t\tinfo(\"Accuracy = %g%% (%d/%d) (classification)\\n\",\n\t\t\t(double)correct/total*100,correct,total);\n\tif(predict_probability)\n\t\tfree(prob_estimates);\n}\n\nvoid exit_with_help()\n{\n\tprintf(\n\t\"Usage: svm-predict [options] test_file model_file output_file\\n\"\n\t\"options:\\n\"\n\t\"-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); for one-class SVM only 0 is supported\\n\"\n\t\"-q : quiet mode (no outputs)\\n\"\n\t);\n\texit(1);\n}\n\nint main(int argc, char **argv)\n{\n\tFILE *input, *output;\n\tint i;\n\t// parse options\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\t++i;\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 'b':\n\t\t\t\tpredict_probability = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tinfo = &print_null;\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfprintf(stderr,\"Unknown option: -%c\\n\", argv[i-1][1]);\n\t\t\t\texit_with_help();\n\t\t}\n\t}\n\n\tif(i>=argc-2)\n\t\texit_with_help();\n\n\tinput = fopen(argv[i],\"r\");\n\tif(input == NULL)\n\t{\n\t\tfprintf(stderr,\"can't open input file %s\\n\",argv[i]);\n\t\texit(1);\n\t}\n\n\toutput = fopen(argv[i+2],\"w\");\n\tif(output == NULL)\n\t{\n\t\tfprintf(stderr,\"can't open output file %s\\n\",argv[i+2]);\n\t\texit(1);\n\t}\n\n\tif((model=svm_load_model(argv[i+1]))==0)\n\t{\n\t\tfprintf(stderr,\"can't open model file %s\\n\",argv[i+1]);\n\t\texit(1);\n\t}\n\n\tx = (struct svm_node *) malloc(max_nr_attr*sizeof(struct svm_node));\n\tif(predict_probability)\n\t{\n\t\tif(svm_check_probability_model(model)==0)\n\t\t{\n\t\t\tfprintf(stderr,\"Model does not support probabiliy estimates\\n\");\n\t\t\texit(1);\n\t\t}\n\t}\n\telse\n\t{\n\t\tif(svm_check_probability_model(model)!=0)\n\t\t\tinfo(\"Model supports probability estimates, but disabled in prediction.\\n\");\n\t}\n\n\tpredict(input,output);\n\tsvm_free_and_destroy_model(&model);\n\tfree(x);\n\tfree(line);\n\tfclose(input);\n\tfclose(output);\n\treturn 0;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-scale.c",
    "content": "#include <float.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <string.h>\n\nvoid exit_with_help()\n{\n\tprintf(\n\t\"Usage: svm-scale [options] data_filename\\n\"\n\t\"options:\\n\"\n\t\"-l lower : x scaling lower limit (default -1)\\n\"\n\t\"-u upper : x scaling upper limit (default +1)\\n\"\n\t\"-y y_lower y_upper : y scaling limits (default: no y scaling)\\n\"\n\t\"-s save_filename : save scaling parameters to save_filename\\n\"\n\t\"-r restore_filename : restore scaling parameters from restore_filename\\n\"\n\t);\n\texit(1);\n}\n\nchar *line = NULL;\nint max_line_len = 1024;\ndouble lower=-1.0,upper=1.0,y_lower,y_upper;\nint y_scaling = 0;\ndouble *feature_max;\ndouble *feature_min;\ndouble y_max = -DBL_MAX;\ndouble y_min = DBL_MAX;\nint max_index;\nint min_index;\nlong int num_nonzeros = 0;\nlong int new_num_nonzeros = 0;\n\n#define max(x,y) (((x)>(y))?(x):(y))\n#define min(x,y) (((x)<(y))?(x):(y))\n\nvoid output_target(double value);\nvoid output(int index, double value);\nchar* readline(FILE *input);\nint clean_up(FILE *fp_restore, FILE *fp, const char *msg);\n\nint main(int argc,char **argv)\n{\n\tint i,index;\n\tFILE *fp, *fp_restore = NULL;\n\tchar *save_filename = NULL;\n\tchar *restore_filename = NULL;\n\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\t++i;\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 'l': lower = atof(argv[i]); break;\n\t\t\tcase 'u': upper = atof(argv[i]); break;\n\t\t\tcase 'y':\n\t\t\t\ty_lower = atof(argv[i]);\n\t\t\t\t++i;\n\t\t\t\ty_upper = atof(argv[i]);\n\t\t\t\ty_scaling = 1;\n\t\t\t\tbreak;\n\t\t\tcase 's': save_filename = argv[i]; break;\n\t\t\tcase 'r': restore_filename = argv[i]; break;\n\t\t\tdefault:\n\t\t\t\tfprintf(stderr,\"unknown option\\n\");\n\t\t\t\texit_with_help();\n\t\t}\n\t}\n\n\tif(!(upper > lower) || (y_scaling && !(y_upper > y_lower)))\n\t{\n\t\tfprintf(stderr,\"inconsistent lower/upper specification\\n\");\n\t\texit(1);\n\t}\n\t\n\tif(restore_filename && save_filename)\n\t{\n\t\tfprintf(stderr,\"cannot use -r and -s simultaneously\\n\");\n\t\texit(1);\n\t}\n\n\tif(argc != i+1) \n\t\texit_with_help();\n\n\tfp=fopen(argv[i],\"r\");\n\t\n\tif(fp==NULL)\n\t{\n\t\tfprintf(stderr,\"can't open file %s\\n\", argv[i]);\n\t\texit(1);\n\t}\n\n\tline = (char *) malloc(max_line_len*sizeof(char));\n\n#define SKIP_TARGET\\\n\twhile(isspace(*p)) ++p;\\\n\twhile(!isspace(*p)) ++p;\n\n#define SKIP_ELEMENT\\\n\twhile(*p!=':') ++p;\\\n\t++p;\\\n\twhile(isspace(*p)) ++p;\\\n\twhile(*p && !isspace(*p)) ++p;\n\t\n\t/* assumption: min index of attributes is 1 */\n\t/* pass 1: find out max index of attributes */\n\tmax_index = 0;\n\tmin_index = 1;\n\n\tif(restore_filename)\n\t{\n\t\tint idx, c;\n\n\t\tfp_restore = fopen(restore_filename,\"r\");\n\t\tif(fp_restore==NULL)\n\t\t{\n\t\t\tfprintf(stderr,\"can't open file %s\\n\", restore_filename);\n\t\t\texit(1);\n\t\t}\n\n\t\tc = fgetc(fp_restore);\n\t\tif(c == 'y')\n\t\t{\n\t\t\treadline(fp_restore);\n\t\t\treadline(fp_restore);\n\t\t\treadline(fp_restore);\n\t\t}\n\t\treadline(fp_restore);\n\t\treadline(fp_restore);\n\n\t\twhile(fscanf(fp_restore,\"%d %*f %*f\\n\",&idx) == 1)\n\t\t\tmax_index = max(idx,max_index);\n\t\trewind(fp_restore);\n\t}\n\n\twhile(readline(fp)!=NULL)\n\t{\n\t\tchar *p=line;\n\n\t\tSKIP_TARGET\n\n\t\twhile(sscanf(p,\"%d:%*f\",&index)==1)\n\t\t{\n\t\t\tmax_index = max(max_index, index);\n\t\t\tmin_index = min(min_index, index);\n\t\t\tSKIP_ELEMENT\n\t\t\tnum_nonzeros++;\n\t\t}\n\t}\n\n\tif(min_index < 1)\n\t\tfprintf(stderr,\n\t\t\t\"WARNING: minimal feature index is %d, but indices should start from 1\\n\", min_index);\n\n\trewind(fp);\n\n\tfeature_max = (double *)malloc((max_index+1)* sizeof(double));\n\tfeature_min = (double *)malloc((max_index+1)* sizeof(double));\n\n\tif(feature_max == NULL || feature_min == NULL)\n\t{\n\t\tfprintf(stderr,\"can't allocate enough memory\\n\");\n\t\texit(1);\n\t}\n\n\tfor(i=0;i<=max_index;i++)\n\t{\n\t\tfeature_max[i]=-DBL_MAX;\n\t\tfeature_min[i]=DBL_MAX;\n\t}\n\n\t/* pass 2: find out min/max value */\n\twhile(readline(fp)!=NULL)\n\t{\n\t\tchar *p=line;\n\t\tint next_index=1;\n\t\tdouble target;\n\t\tdouble value;\n\n\t\tif (sscanf(p,\"%lf\",&target) != 1)\n\t\t\treturn clean_up(fp_restore, fp, \"ERROR: failed to read labels\\n\");\n\t\ty_max = max(y_max,target);\n\t\ty_min = min(y_min,target);\n\t\t\n\t\tSKIP_TARGET\n\n\t\twhile(sscanf(p,\"%d:%lf\",&index,&value)==2)\n\t\t{\n\t\t\tfor(i=next_index;i<index;i++)\n\t\t\t{\n\t\t\t\tfeature_max[i]=max(feature_max[i],0);\n\t\t\t\tfeature_min[i]=min(feature_min[i],0);\n\t\t\t}\n\t\t\t\n\t\t\tfeature_max[index]=max(feature_max[index],value);\n\t\t\tfeature_min[index]=min(feature_min[index],value);\n\n\t\t\tSKIP_ELEMENT\n\t\t\tnext_index=index+1;\n\t\t}\t\t\n\n\t\tfor(i=next_index;i<=max_index;i++)\n\t\t{\n\t\t\tfeature_max[i]=max(feature_max[i],0);\n\t\t\tfeature_min[i]=min(feature_min[i],0);\n\t\t}\t\n\t}\n\n\trewind(fp);\n\n\t/* pass 2.5: save/restore feature_min/feature_max */\n\t\n\tif(restore_filename)\n\t{\n\t\t/* fp_restore rewinded in finding max_index */\n\t\tint idx, c;\n\t\tdouble fmin, fmax;\n\t\tint next_index = 1;\n\t\t\n\t\tif((c = fgetc(fp_restore)) == 'y')\n\t\t{\n\t\t\tif(fscanf(fp_restore, \"%lf %lf\\n\", &y_lower, &y_upper) != 2 ||\n\t\t\t   fscanf(fp_restore, \"%lf %lf\\n\", &y_min, &y_max) != 2)\n\t\t\t\treturn clean_up(fp_restore, fp, \"ERROR: failed to read scaling parameters\\n\");\n\t\t\ty_scaling = 1;\n\t\t}\n\t\telse\n\t\t\tungetc(c, fp_restore);\n\n\t\tif (fgetc(fp_restore) == 'x') \n\t\t{\n\t\t\tif(fscanf(fp_restore, \"%lf %lf\\n\", &lower, &upper) != 2)\n\t\t\t\treturn clean_up(fp_restore, fp, \"ERROR: failed to read scaling parameters\\n\");\n\t\t\twhile(fscanf(fp_restore,\"%d %lf %lf\\n\",&idx,&fmin,&fmax)==3)\n\t\t\t{\n\t\t\t\tfor(i = next_index;i<idx;i++)\n\t\t\t\t\tif(feature_min[i] != feature_max[i])\n\t\t\t\t\t\tfprintf(stderr,\n\t\t\t\t\t\t\t\"WARNING: feature index %d appeared in file %s was not seen in the scaling factor file %s.\\n\",\n\t\t\t\t\t\t\ti, argv[argc-1], restore_filename);\n\n\t\t\t\tfeature_min[idx] = fmin;\n\t\t\t\tfeature_max[idx] = fmax;\n\n\t\t\t\tnext_index = idx + 1;\n\t\t\t}\n\t\t\t\n\t\t\tfor(i=next_index;i<=max_index;i++)\n\t\t\t\tif(feature_min[i] != feature_max[i])\n\t\t\t\t\tfprintf(stderr,\n\t\t\t\t\t\t\"WARNING: feature index %d appeared in file %s was not seen in the scaling factor file %s.\\n\",\n\t\t\t\t\t\ti, argv[argc-1], restore_filename);\n\t\t}\n\t\tfclose(fp_restore);\n\t}\n\n\tif(save_filename)\n\t{\n\t\tFILE *fp_save = fopen(save_filename,\"w\");\n\t\tif(fp_save==NULL)\n\t\t{\n\t\t\tfprintf(stderr,\"can't open file %s\\n\", save_filename);\n\t\t\texit(1);\n\t\t}\n\t\tif(y_scaling)\n\t\t{\n\t\t\tfprintf(fp_save, \"y\\n\");\n\t\t\tfprintf(fp_save, \"%.16g %.16g\\n\", y_lower, y_upper);\n\t\t\tfprintf(fp_save, \"%.16g %.16g\\n\", y_min, y_max);\n\t\t}\n\t\tfprintf(fp_save, \"x\\n\");\n\t\tfprintf(fp_save, \"%.16g %.16g\\n\", lower, upper);\n\t\tfor(i=1;i<=max_index;i++)\n\t\t{\n\t\t\tif(feature_min[i]!=feature_max[i])\n\t\t\t\tfprintf(fp_save,\"%d %.16g %.16g\\n\",i,feature_min[i],feature_max[i]);\n\t\t}\n\n\t\tif(min_index < 1)\n\t\t\tfprintf(stderr,\n\t\t\t\t\"WARNING: scaling factors with indices smaller than 1 are not stored to the file %s.\\n\", save_filename);\n\n\t\tfclose(fp_save);\n\t}\n\t\n\t/* pass 3: scale */\n\twhile(readline(fp)!=NULL)\n\t{\n\t\tchar *p=line;\n\t\tint next_index=1;\n\t\tdouble target;\n\t\tdouble value;\n\t\t\n\t\tif (sscanf(p,\"%lf\",&target) != 1)\n\t\t\treturn clean_up(NULL, fp, \"ERROR: failed to read labels\\n\");\n\t\toutput_target(target);\n\n\t\tSKIP_TARGET\n\n\t\twhile(sscanf(p,\"%d:%lf\",&index,&value)==2)\n\t\t{\n\t\t\tfor(i=next_index;i<index;i++)\n\t\t\t\toutput(i,0);\n\t\t\t\n\t\t\toutput(index,value);\n\n\t\t\tSKIP_ELEMENT\n\t\t\tnext_index=index+1;\n\t\t}\t\t\n\n\t\tfor(i=next_index;i<=max_index;i++)\n\t\t\toutput(i,0);\n\n\t\tprintf(\"\\n\");\n\t}\n\n\tif (new_num_nonzeros > num_nonzeros)\n\t\tfprintf(stderr, \n\t\t\t\"WARNING: original #nonzeros %ld\\n\"\n\t\t\t\"         new      #nonzeros %ld\\n\"\n\t\t\t\"Use -l 0 if many original feature values are zeros\\n\",\n\t\t\tnum_nonzeros, new_num_nonzeros);\n\n\tfree(line);\n\tfree(feature_max);\n\tfree(feature_min);\n\tfclose(fp);\n\treturn 0;\n}\n\nchar* readline(FILE *input)\n{\n\tint len;\n\t\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line, max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\nvoid output_target(double value)\n{\n\tif(y_scaling)\n\t{\n\t\tif(value == y_min)\n\t\t\tvalue = y_lower;\n\t\telse if(value == y_max)\n\t\t\tvalue = y_upper;\n\t\telse value = y_lower + (y_upper-y_lower) *\n\t\t\t     (value - y_min)/(y_max-y_min);\n\t}\n\tprintf(\"%g \",value);\n}\n\nvoid output(int index, double value)\n{\n\t/* skip single-valued attribute */\n\tif(feature_max[index] == feature_min[index])\n\t\treturn;\n\n\tif(value == feature_min[index])\n\t\tvalue = lower;\n\telse if(value == feature_max[index])\n\t\tvalue = upper;\n\telse\n\t\tvalue = lower + (upper-lower) * \n\t\t\t(value-feature_min[index])/\n\t\t\t(feature_max[index]-feature_min[index]);\n\n\tif(value != 0)\n\t{\n\t\tprintf(\"%d:%g \",index, value);\n\t\tnew_num_nonzeros++;\n\t}\n}\n\nint clean_up(FILE *fp_restore, FILE *fp, const char* msg)\n{\n\tfprintf(stderr,\t\"%s\", msg);\n\tfree(line);\n\tfree(feature_max);\n\tfree(feature_min);\n\tfclose(fp);\n\tif (fp_restore)\n\t\tfclose(fp_restore);\n\treturn -1;\n}\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/Makefile",
    "content": "CC? = gcc\nCXX? = g++\nCFLAGS = -Wall -O3 -g `pkg-config --cflags gtk+-2.0`\nLIBS = `pkg-config --libs gtk+-2.0`\n\nsvm-toy: main.o interface.o callbacks.o ../../svm.o\n\t$(CXX) $(CFLAGS) main.o interface.o callbacks.o ../../svm.o -o svm-toy $(LIBS)\n\nmain.o: main.c\n\t$(CC) $(CFLAGS) -c main.c\n\ninterface.o: interface.c interface.h\n\t$(CC) $(CFLAGS) -c interface.c\n\ncallbacks.o: callbacks.cpp callbacks.h\n\t$(CXX) $(CFLAGS) -c callbacks.cpp\n\n../../svm.o: ../../svm.cpp ../../svm.h\n\tmake -C ../.. svm.o\n\nclean:\n\trm -f *~ callbacks.o svm-toy main.o interface.o callbacks.o ../../svm.o\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/callbacks.cpp",
    "content": "#include <gtk/gtk.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#include \"callbacks.h\"\n#include \"interface.h\"\n#include \"../../svm.h\"\nusing namespace std;\n\n#define DEFAULT_PARAM \"-t 2 -c 100\"\n#define XLEN 500\n#define YLEN 500\n\nGdkColor colors[] = \n{\n\t{0,0,0,0},\n\t{0,0,120<<8,120<<8},\n\t{0,120<<8,120<<8,0},\n\t{0,120<<8,0,120<<8},\n\t{0,0,200<<8,200<<8},\n\t{0,200<<8,200<<8,0},\n\t{0,200<<8,0,200<<8},\n};\n\nGdkGC *gc;\nGdkPixmap *pixmap;\nextern \"C\" GtkWidget *draw_main;\nGtkWidget *draw_main;\nextern \"C\" GtkWidget *entry_option;\nGtkWidget *entry_option;\n\ntypedef struct {\n\tdouble x, y;\n\tsigned char value;\n} point;\n\nlist<point> point_list;\nint current_value = 1;\n\nextern \"C\" void svm_toy_initialize()\n{\n\tgboolean success[7];\n\n\tgdk_colormap_alloc_colors(\n\t\tgdk_colormap_get_system(),\n\t\tcolors,\n\t\t7,\n\t\tFALSE,\n\t\tTRUE,\n\t\tsuccess);\n\n\tgc = gdk_gc_new(draw_main->window);\n\tpixmap = gdk_pixmap_new(draw_main->window,XLEN,YLEN,-1);\n\tgdk_gc_set_foreground(gc,&colors[0]);\n\tgdk_draw_rectangle(pixmap,gc,TRUE,0,0,XLEN,YLEN);\n\tgtk_entry_set_text(GTK_ENTRY(entry_option),DEFAULT_PARAM);\n}\n\nvoid redraw_area(GtkWidget* widget, int x, int y, int w, int h)\n{\n\tgdk_draw_pixmap(widget->window,\n\t\t\tgc,\n\t\t\tpixmap,\n\t\t\tx,y,x,y,w,h);\n}\n\nvoid draw_point(const point& p)\n{\n\tgdk_gc_set_foreground(gc,&colors[p.value+3]);\n\tgdk_draw_rectangle(pixmap, gc, TRUE,int(p.x*XLEN),int(p.y*YLEN),4,4);\n\tgdk_draw_rectangle(draw_main->window, gc, TRUE,int(p.x*XLEN),int(p.y*YLEN),4,4);\n}\n\nvoid draw_all_points()\n{\n\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\tdraw_point(*p);\n}\n\nvoid clear_all()\n{\n\tpoint_list.clear();\n\tgdk_gc_set_foreground(gc,&colors[0]);\n\tgdk_draw_rectangle(pixmap,gc,TRUE,0,0,XLEN,YLEN);\n\tredraw_area(draw_main,0,0,XLEN,YLEN);\n}\n\nvoid\non_button_change_clicked               (GtkButton       *button,\n                                        gpointer         user_data)\n{\n\t++current_value;\n\tif(current_value > 3) current_value = 1;\n}\n\nvoid\non_button_run_clicked                  (GtkButton       *button,\n                                        gpointer         user_data)\n{\n\t// guard\n\tif(point_list.empty()) return;\n\n\tsvm_parameter param;\n\tint i,j;\t\n\n\t// default values\n\tparam.svm_type = C_SVC;\n\tparam.kernel_type = RBF;\n\tparam.degree = 3;\n\tparam.gamma = 0;\n\tparam.coef0 = 0;\n\tparam.nu = 0.5;\n\tparam.cache_size = 100;\n\tparam.C = 1;\n\tparam.eps = 1e-3;\n\tparam.p = 0.1;\n\tparam.shrinking = 1;\n\tparam.probability = 0;\n\tparam.nr_weight = 0;\n\tparam.weight_label = NULL;\n\tparam.weight = NULL;\n\n\t// parse options\n\tconst char *p = gtk_entry_get_text(GTK_ENTRY(entry_option));\n\n\twhile (1) {\n\t\twhile (*p && *p != '-')\n\t\t\tp++;\n\n\t\tif (*p == '\\0')\n\t\t\tbreak;\n\n\t\tp++;\n\t\tswitch (*p++) {\n\t\t\tcase 's':\n\t\t\t\tparam.svm_type = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tparam.kernel_type = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'd':\n\t\t\t\tparam.degree = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'g':\n\t\t\t\tparam.gamma = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'r':\n\t\t\t\tparam.coef0 = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'n':\n\t\t\t\tparam.nu = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tparam.cache_size = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tparam.C = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'e':\n\t\t\t\tparam.eps = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'p':\n\t\t\t\tparam.p = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\t\tparam.shrinking = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'b':\n\t\t\t\tparam.probability = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'w':\n\t\t\t\t++param.nr_weight;\n\t\t\t\tparam.weight_label = (int *)realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\tparam.weight = (double *)realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(p);\n\t\t\t\twhile(*p && !isspace(*p)) ++p;\n\t\t\t\tparam.weight[param.nr_weight-1] = atof(p);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n\t// build problem\n\tsvm_problem prob;\n\n\tprob.l = point_list.size();\n\tprob.y = new double[prob.l];\n\n\tif(param.kernel_type == PRECOMPUTED)\n\t{\n\t}\n\telse if(param.svm_type == EPSILON_SVR ||\n\t\tparam.svm_type == NU_SVR)\n\t{\n\t\tif(param.gamma == 0) param.gamma = 1;\n\t\tsvm_node *x_space = new svm_node[2 * prob.l];\n\t\tprob.x = new svm_node *[prob.l];\n\n\t\ti = 0;\n\t\tfor (list <point>::iterator q = point_list.begin(); q != point_list.end(); q++, i++)\n\t\t{\n\t\t\tx_space[2 * i].index = 1;\n\t\t\tx_space[2 * i].value = q->x;\n\t\t\tx_space[2 * i + 1].index = -1;\n\t\t\tprob.x[i] = &x_space[2 * i];\n\t\t\tprob.y[i] = q->y;\n\t\t}\n\n\t\t// build model & classify\n\t\tsvm_model *model = svm_train(&prob, &param);\n\t\tsvm_node x[2];\n\t\tx[0].index = 1;\n\t\tx[1].index = -1;\n\t\tint *j = new int[XLEN];\n\t\n\t\tfor (i = 0; i < XLEN; i++) \n\t\t{\n\t\t\tx[0].value = (double) i / XLEN;\n\t\t\tj[i] = (int)(YLEN*svm_predict(model, x));\n\t\t}\n\n\t\tgdk_gc_set_foreground(gc,&colors[0]);\n\t\tgdk_draw_line(pixmap,gc,0,0,0,YLEN-1);\n\t\tgdk_draw_line(draw_main->window,gc,0,0,0,YLEN-1);\n\t\t\n\t\tint p = (int)(param.p * YLEN);\n\t\tfor(i = 1; i < XLEN; i++)\n\t\t{\n\t\t\tgdk_gc_set_foreground(gc,&colors[0]);\n\t\t\tgdk_draw_line(pixmap,gc,i,0,i,YLEN-1);\n\t\t\tgdk_draw_line(draw_main->window,gc,i,0,i,YLEN-1);\n\t\t\t\n\t\t\tgdk_gc_set_foreground(gc,&colors[5]);\n\t\t\tgdk_draw_line(pixmap,gc,i-1,j[i-1],i,j[i]);\n\t\t\tgdk_draw_line(draw_main->window,gc,i-1,j[i-1],i,j[i]);\n\t\t\t\n\t\t\tif(param.svm_type == EPSILON_SVR)\n\t\t\t{\n\t\t\t\tgdk_gc_set_foreground(gc,&colors[2]);\n\t\t\t\tgdk_draw_line(pixmap,gc,i-1,j[i-1]+p,i,j[i]+p);\n\t\t\t\tgdk_draw_line(draw_main->window,gc,i-1,j[i-1]+p,i,j[i]+p);\n\t\t\t\n\t\t\t\tgdk_gc_set_foreground(gc,&colors[2]);\n\t\t\t\tgdk_draw_line(pixmap,gc,i-1,j[i-1]-p,i,j[i]-p);\n\t\t\t\tgdk_draw_line(draw_main->window,gc,i-1,j[i-1]-p,i,j[i]-p);\n\t\t\t}\n\t\t}\n\n\t\tsvm_free_and_destroy_model(&model);\n\t\tdelete[] j;\n\t\tdelete[] x_space;\n\t\tdelete[] prob.x;\n\t\tdelete[] prob.y;\n\t}\n\telse\n\t{\n\t\tif(param.gamma == 0) param.gamma = 0.5;\n\t\tsvm_node *x_space = new svm_node[3 * prob.l];\n\t\tprob.x = new svm_node *[prob.l];\n\n\t\ti = 0;\n\t\tfor (list <point>::iterator q = point_list.begin(); q != point_list.end(); q++, i++)\n\t\t{\n\t\t\tx_space[3 * i].index = 1;\n\t\t\tx_space[3 * i].value = q->x;\n\t\t\tx_space[3 * i + 1].index = 2;\n\t\t\tx_space[3 * i + 1].value = q->y;\n\t\t\tx_space[3 * i + 2].index = -1;\n\t\t\tprob.x[i] = &x_space[3 * i];\n\t\t\tprob.y[i] = q->value;\n\t\t}\n\n\t\t// build model & classify\n\t\tsvm_model *model = svm_train(&prob, &param);\n\t\tsvm_node x[3];\n\t\tx[0].index = 1;\n\t\tx[1].index = 2;\n\t\tx[2].index = -1;\n\t\n\t\tfor (i = 0; i < XLEN; i++) \n\t\t\tfor (j = 0; j < YLEN; j++) {\n\t\t\t\tx[0].value = (double) i / XLEN;\n\t\t\t\tx[1].value = (double) j / YLEN;\n\t\t\t\tdouble d = svm_predict(model, x);\n\t\t\t\tif (param.svm_type == ONE_CLASS && d<0) d=2;\n\t\t\t\tgdk_gc_set_foreground(gc,&colors[(int)d]);\n\t\t\t\tgdk_draw_point(pixmap,gc,i,j);\n\t\t\t\tgdk_draw_point(draw_main->window,gc,i,j);\n\t\t\t}\n\n\t\tsvm_free_and_destroy_model(&model);\n\t\tdelete[] x_space;\n\t\tdelete[] prob.x;\n\t\tdelete[] prob.y;\n\t}\n\tfree(param.weight_label);\n\tfree(param.weight);\n\tdraw_all_points();\n}\n\nvoid\non_button_clear_clicked                (GtkButton       *button,\n                                        gpointer         user_data)\n{\n\tclear_all();\n}\n\nvoid\non_window1_destroy                     (GtkObject       *object,\n                                        gpointer         user_data)\n{\n\tgtk_exit(0);\n}\n\ngboolean\non_draw_main_button_press_event        (GtkWidget       *widget,\n                                        GdkEventButton  *event,\n                                        gpointer         user_data)\n{\n\tpoint p = {(double)event->x/XLEN, (double)event->y/YLEN, current_value};\n\tpoint_list.push_back(p);\n\tdraw_point(p);\n\treturn FALSE;\n}\n\ngboolean\non_draw_main_expose_event              (GtkWidget       *widget,\n                                        GdkEventExpose  *event,\n                                        gpointer         user_data)\n{\n\tredraw_area(widget,\n\t\t    event->area.x, event->area.y,\n\t\t    event->area.width, event->area.height);\n\treturn FALSE;\n}\n\nGtkWidget *fileselection;\nstatic enum { SAVE, LOAD } fileselection_flag;\n\nvoid show_fileselection()\n{\n\tfileselection = create_fileselection();\n\tgtk_signal_connect_object(\n\t\tGTK_OBJECT(GTK_FILE_SELECTION(fileselection)->ok_button),\n\t\t\"clicked\", GTK_SIGNAL_FUNC(gtk_widget_destroy),\n\t\t(GtkObject *) fileselection);\n\t\n\tgtk_signal_connect_object (GTK_OBJECT\n\t\t(GTK_FILE_SELECTION(fileselection)->cancel_button),\n\t\t\"clicked\", GTK_SIGNAL_FUNC(gtk_widget_destroy),\n\t\t(GtkObject *) fileselection);\n\n\tgtk_widget_show(fileselection);\n}\n\nvoid\non_button_save_clicked                 (GtkButton       *button,\n                                        gpointer         user_data)\n{\n\tfileselection_flag = SAVE;\n\tshow_fileselection();\n}\n\n\nvoid\non_button_load_clicked                 (GtkButton       *button,\n                                        gpointer         user_data)\n{\n\tfileselection_flag = LOAD;\n\tshow_fileselection();\n}\n\nvoid\non_filesel_ok_clicked                  (GtkButton       *button,\n                                        gpointer         user_data)\n{\n\tgtk_widget_hide(fileselection);\n\tconst char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileselection));\n\n\tif(fileselection_flag == SAVE)\n\t{\n\t\tFILE *fp = fopen(filename,\"w\");\n\t\t\n\t\tconst char *p = gtk_entry_get_text(GTK_ENTRY(entry_option));\n\t\tconst char* svm_type_str = strstr(p, \"-s \");\n\t\tint svm_type = C_SVC;\n\t\tif(svm_type_str != NULL)\n\t\t\tsscanf(svm_type_str, \"-s %d\", &svm_type);\n\t\t\n\t\tif(fp)\n\t\t{\n\t\t\tif(svm_type == EPSILON_SVR || svm_type == NU_SVR)\n\t\t\t{\n\t\t\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\t\t\tfprintf(fp,\"%f 1:%f\\n\", p->y, p->x);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\t\t\tfprintf(fp,\"%d 1:%f 2:%f\\n\", p->value, p->x, p->y);\n\t\t\t}\n\t\t\tfclose(fp);\n\t\t}\n\n\t}\n\telse if(fileselection_flag == LOAD)\n\t{\n\t\tFILE *fp = fopen(filename,\"r\");\n\t\tif(fp)\n\t\t{\n\t\t\tclear_all();\n\t\t\tchar buf[4096];\n\t\t\twhile(fgets(buf,sizeof(buf),fp))\n\t\t\t{\n\t\t\t\tint v;\n\t\t\t\tdouble x,y;\n\t\t\t\tif(sscanf(buf,\"%d%*d:%lf%*d:%lf\",&v,&x,&y)==3)\n\t\t\t\t{\n\t\t\t\t\tpoint p = {x,y,v};\n\t\t\t\t\tpoint_list.push_back(p);\n\t\t\t\t}\n\t\t\t\telse if(sscanf(buf,\"%lf%*d:%lf\",&y,&x)==2)\n\t\t\t\t{\n\t\t\t\t\tpoint p = {x,y,current_value};\n\t\t\t\t\tpoint_list.push_back(p);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tfclose(fp);\n\t\t\tdraw_all_points();\n\t\t}\t\t\t\t\n\t}\n}\n\nvoid\non_fileselection_destroy               (GtkObject       *object,\n                                        gpointer         user_data)\n{\n}\n\nvoid\non_filesel_cancel_clicked              (GtkButton       *button,\n                                        gpointer         user_data)\n{\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/callbacks.h",
    "content": "#include <gtk/gtk.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid\non_window1_destroy                     (GtkObject       *object,\n                                        gpointer         user_data);\n\ngboolean\non_draw_main_button_press_event        (GtkWidget       *widget,\n                                        GdkEventButton  *event,\n                                        gpointer         user_data);\n\ngboolean\non_draw_main_expose_event              (GtkWidget       *widget,\n                                        GdkEventExpose  *event,\n                                        gpointer         user_data);\n\nvoid\non_button_change_clicked               (GtkButton       *button,\n                                        gpointer         user_data);\n\nvoid\non_button_run_clicked                  (GtkButton       *button,\n                                        gpointer         user_data);\n\nvoid\non_button_clear_clicked                (GtkButton       *button,\n                                        gpointer         user_data);\n\nvoid\non_button_save_clicked                 (GtkButton       *button,\n                                        gpointer         user_data);\n\nvoid\non_button_load_clicked                 (GtkButton       *button,\n                                        gpointer         user_data);\n\nvoid\non_fileselection_destroy               (GtkObject       *object,\n                                        gpointer         user_data);\n\nvoid\non_filesel_ok_clicked                  (GtkButton       *button,\n                                        gpointer         user_data);\n\nvoid\non_filesel_cancel_clicked              (GtkButton       *button,\n                                        gpointer         user_data);\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/interface.c",
    "content": "/*\n * DO NOT EDIT THIS FILE - it is generated by Glade.\n */\n\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <unistd.h>\n#include <string.h>\n\n#include <gdk/gdkkeysyms.h>\n#include <gtk/gtk.h>\n\n#include \"callbacks.h\"\n#include \"interface.h\"\n\nGtkWidget*\ncreate_window (void)\n{\n  GtkWidget *window;\n  GtkWidget *vbox1;\n  extern GtkWidget *draw_main;\n  GtkWidget *hbox1;\n  GtkWidget *button_change;\n  GtkWidget *button_run;\n  GtkWidget *button_clear;\n  GtkWidget *button_save;\n  GtkWidget *button_load;\n  extern GtkWidget *entry_option;\n\n  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\n  gtk_object_set_data (GTK_OBJECT (window), \"window\", window);\n  gtk_window_set_title (GTK_WINDOW (window), \"SVM Toy\");\n\n  vbox1 = gtk_vbox_new (FALSE, 0);\n  gtk_widget_ref (vbox1);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"vbox1\", vbox1,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (vbox1);\n  gtk_container_add (GTK_CONTAINER (window), vbox1);\n\n  draw_main = gtk_drawing_area_new ();\n  gtk_widget_ref (draw_main);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"draw_main\", draw_main,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (draw_main);\n  gtk_box_pack_start (GTK_BOX (vbox1), draw_main, TRUE, TRUE, 0);\n  gtk_widget_set_usize (draw_main, 500, 500);\n  gtk_widget_set_events (draw_main, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);\n\n  hbox1 = gtk_hbox_new (FALSE, 0);\n  gtk_widget_ref (hbox1);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"hbox1\", hbox1,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (hbox1);\n  gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);\n\n  button_change = gtk_button_new_with_label (\"Change\");\n  gtk_widget_ref (button_change);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"button_change\", button_change,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (button_change);\n  gtk_box_pack_start (GTK_BOX (hbox1), button_change, FALSE, FALSE, 0);\n\n  button_run = gtk_button_new_with_label (\"Run\");\n  gtk_widget_ref (button_run);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"button_run\", button_run,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (button_run);\n  gtk_box_pack_start (GTK_BOX (hbox1), button_run, FALSE, FALSE, 0);\n\n  button_clear = gtk_button_new_with_label (\"Clear\");\n  gtk_widget_ref (button_clear);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"button_clear\", button_clear,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (button_clear);\n  gtk_box_pack_start (GTK_BOX (hbox1), button_clear, FALSE, FALSE, 0);\n\n  button_save = gtk_button_new_with_label (\"Save\");\n  gtk_widget_ref (button_save);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"button_save\", button_save,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (button_save);\n  gtk_box_pack_start (GTK_BOX (hbox1), button_save, FALSE, FALSE, 0);\n\n  button_load = gtk_button_new_with_label (\"Load\");\n  gtk_widget_ref (button_load);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"button_load\", button_load,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (button_load);\n  gtk_box_pack_start (GTK_BOX (hbox1), button_load, FALSE, FALSE, 0);\n\n  entry_option = gtk_entry_new ();\n  gtk_widget_ref (entry_option);\n  gtk_object_set_data_full (GTK_OBJECT (window), \"entry_option\", entry_option,\n                            (GtkDestroyNotify) gtk_widget_unref);\n  gtk_widget_show (entry_option);\n  gtk_box_pack_start (GTK_BOX (hbox1), entry_option, TRUE, TRUE, 0);\n\n  gtk_signal_connect (GTK_OBJECT (window), \"destroy\",\n                      GTK_SIGNAL_FUNC (on_window1_destroy),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (draw_main), \"button_press_event\",\n                      GTK_SIGNAL_FUNC (on_draw_main_button_press_event),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (draw_main), \"expose_event\",\n                      GTK_SIGNAL_FUNC (on_draw_main_expose_event),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (button_change), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_button_change_clicked),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (button_run), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_button_run_clicked),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (button_clear), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_button_clear_clicked),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (button_save), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_button_save_clicked),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (button_load), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_button_load_clicked),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (entry_option), \"activate\",\n                      GTK_SIGNAL_FUNC (on_button_run_clicked),\n                      NULL);\n\n  return window;\n}\n\nGtkWidget*\ncreate_fileselection (void)\n{\n  GtkWidget *fileselection;\n  GtkWidget *filesel_ok;\n  GtkWidget *filesel_cancel;\n\n  fileselection = gtk_file_selection_new (\"Select File\");\n  gtk_object_set_data (GTK_OBJECT (fileselection), \"fileselection\", fileselection);\n  gtk_container_set_border_width (GTK_CONTAINER (fileselection), 10);\n  gtk_window_set_modal (GTK_WINDOW (fileselection), TRUE);\n\n  filesel_ok = GTK_FILE_SELECTION (fileselection)->ok_button;\n  gtk_object_set_data (GTK_OBJECT (fileselection), \"filesel_ok\", filesel_ok);\n  gtk_widget_show (filesel_ok);\n  GTK_WIDGET_SET_FLAGS (filesel_ok, GTK_CAN_DEFAULT);\n\n  filesel_cancel = GTK_FILE_SELECTION (fileselection)->cancel_button;\n  gtk_object_set_data (GTK_OBJECT (fileselection), \"filesel_cancel\", filesel_cancel);\n  gtk_widget_show (filesel_cancel);\n  GTK_WIDGET_SET_FLAGS (filesel_cancel, GTK_CAN_DEFAULT);\n\n  gtk_signal_connect (GTK_OBJECT (fileselection), \"destroy\",\n                      GTK_SIGNAL_FUNC (on_fileselection_destroy),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (filesel_ok), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_filesel_ok_clicked),\n                      NULL);\n  gtk_signal_connect (GTK_OBJECT (filesel_cancel), \"clicked\",\n                      GTK_SIGNAL_FUNC (on_filesel_cancel_clicked),\n                      NULL);\n\n  return fileselection;\n}\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/interface.h",
    "content": "/*\n * DO NOT EDIT THIS FILE - it is generated by Glade.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nGtkWidget* create_window (void);\nGtkWidget* create_fileselection (void);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/main.c",
    "content": "/*\n * Initial main.c file generated by Glade. Edit as required.\n * Glade will not overwrite this file.\n */\n\n#include <gtk/gtk.h>\n#include \"interface.h\"\nvoid svm_toy_initialize();\n\nint main (int argc, char *argv[])\n{\n  GtkWidget *window;\n\n  gtk_set_locale ();\n  gtk_init (&argc, &argv);\n\n  window = create_window ();\n  gtk_widget_show (window);\n\n  svm_toy_initialize();\n  gtk_main ();\n  return 0;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/svm-toy.glade",
    "content": "<?xml version=\"1.0\"?>\n<GTK-Interface>\n\n<project>\n  <name>svm-toy</name>\n  <program_name>svm-toy</program_name>\n  <directory></directory>\n  <source_directory>src</source_directory>\n  <pixmaps_directory>pixmaps</pixmaps_directory>\n  <language>C</language>\n  <gnome_support>False</gnome_support>\n  <gettext_support>False</gettext_support>\n  <use_widget_names>False</use_widget_names>\n  <output_main_file>True</output_main_file>\n  <output_support_files>True</output_support_files>\n  <output_build_files>True</output_build_files>\n  <backup_source_files>False</backup_source_files>\n  <main_source_file>interface.c</main_source_file>\n  <main_header_file>interface.h</main_header_file>\n  <handler_source_file>callbacks.c</handler_source_file>\n  <handler_header_file>callbacks.h</handler_header_file>\n  <support_source_file>support.c</support_source_file>\n  <support_header_file>support.h</support_header_file>\n  <translatable_strings_file></translatable_strings_file>\n</project>\n\n<widget>\n  <class>GtkWindow</class>\n  <name>window</name>\n  <signal>\n    <name>destroy</name>\n    <handler>on_window1_destroy</handler>\n    <last_modification_time>Sun, 16 Apr 2000 09:47:10 GMT</last_modification_time>\n  </signal>\n  <title>SVM Toy</title>\n  <type>GTK_WINDOW_TOPLEVEL</type>\n  <position>GTK_WIN_POS_NONE</position>\n  <modal>False</modal>\n  <allow_shrink>False</allow_shrink>\n  <allow_grow>True</allow_grow>\n  <auto_shrink>False</auto_shrink>\n\n  <widget>\n    <class>GtkVBox</class>\n    <name>vbox1</name>\n    <homogeneous>False</homogeneous>\n    <spacing>0</spacing>\n\n    <widget>\n      <class>GtkDrawingArea</class>\n      <name>draw_main</name>\n      <width>500</width>\n      <height>500</height>\n      <events>GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK</events>\n      <signal>\n\t<name>button_press_event</name>\n\t<handler>on_draw_main_button_press_event</handler>\n\t<last_modification_time>Sun, 16 Apr 2000 13:02:05 GMT</last_modification_time>\n      </signal>\n      <signal>\n\t<name>expose_event</name>\n\t<handler>on_draw_main_expose_event</handler>\n\t<last_modification_time>Sun, 16 Apr 2000 14:27:05 GMT</last_modification_time>\n      </signal>\n      <child>\n\t<padding>0</padding>\n\t<expand>True</expand>\n\t<fill>True</fill>\n      </child>\n    </widget>\n\n    <widget>\n      <class>GtkHBox</class>\n      <name>hbox1</name>\n      <homogeneous>False</homogeneous>\n      <spacing>0</spacing>\n      <child>\n\t<padding>0</padding>\n\t<expand>False</expand>\n\t<fill>False</fill>\n      </child>\n\n      <widget>\n\t<class>GtkButton</class>\n\t<name>button_change</name>\n\t<can_focus>True</can_focus>\n\t<signal>\n\t  <name>clicked</name>\n\t  <handler>on_button_change_clicked</handler>\n\t  <last_modification_time>Sun, 16 Apr 2000 09:40:18 GMT</last_modification_time>\n\t</signal>\n\t<label>Change</label>\n\t<child>\n\t  <padding>0</padding>\n\t  <expand>False</expand>\n\t  <fill>False</fill>\n\t</child>\n      </widget>\n\n      <widget>\n\t<class>GtkButton</class>\n\t<name>button_run</name>\n\t<can_focus>True</can_focus>\n\t<signal>\n\t  <name>clicked</name>\n\t  <handler>on_button_run_clicked</handler>\n\t  <last_modification_time>Sun, 16 Apr 2000 09:40:37 GMT</last_modification_time>\n\t</signal>\n\t<label>Run</label>\n\t<child>\n\t  <padding>0</padding>\n\t  <expand>False</expand>\n\t  <fill>False</fill>\n\t</child>\n      </widget>\n\n      <widget>\n\t<class>GtkButton</class>\n\t<name>button_clear</name>\n\t<can_focus>True</can_focus>\n\t<signal>\n\t  <name>clicked</name>\n\t  <handler>on_button_clear_clicked</handler>\n\t  <last_modification_time>Sun, 16 Apr 2000 09:40:44 GMT</last_modification_time>\n\t</signal>\n\t<label>Clear</label>\n\t<child>\n\t  <padding>0</padding>\n\t  <expand>False</expand>\n\t  <fill>False</fill>\n\t</child>\n      </widget>\n\n      <widget>\n\t<class>GtkButton</class>\n\t<name>button_save</name>\n\t<can_focus>True</can_focus>\n\t<signal>\n\t  <name>clicked</name>\n\t  <handler>on_button_save_clicked</handler>\n\t  <last_modification_time>Fri, 16 Jun 2000 18:23:46 GMT</last_modification_time>\n\t</signal>\n\t<label>Save</label>\n\t<child>\n\t  <padding>0</padding>\n\t  <expand>False</expand>\n\t  <fill>False</fill>\n\t</child>\n      </widget>\n\n      <widget>\n\t<class>GtkButton</class>\n\t<name>button_load</name>\n\t<can_focus>True</can_focus>\n\t<signal>\n\t  <name>clicked</name>\n\t  <handler>on_button_load_clicked</handler>\n\t  <last_modification_time>Fri, 16 Jun 2000 18:23:56 GMT</last_modification_time>\n\t</signal>\n\t<label>Load</label>\n\t<child>\n\t  <padding>0</padding>\n\t  <expand>False</expand>\n\t  <fill>False</fill>\n\t</child>\n      </widget>\n\n      <widget>\n\t<class>GtkEntry</class>\n\t<name>entry_option</name>\n\t<can_focus>True</can_focus>\n\t<signal>\n\t  <name>activate</name>\n\t  <handler>on_button_run_clicked</handler>\n\t  <last_modification_time>Sun, 16 Apr 2000 09:42:46 GMT</last_modification_time>\n\t</signal>\n\t<editable>True</editable>\n\t<text_visible>True</text_visible>\n\t<text_max_length>0</text_max_length>\n\t<text></text>\n\t<child>\n\t  <padding>0</padding>\n\t  <expand>True</expand>\n\t  <fill>True</fill>\n\t</child>\n      </widget>\n    </widget>\n  </widget>\n</widget>\n\n<widget>\n  <class>GtkFileSelection</class>\n  <name>fileselection</name>\n  <border_width>10</border_width>\n  <signal>\n    <name>destroy</name>\n    <handler>on_fileselection_destroy</handler>\n    <last_modification_time>Fri, 16 Jun 2000 18:11:28 GMT</last_modification_time>\n  </signal>\n  <title>Select File</title>\n  <type>GTK_WINDOW_TOPLEVEL</type>\n  <position>GTK_WIN_POS_NONE</position>\n  <modal>True</modal>\n  <allow_shrink>False</allow_shrink>\n  <allow_grow>True</allow_grow>\n  <auto_shrink>False</auto_shrink>\n  <show_file_op_buttons>True</show_file_op_buttons>\n\n  <widget>\n    <class>GtkButton</class>\n    <child_name>FileSel:ok_button</child_name>\n    <name>filesel_ok</name>\n    <can_default>True</can_default>\n    <can_focus>True</can_focus>\n    <signal>\n      <name>clicked</name>\n      <handler>on_filesel_ok_clicked</handler>\n      <last_modification_time>Fri, 16 Jun 2000 18:09:56 GMT</last_modification_time>\n    </signal>\n    <label>OK</label>\n  </widget>\n\n  <widget>\n    <class>GtkButton</class>\n    <child_name>FileSel:cancel_button</child_name>\n    <name>filesel_cancel</name>\n    <can_default>True</can_default>\n    <can_focus>True</can_focus>\n    <signal>\n      <name>clicked</name>\n      <handler>on_filesel_cancel_clicked</handler>\n      <last_modification_time>Fri, 16 Jun 2000 18:09:46 GMT</last_modification_time>\n    </signal>\n    <label>Cancel</label>\n  </widget>\n</widget>\n\n</GTK-Interface>\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/qt/Makefile",
    "content": "CXX? = g++\nCFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui\nINCLUDE = /usr/include/qt4\nMOC = /usr/bin/moc-qt4\n\nsvm-toy: svm-toy.cpp svm-toy.moc ../../svm.o\n\t$(CXX) $(CFLAGS) svm-toy.cpp ../../svm.o -o svm-toy\n\nsvm-toy.moc: svm-toy.cpp\n\t$(MOC) svm-toy.cpp -o svm-toy.moc\n\n../../svm.o: ../../svm.cpp ../../svm.h\n\tmake -C ../.. svm.o\n\nclean:\n\trm -f *~ svm-toy svm-toy.moc ../../svm.o\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/qt/svm-toy.cpp",
    "content": "#include <QtGui>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#include \"../../svm.h\"\nusing namespace std;\n\n#define DEFAULT_PARAM \"-t 2 -c 100\"\n#define XLEN 500\n#define YLEN 500\n\nQRgb colors[] =\n{\n\tqRgb(0,0,0),\n\tqRgb(0,120,120),\n\tqRgb(120,120,0),\n\tqRgb(120,0,120),\n\tqRgb(0,200,200),\n\tqRgb(200,200,0),\n\tqRgb(200,0,200)\n};\n\nclass SvmToyWindow : public QWidget\n{\n\nQ_OBJECT\n\npublic:\n\tSvmToyWindow();\n\t~SvmToyWindow();\nprotected:\n\tvirtual void mousePressEvent( QMouseEvent* );\n\tvirtual void paintEvent( QPaintEvent* );\n\nprivate:\n\tQPixmap buffer;\n\tQPixmap icon1;\n\tQPixmap icon2;\n\tQPixmap icon3;\n\tQPushButton button_change_icon;\n\tQPushButton button_run;\n\tQPushButton button_clear;\n\tQPushButton button_save;\n\tQPushButton button_load;\n\tQLineEdit input_line;\n\tQPainter buffer_painter;\n\tstruct point {\n\t\tdouble x, y;\n\t\tsigned char value;\n\t};\n\tlist<point> point_list;\n\tint current_value;\n\tconst QPixmap& choose_icon(int v)\n\t{\n\t\tif(v==1) return icon1;\n\t\telse if(v==2) return icon2;\n\t\telse return icon3;\n\t}\n\tvoid clear_all()\n\t{\n\t\tpoint_list.clear();\n\t\tbuffer.fill(Qt::black);\n\t\trepaint();\n\t}\n\tvoid draw_point(const point& p)\n\t{\n\t\tconst QPixmap& icon = choose_icon(p.value);\n\t\tbuffer_painter.drawPixmap((int)(p.x*XLEN),(int)(p.y*YLEN),icon);\n\t\trepaint();\n\t}\n\tvoid draw_all_points()\n\t{\n\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\tdraw_point(*p);\t\n\t}\nprivate slots: \n\tvoid button_change_icon_clicked()\n\t{\n\t\t++current_value;\n\t\tif(current_value > 3) current_value = 1;\n\t\tbutton_change_icon.setIcon(choose_icon(current_value));\n\t}\n\tvoid button_run_clicked()\n\t{\n\t\t// guard\n\t\tif(point_list.empty()) return;\n\n\t\tsvm_parameter param;\n\t\tint i,j;\t\n\n\t\t// default values\n\t\tparam.svm_type = C_SVC;\n\t\tparam.kernel_type = RBF;\n\t\tparam.degree = 3;\n\t\tparam.gamma = 0;\n\t\tparam.coef0 = 0;\n\t\tparam.nu = 0.5;\n\t\tparam.cache_size = 100;\n\t\tparam.C = 1;\n\t\tparam.eps = 1e-3;\n\t\tparam.p = 0.1;\n\t\tparam.shrinking = 1;\n\t\tparam.probability = 0;\n\t\tparam.nr_weight = 0;\n\t\tparam.weight_label = NULL;\n\t\tparam.weight = NULL;\n\n\t\t// parse options\n\t\tconst char *p = input_line.text().toAscii().constData();\n\n\t\twhile (1) {\n\t\t\twhile (*p && *p != '-')\n\t\t\t\tp++;\n\n\t\t\tif (*p == '\\0')\n\t\t\t\tbreak;\n\n\t\t\tp++;\n\t\t\tswitch (*p++) {\n\t\t\t\tcase 's':\n\t\t\t\t\tparam.svm_type = atoi(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 't':\n\t\t\t\t\tparam.kernel_type = atoi(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'd':\n\t\t\t\t\tparam.degree = atoi(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'g':\n\t\t\t\t\tparam.gamma = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'r':\n\t\t\t\t\tparam.coef0 = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tparam.nu = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'm':\n\t\t\t\t\tparam.cache_size = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c':\n\t\t\t\t\tparam.C = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'e':\n\t\t\t\t\tparam.eps = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'p':\n\t\t\t\t\tparam.p = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'h':\n\t\t\t\t\tparam.shrinking = atoi(p);\n\t\t\t\t\tbreak;\n\t\t\t        case 'b':\n\t\t\t\t\tparam.probability = atoi(p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'w':\n\t\t\t\t\t++param.nr_weight;\n\t\t\t\t\tparam.weight_label = (int *)realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\t\tparam.weight = (double *)realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(p);\n\t\t\t\t\twhile(*p && !isspace(*p)) ++p;\n\t\t\t\t\tparam.weight[param.nr_weight-1] = atof(p);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\n\t\t// build problem\n\t\tsvm_problem prob;\n\n\t\tprob.l = point_list.size();\n\t\tprob.y = new double[prob.l];\n\n\t\tif(param.kernel_type == PRECOMPUTED)\n\t\t{\n\t\t}\n\t\telse if(param.svm_type == EPSILON_SVR ||\n\t\t\tparam.svm_type == NU_SVR)\n\t\t{\n\t\t\tif(param.gamma == 0) param.gamma = 1;\n\t\t\tsvm_node *x_space = new svm_node[2 * prob.l];\n\t\t\tprob.x = new svm_node *[prob.l];\n\n\t\t\ti = 0;\n\t\t\tfor (list <point>::iterator q = point_list.begin(); q != point_list.end(); q++, i++)\n\t\t\t{\n\t\t\t\tx_space[2 * i].index = 1;\n\t\t\t\tx_space[2 * i].value = q->x;\n\t\t\t\tx_space[2 * i + 1].index = -1;\n\t\t\t\tprob.x[i] = &x_space[2 * i];\n\t\t\t\tprob.y[i] = q->y;\n\t\t\t}\n\n\t\t\t// build model & classify\n\t\t\tsvm_model *model = svm_train(&prob, &param);\n\t\t\tsvm_node x[2];\n\t\t\tx[0].index = 1;\n\t\t\tx[1].index = -1;\n\t\t\tint *j = new int[XLEN];\n\n\t\t\tfor (i = 0; i < XLEN; i++)\n\t\t\t{\n\t\t\t\tx[0].value = (double) i / XLEN;\n\t\t\t\tj[i] = (int)(YLEN*svm_predict(model, x));\n\t\t\t}\n\t\t\t\n\t\t\tbuffer_painter.setPen(colors[0]);\n\t\t\tbuffer_painter.drawLine(0,0,0,YLEN-1);\n\n\t\t\tint p = (int)(param.p * YLEN);\n\t\t\tfor(i = 1; i < XLEN; i++)\n\t\t\t{\n\t\t\t\tbuffer_painter.setPen(colors[0]);\n\t\t\t\tbuffer_painter.drawLine(i,0,i,YLEN-1);\n\t\t\t\n\t\t\t\tbuffer_painter.setPen(colors[5]);\n\t\t\t\tbuffer_painter.drawLine(i-1,j[i-1],i,j[i]);\n\t\t\t\t\n\t\t\t\tif(param.svm_type == EPSILON_SVR)\n\t\t\t\t{\n\t\t\t\t\tbuffer_painter.setPen(colors[2]);\n\t\t\t\t\tbuffer_painter.drawLine(i-1,j[i-1]+p,i,j[i]+p);\n\n\t\t\t\t\tbuffer_painter.setPen(colors[2]);\n\t\t\t\t\tbuffer_painter.drawLine(i-1,j[i-1]-p,i,j[i]-p);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsvm_free_and_destroy_model(&model);\n\t\t\tdelete[] j;\n\t\t\tdelete[] x_space;\n\t\t\tdelete[] prob.x;\n\t\t\tdelete[] prob.y;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(param.gamma == 0) param.gamma = 0.5;\n\t\t\tsvm_node *x_space = new svm_node[3 * prob.l];\n\t\t\tprob.x = new svm_node *[prob.l];\n\n\t\t\ti = 0;\n\t\t\tfor (list <point>::iterator q = point_list.begin(); q != point_list.end(); q++, i++)\n\t\t\t{\n\t\t\t\tx_space[3 * i].index = 1;\n\t\t\t\tx_space[3 * i].value = q->x;\n\t\t\t\tx_space[3 * i + 1].index = 2;\n\t\t\t\tx_space[3 * i + 1].value = q->y;\n\t\t\t\tx_space[3 * i + 2].index = -1;\n\t\t\t\tprob.x[i] = &x_space[3 * i];\n\t\t\t\tprob.y[i] = q->value;\n\t\t\t}\n\n\t\t\t// build model & classify\n\t\t\tsvm_model *model = svm_train(&prob, &param);\n\t\t\tsvm_node x[3];\n\t\t\tx[0].index = 1;\n\t\t\tx[1].index = 2;\n\t\t\tx[2].index = -1;\n\n\t\t\tfor (i = 0; i < XLEN; i++)\n\t\t\t\tfor (j = 0; j < YLEN ; j++) {\n\t\t\t\t\tx[0].value = (double) i / XLEN;\n\t\t\t\t\tx[1].value = (double) j / YLEN;\n\t\t\t\t\tdouble d = svm_predict(model, x);\n\t\t\t\t\tif (param.svm_type == ONE_CLASS && d<0) d=2;\n\t\t\t\t\tbuffer_painter.setPen(colors[(int)d]);\n\t\t\t\t\tbuffer_painter.drawPoint(i,j);\n\t\t\t}\n\n\t\t\tsvm_free_and_destroy_model(&model);\n\t\t\tdelete[] x_space;\n\t\t\tdelete[] prob.x;\n\t\t\tdelete[] prob.y;\n\t\t}\n\t\tfree(param.weight_label);\n\t\tfree(param.weight);\n\t\tdraw_all_points();\n\t}\n\tvoid button_clear_clicked()\n\t{\n\t\tclear_all();\n\t}\n\tvoid button_save_clicked()\n\t{\n\t\tQString filename = QFileDialog::getSaveFileName();\n\t\tif(!filename.isNull())\n\t\t{\n\t\t\tFILE *fp = fopen(filename.toAscii().constData(),\"w\");\n\t\t\t\n\t\t\tconst char *p = input_line.text().toAscii().constData();\n\t\t\tconst char* svm_type_str = strstr(p, \"-s \");\n\t\t\tint svm_type = C_SVC;\n\t\t\tif(svm_type_str != NULL)\n\t\t\t\tsscanf(svm_type_str, \"-s %d\", &svm_type);\n\t\t\n\t\t\tif(fp)\n\t\t\t{\n\t\t\t\tif(svm_type == EPSILON_SVR || svm_type == NU_SVR)\n\t\t\t\t{\n\t\t\t\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\t\t\t\tfprintf(fp,\"%f 1:%f\\n\", p->y, p->x);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\t\t\t\tfprintf(fp,\"%d 1:%f 2:%f\\n\", p->value, p->x, p->y);\n\t\t\t\t}\n\t\t\t\tfclose(fp);\n\t\t\t}\n\t\t}\n\t}\n\tvoid button_load_clicked()\n\t{\n\t\tQString filename = QFileDialog::getOpenFileName();\n\t\tif(!filename.isNull())\n\t\t{\n\t\t\tFILE *fp = fopen(filename.toAscii().constData(),\"r\");\n\t\t\tif(fp)\n\t\t\t{\n\t\t\t\tclear_all();\n\t\t\t\tchar buf[4096];\n\t\t\t\twhile(fgets(buf,sizeof(buf),fp))\n\t\t\t\t{\n\t\t\t\t\tint v;\n\t\t\t\t\tdouble x,y;\n\t\t\t\t\tif(sscanf(buf,\"%d%*d:%lf%*d:%lf\",&v,&x,&y)==3)\n\t\t\t\t\t{\n\t\t\t\t\t\tpoint p = {x,y,v};\n\t\t\t\t\t\tpoint_list.push_back(p);\n\t\t\t\t\t}\n\t\t\t\t\telse if(sscanf(buf,\"%lf%*d:%lf\",&y,&x)==2)\n\t\t\t\t\t{\n\t\t\t\t\t\tpoint p = {x,y,current_value};\n\t\t\t\t\t\tpoint_list.push_back(p);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfclose(fp);\n\t\t\t\tdraw_all_points();\n\t\t\t}\t\t\t\t\n\t\t}\n\t\t\n\t}\n};\n\n#include \"svm-toy.moc\"\n\nSvmToyWindow::SvmToyWindow()\n:button_change_icon(this)\n,button_run(\"Run\",this)\n,button_clear(\"Clear\",this)\n,button_save(\"Save\",this)\n,button_load(\"Load\",this)\n,input_line(this)\n,current_value(1)\n{\n\tbuffer = QPixmap(XLEN,YLEN);\n\tbuffer.fill(Qt::black);\n\n\tbuffer_painter.begin(&buffer);\n\n\tQObject::connect(&button_change_icon, SIGNAL(clicked()), this,\n\t\t\t SLOT(button_change_icon_clicked()));\n\tQObject::connect(&button_run, SIGNAL(clicked()), this,\n\t\t\t SLOT(button_run_clicked()));\n\tQObject::connect(&button_clear, SIGNAL(clicked()), this,\n\t\t\t SLOT(button_clear_clicked()));\n\tQObject::connect(&button_save, SIGNAL(clicked()), this,\n\t\t\t SLOT(button_save_clicked()));\n\tQObject::connect(&button_load, SIGNAL(clicked()), this,\n\t\t\t SLOT(button_load_clicked()));\n\tQObject::connect(&input_line, SIGNAL(returnPressed()), this,\n\t\t\t SLOT(button_run_clicked()));\n\n  \t// don't blank the window before repainting\n\tsetAttribute(Qt::WA_NoBackground);\n  \n\ticon1 = QPixmap(4,4);\n\ticon2 = QPixmap(4,4);\n\ticon3 = QPixmap(4,4);\n\t\n\t\n\tQPainter painter;\n\tpainter.begin(&icon1);\n\tpainter.fillRect(0,0,4,4,QBrush(colors[4]));\n\tpainter.end();\n\n\tpainter.begin(&icon2);\n\tpainter.fillRect(0,0,4,4,QBrush(colors[5]));\n\tpainter.end();\n\n\tpainter.begin(&icon3);\n\tpainter.fillRect(0,0,4,4,QBrush(colors[6]));\n\tpainter.end();\n\n\tbutton_change_icon.setGeometry( 0, YLEN, 50, 25 );\n\tbutton_run.setGeometry( 50, YLEN, 50, 25 );\n\tbutton_clear.setGeometry( 100, YLEN, 50, 25 );\n\tbutton_save.setGeometry( 150, YLEN, 50, 25);\n\tbutton_load.setGeometry( 200, YLEN, 50, 25);\n\tinput_line.setGeometry( 250, YLEN, 250, 25);\n\t\n\tinput_line.setText(DEFAULT_PARAM);\n\tbutton_change_icon.setIcon(icon1);\n}\n\nSvmToyWindow::~SvmToyWindow()\n{\n\tbuffer_painter.end();\n}\n\nvoid SvmToyWindow::mousePressEvent( QMouseEvent* event )\n{\n\tpoint p = {(double)event->x()/XLEN, (double)event->y()/YLEN, current_value};\n\tpoint_list.push_back(p);\n\tdraw_point(p);\n}\n\nvoid SvmToyWindow::paintEvent( QPaintEvent* )\n{\n\t// copy the image from the buffer pixmap to the window\n\tQPainter p(this);\n\tp.drawPixmap(0, 0, buffer);\n}\n\nint main( int argc, char* argv[] )\n{\n\tQApplication myapp( argc, argv );\n\n\tSvmToyWindow* mywidget = new SvmToyWindow();\n\tmywidget->setGeometry( 100, 100, XLEN, YLEN+25 );\n\n\tmywidget->show();\n\treturn myapp.exec();\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/windows/svm-toy.cpp",
    "content": "#include <windows.h>\n#include <windowsx.h>\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#include \"../../svm.h\"\nusing namespace std;\n\n#define DEFAULT_PARAM \"-t 2 -c 100\"\n#define XLEN 500\n#define YLEN 500\n#define DrawLine(dc,x1,y1,x2,y2,c) \\\n\tdo { \\\n\t\tHPEN hpen = CreatePen(PS_SOLID,0,c); \\\n\t\tHPEN horig = SelectPen(dc,hpen); \\\n\t\tMoveToEx(dc,x1,y1,NULL); \\\n\t\tLineTo(dc,x2,y2); \\\n\t\tSelectPen(dc,horig); \\\n\t\tDeletePen(hpen); \\\n\t} while(0)\n\nusing namespace std;\n\nCOLORREF colors[] =\n{\n\tRGB(0,0,0),\n\tRGB(0,120,120),\n\tRGB(120,120,0),\n\tRGB(120,0,120),\n\tRGB(0,200,200),\n\tRGB(200,200,0),\n\tRGB(200,0,200)\n};\n\nHWND main_window;\nHBITMAP buffer;\nHDC window_dc;\nHDC buffer_dc;\nHBRUSH brush1, brush2, brush3;\nHWND edit;\n\nenum {\n\tID_BUTTON_CHANGE, ID_BUTTON_RUN, ID_BUTTON_CLEAR,\n\tID_BUTTON_LOAD, ID_BUTTON_SAVE, ID_EDIT\n};\n\nstruct point {\n\tdouble x, y;\n\tsigned char value;\n};\n\nlist<point> point_list;\nint current_value = 1;\n\nLRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);\n\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\n\t\t   PSTR szCmdLine, int iCmdShow)\n{\n\tstatic char szAppName[] = \"SvmToy\";\n\tMSG msg;\n\tWNDCLASSEX wndclass;\n\n\twndclass.cbSize = sizeof(wndclass);\n\twndclass.style = CS_HREDRAW | CS_VREDRAW;\n\twndclass.lpfnWndProc = WndProc;\n\twndclass.cbClsExtra = 0;\n\twndclass.cbWndExtra = 0;\n\twndclass.hInstance = hInstance;\n\twndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);\n\twndclass.hCursor = LoadCursor(NULL, IDC_ARROW);\n\twndclass.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);\n\twndclass.lpszMenuName = NULL;\n\twndclass.lpszClassName = szAppName;\n\twndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);\n\n\tRegisterClassEx(&wndclass);\n\n\tmain_window = CreateWindow(szAppName,\t// window class name\n\t\t\t\t    \"SVM Toy\",\t// window caption\n\t\t\t\t    WS_OVERLAPPEDWINDOW,// window style\n\t\t\t\t    CW_USEDEFAULT,\t// initial x position\n\t\t\t\t    CW_USEDEFAULT,\t// initial y position\n\t\t\t\t    XLEN,\t// initial x size\n\t\t\t\t    YLEN+52,\t// initial y size\n\t\t\t\t    NULL,\t// parent window handle\n\t\t\t\t    NULL,\t// window menu handle\n\t\t\t\t    hInstance,\t// program instance handle\n\t\t\t\t    NULL);\t// creation parameters\n\n\tShowWindow(main_window, iCmdShow);\n\tUpdateWindow(main_window);\n\n\tCreateWindow(\"button\", \"Change\", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,\n\t\t     0, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_CHANGE, hInstance, NULL);\n\tCreateWindow(\"button\", \"Run\", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,\n\t\t     50, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_RUN, hInstance, NULL);\n\tCreateWindow(\"button\", \"Clear\", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,\n\t\t     100, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_CLEAR, hInstance, NULL);\n\tCreateWindow(\"button\", \"Save\", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,\n\t\t     150, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_SAVE, hInstance, NULL);\n\tCreateWindow(\"button\", \"Load\", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,\n\t\t     200, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_LOAD, hInstance, NULL);\n\n\tedit = CreateWindow(\"edit\", NULL, WS_CHILD | WS_VISIBLE,\n\t\t            250, YLEN, 250, 25, main_window, (HMENU) ID_EDIT, hInstance, NULL);\n\n\tEdit_SetText(edit,DEFAULT_PARAM);\n\n\tbrush1 = CreateSolidBrush(colors[4]);\n\tbrush2 = CreateSolidBrush(colors[5]);\n\tbrush3 = CreateSolidBrush(colors[6]);\n\n\twindow_dc = GetDC(main_window);\n\tbuffer = CreateCompatibleBitmap(window_dc, XLEN, YLEN);\n\tbuffer_dc = CreateCompatibleDC(window_dc);\n\tSelectObject(buffer_dc, buffer);\n\tPatBlt(buffer_dc, 0, 0, XLEN, YLEN, BLACKNESS);\n\n\twhile (GetMessage(&msg, NULL, 0, 0)) {\n\t\tTranslateMessage(&msg);\n\t\tDispatchMessage(&msg);\n\t}\n\treturn msg.wParam;\n}\n\nint getfilename( HWND hWnd , char *filename, int len, int save) \n{ \t\n\tOPENFILENAME OpenFileName; \t\n\tmemset(&OpenFileName,0,sizeof(OpenFileName));\n\tfilename[0]='\\0';\n \t\n\tOpenFileName.lStructSize       = sizeof(OPENFILENAME); \n\tOpenFileName.hwndOwner         = hWnd; \t\n\tOpenFileName.lpstrFile         = filename; \n\tOpenFileName.nMaxFile          = len; \n\tOpenFileName.Flags             = 0;\n \n\treturn save?GetSaveFileName(&OpenFileName):GetOpenFileName(&OpenFileName);\t\t\n}\n\nvoid clear_all()\n{\n\tpoint_list.clear();\n\tPatBlt(buffer_dc, 0, 0, XLEN, YLEN, BLACKNESS);\n\tInvalidateRect(main_window, 0, 0);\n}\n\nHBRUSH choose_brush(int v)\n{\n\tif(v==1) return brush1;\n\telse if(v==2) return brush2;\n\telse return brush3;\n}\n\nvoid draw_point(const point & p)\n{\n\tRECT rect;\n\trect.left = int(p.x*XLEN);\n\trect.top = int(p.y*YLEN);\n\trect.right = int(p.x*XLEN) + 3;\n\trect.bottom = int(p.y*YLEN) + 3;\n\tFillRect(window_dc, &rect, choose_brush(p.value));\n\tFillRect(buffer_dc, &rect, choose_brush(p.value));\n}\n\nvoid draw_all_points()\n{\n\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end(); p++)\n\t\tdraw_point(*p);\n}\n\nvoid button_run_clicked()\n{\n\t// guard\n\tif(point_list.empty()) return;\n\n\tsvm_parameter param;\n\tint i,j;\n\t\n\t// default values\n\tparam.svm_type = C_SVC;\n\tparam.kernel_type = RBF;\n\tparam.degree = 3;\n\tparam.gamma = 0;\n\tparam.coef0 = 0;\n\tparam.nu = 0.5;\n\tparam.cache_size = 100;\n\tparam.C = 1;\n\tparam.eps = 1e-3;\n\tparam.p = 0.1;\n\tparam.shrinking = 1;\n\tparam.probability = 0;\n\tparam.nr_weight = 0;\n\tparam.weight_label = NULL;\n\tparam.weight = NULL;\n\n\t// parse options\n\tchar str[1024];\n\tEdit_GetLine(edit, 0, str, sizeof(str));\n\tconst char *p = str;\n\n\twhile (1) {\n\t\twhile (*p && *p != '-')\n\t\t\tp++;\n\n\t\tif (*p == '\\0')\n\t\t\tbreak;\n\n\t\tp++;\n\t\tswitch (*p++) {\n\t\t\tcase 's':\n\t\t\t\tparam.svm_type = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tparam.kernel_type = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'd':\n\t\t\t\tparam.degree = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'g':\n\t\t\t\tparam.gamma = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'r':\n\t\t\t\tparam.coef0 = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'n':\n\t\t\t\tparam.nu = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tparam.cache_size = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tparam.C = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'e':\n\t\t\t\tparam.eps = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'p':\n\t\t\t\tparam.p = atof(p);\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\t\tparam.shrinking = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'b':\n\t\t\t\tparam.probability = atoi(p);\n\t\t\t\tbreak;\n\t\t\tcase 'w':\n\t\t\t\t++param.nr_weight;\n\t\t\t\tparam.weight_label = (int *)realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\tparam.weight = (double *)realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(p);\n\t\t\t\twhile(*p && !isspace(*p)) ++p;\n\t\t\t\tparam.weight[param.nr_weight-1] = atof(p);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n\t// build problem\n\tsvm_problem prob;\n\n\tprob.l = point_list.size();\n\tprob.y = new double[prob.l];\n\n\tif(param.kernel_type == PRECOMPUTED)\n\t{\n\t}\n\telse if(param.svm_type == EPSILON_SVR ||\n\t\tparam.svm_type == NU_SVR)\n\t{\n\t\tif(param.gamma == 0) param.gamma = 1;\n\t\tsvm_node *x_space = new svm_node[2 * prob.l];\n\t\tprob.x = new svm_node *[prob.l];\n\n\t\ti = 0;\n\t\tfor (list<point>::iterator q = point_list.begin(); q != point_list.end(); q++, i++)\n\t\t{\n\t\t\tx_space[2 * i].index = 1;\n\t\t\tx_space[2 * i].value = q->x;\n\t\t\tx_space[2 * i + 1].index = -1;\n\t\t\tprob.x[i] = &x_space[2 * i];\n\t\t\tprob.y[i] = q->y;\n\t\t}\n\n\t\t// build model & classify\n\t\tsvm_model *model = svm_train(&prob, &param);\n\t\tsvm_node x[2];\n\t\tx[0].index = 1;\n\t\tx[1].index = -1;\n\t\tint *j = new int[XLEN];\n\n\t\tfor (i = 0; i < XLEN; i++)\n\t\t{\n\t\t\tx[0].value = (double) i / XLEN;\n\t\t\tj[i] = (int)(YLEN*svm_predict(model, x));\n\t\t}\n\t\t\n\t\tDrawLine(buffer_dc,0,0,0,YLEN,colors[0]);\n\t\tDrawLine(window_dc,0,0,0,YLEN,colors[0]);\n\t\t\n\t\tint p = (int)(param.p * YLEN);\n\t\tfor(int i=1; i < XLEN; i++)\n\t\t{\n\t\t\tDrawLine(buffer_dc,i,0,i,YLEN,colors[0]);\n\t\t\tDrawLine(window_dc,i,0,i,YLEN,colors[0]);\n\t\t\t\n\t\t\tDrawLine(buffer_dc,i-1,j[i-1],i,j[i],colors[5]);\n\t\t\tDrawLine(window_dc,i-1,j[i-1],i,j[i],colors[5]);\n\n\t\t\tif(param.svm_type == EPSILON_SVR)\n\t\t\t{\t\t\t\n\t\t\t\tDrawLine(buffer_dc,i-1,j[i-1]+p,i,j[i]+p,colors[2]);\n\t\t\t\tDrawLine(window_dc,i-1,j[i-1]+p,i,j[i]+p,colors[2]);\n\n\t\t\t\tDrawLine(buffer_dc,i-1,j[i-1]-p,i,j[i]-p,colors[2]);\n\t\t\t\tDrawLine(window_dc,i-1,j[i-1]-p,i,j[i]-p,colors[2]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvm_free_and_destroy_model(&model);\n\t\tdelete[] j;\n\t\tdelete[] x_space;\n\t\tdelete[] prob.x;\n\t\tdelete[] prob.y;\n\t}\n\telse\n\t{\n\t\tif(param.gamma == 0) param.gamma = 0.5;\n\t\tsvm_node *x_space = new svm_node[3 * prob.l];\n\t\tprob.x = new svm_node *[prob.l];\n\n\t\ti = 0;\n\t\tfor (list<point>::iterator q = point_list.begin(); q != point_list.end(); q++, i++)\n\t\t{\n\t\t\tx_space[3 * i].index = 1;\n\t\t\tx_space[3 * i].value = q->x;\n\t\t\tx_space[3 * i + 1].index = 2;\n\t\t\tx_space[3 * i + 1].value = q->y;\n\t\t\tx_space[3 * i + 2].index = -1;\n\t\t\tprob.x[i] = &x_space[3 * i];\n\t\t\tprob.y[i] = q->value;\n\t\t}\n\n\t\t// build model & classify\n\t\tsvm_model *model = svm_train(&prob, &param);\n\t\tsvm_node x[3];\n\t\tx[0].index = 1;\n\t\tx[1].index = 2;\n\t\tx[2].index = -1;\n\n\t\tfor (i = 0; i < XLEN; i++)\n\t\t\tfor (j = 0; j < YLEN; j++) {\n\t\t\t\tx[0].value = (double) i / XLEN;\n\t\t\t\tx[1].value = (double) j / YLEN;\n\t\t\t\tdouble d = svm_predict(model, x);\n\t\t\t\tif (param.svm_type == ONE_CLASS && d<0) d=2;\n\t\t\t\tSetPixel(window_dc, i, j, colors[(int)d]);\n\t\t\t\tSetPixel(buffer_dc, i, j, colors[(int)d]);\n\t\t\t}\n\n\t\tsvm_free_and_destroy_model(&model);\n\t\tdelete[] x_space;\n\t\tdelete[] prob.x;\n\t\tdelete[] prob.y;\n\t}\n\tfree(param.weight_label);\n\tfree(param.weight);\n\tdraw_all_points();\n}\n\nLRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\n{\n\tHDC hdc;\n\tPAINTSTRUCT ps;\n\n\tswitch (iMsg) {\n\tcase WM_LBUTTONDOWN:\n\t\t{\n\t\t\tint x = LOWORD(lParam);\n\t\t\tint y = HIWORD(lParam);\n\t\t\tpoint p = {(double)x/XLEN, (double)y/YLEN, current_value};\n\t\t\tpoint_list.push_back(p);\n\t\t\tdraw_point(p);\n\t\t}\n\t\treturn 0;\n\tcase WM_PAINT:\n\t\t{\n\t\t\thdc = BeginPaint(hwnd, &ps);\n\t\t\tBitBlt(hdc, 0, 0, XLEN, YLEN, buffer_dc, 0, 0, SRCCOPY);\n\t\t\tEndPaint(hwnd, &ps);\n\t\t}\n\t\treturn 0;\n\tcase WM_COMMAND:\n\t\t{\n\t\t\tint id = LOWORD(wParam);\n\t\t\tswitch (id) {\n\t\t\tcase ID_BUTTON_CHANGE:\n\t\t\t\t++current_value;\n\t\t\t\tif(current_value > 3) current_value = 1;\n\t\t\t\tbreak;\n\t\t\tcase ID_BUTTON_RUN:\n\t\t\t\tbutton_run_clicked();\n\t\t\t\tbreak;\n\t\t\tcase ID_BUTTON_CLEAR:\n\t\t\t\tclear_all();\t\t\t\t\n\t\t\t\tbreak;\n\t\t\tcase ID_BUTTON_SAVE:\n\t\t\t\t{\n\t\t\t\t\tchar filename[1024];\n\t\t\t\t\tif(getfilename(hwnd,filename,1024,1))\n\t\t\t\t\t{\n\t\t\t\t\t\tFILE *fp = fopen(filename,\"w\");\n\n\t\t\t\t\t\tchar str[1024];\n\t\t\t\t\t\tEdit_GetLine(edit, 0, str, sizeof(str));\n\t\t\t\t\t\tconst char *p = str;\n\t\t\t\t\t\tconst char* svm_type_str = strstr(p, \"-s \");\n\t\t\t\t\t\tint svm_type = C_SVC;\n\t\t\t\t\t\tif(svm_type_str != NULL)\n\t\t\t\t\t\t\tsscanf(svm_type_str, \"-s %d\", &svm_type);\n\n\t\t\t\t\t\tif(fp)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(svm_type == EPSILON_SVR || svm_type == NU_SVR)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\t\t\t\t\t\t\tfprintf(fp,\"%f 1:%f\\n\", p->y, p->x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfor(list<point>::iterator p = point_list.begin(); p != point_list.end();p++)\n\t\t\t\t\t\t\t\t\tfprintf(fp,\"%d 1:%f 2:%f\\n\", p->value, p->x, p->y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfclose(fp);\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\tbreak;\n\t\t\tcase ID_BUTTON_LOAD:\n\t\t\t\t{\n\t\t\t\t\tchar filename[1024];\n\t\t\t\t\tif(getfilename(hwnd,filename,1024,0))\t\t\t\t\t\n\t\t\t\t\t{\n\t\t\t\t\t\tFILE *fp = fopen(filename,\"r\");\n\t\t\t\t\t\tif(fp)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclear_all();\n\t\t\t\t\t\t\tchar buf[4096];\n\t\t\t\t\t\t\twhile(fgets(buf,sizeof(buf),fp))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tint v;\n\t\t\t\t\t\t\t\tdouble x,y;\n\t\t\t\t\t\t\t\tif(sscanf(buf,\"%d%*d:%lf%*d:%lf\",&v,&x,&y)==3)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpoint p = {x,y,v};\n\t\t\t\t\t\t\t\t\tpoint_list.push_back(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(sscanf(buf,\"%lf%*d:%lf\",&y,&x)==2)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpoint p = {x,y,current_value};\n\t\t\t\t\t\t\t\t\tpoint_list.push_back(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfclose(fp);\n\t\t\t\t\t\t\tdraw_all_points();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\tcase WM_DESTROY:\n\t\tPostQuitMessage(0);\n\t\treturn 0;\n\t}\n\n\treturn DefWindowProc(hwnd, iMsg, wParam, lParam);\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-train.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include \"svm.h\"\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n\nvoid print_null(const char *s) {}\n\nvoid exit_with_help()\n{\n\tprintf(\n\t\"Usage: svm-train [options] training_set_file [model_file]\\n\"\n\t\"options:\\n\"\n\t\"-s svm_type : set type of SVM (default 0)\\n\"\n\t\"\t0 -- C-SVC\t\t(multi-class classification)\\n\"\n\t\"\t1 -- nu-SVC\t\t(multi-class classification)\\n\"\n\t\"\t2 -- one-class SVM\\n\"\n\t\"\t3 -- epsilon-SVR\t(regression)\\n\"\n\t\"\t4 -- nu-SVR\t\t(regression)\\n\"\n\t\"-t kernel_type : set type of kernel function (default 2)\\n\"\n\t\"\t0 -- linear: u'*v\\n\"\n\t\"\t1 -- polynomial: (gamma*u'*v + coef0)^degree\\n\"\n\t\"\t2 -- radial basis function: exp(-gamma*|u-v|^2)\\n\"\n\t\"\t3 -- sigmoid: tanh(gamma*u'*v + coef0)\\n\"\n\t\"\t4 -- precomputed kernel (kernel values in training_set_file)\\n\"\n\t\"-d degree : set degree in kernel function (default 3)\\n\"\n\t\"-g gamma : set gamma in kernel function (default 1/num_features)\\n\"\n\t\"-r coef0 : set coef0 in kernel function (default 0)\\n\"\n\t\"-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)\\n\"\n\t\"-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)\\n\"\n\t\"-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\\n\"\n\t\"-m cachesize : set cache memory size in MB (default 100)\\n\"\n\t\"-e epsilon : set tolerance of termination criterion (default 0.001)\\n\"\n\t\"-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)\\n\"\n\t\"-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)\\n\"\n\t\"-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)\\n\"\n\t\"-v n: n-fold cross validation mode\\n\"\n\t\"-q : quiet mode (no outputs)\\n\"\n\t);\n\texit(1);\n}\n\nvoid exit_input_error(int line_num)\n{\n\tfprintf(stderr,\"Wrong input format at line %d\\n\", line_num);\n\texit(1);\n}\n\nvoid parse_command_line(int argc, char **argv, char *input_file_name, char *model_file_name);\nvoid read_problem(const char *filename);\nvoid do_cross_validation();\n\nstruct svm_parameter param;\t\t// set by parse_command_line\nstruct svm_problem prob;\t\t// set by read_problem\nstruct svm_model *model;\nstruct svm_node *x_space;\nint cross_validation;\nint nr_fold;\n\nstatic char *line = NULL;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\t\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line,max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\nint main(int argc, char **argv)\n{\n\tchar input_file_name[1024];\n\tchar model_file_name[1024];\n\tconst char *error_msg;\n\n\tparse_command_line(argc, argv, input_file_name, model_file_name);\n\tread_problem(input_file_name);\n\terror_msg = svm_check_parameter(&prob,&param);\n\n\tif(error_msg)\n\t{\n\t\tfprintf(stderr,\"ERROR: %s\\n\",error_msg);\n\t\texit(1);\n\t}\n\n\tif(cross_validation)\n\t{\n\t\tdo_cross_validation();\n\t}\n\telse\n\t{\n\t\tmodel = svm_train(&prob,&param);\n\t\tif(svm_save_model(model_file_name,model))\n\t\t{\n\t\t\tfprintf(stderr, \"can't save model to file %s\\n\", model_file_name);\n\t\t\texit(1);\n\t\t}\n\t\tsvm_free_and_destroy_model(&model);\n\t}\n\tsvm_destroy_param(&param);\n\tfree(prob.y);\n\tfree(prob.x);\n\tfree(x_space);\n\tfree(line);\n\n\treturn 0;\n}\n\nvoid do_cross_validation()\n{\n\tint i;\n\tint total_correct = 0;\n\tdouble total_error = 0;\n\tdouble sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;\n\tdouble *target = Malloc(double,prob.l);\n\n\tsvm_cross_validation(&prob,&param,nr_fold,target);\n\tif(param.svm_type == EPSILON_SVR ||\n\t   param.svm_type == NU_SVR)\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tdouble y = prob.y[i];\n\t\t\tdouble v = target[i];\n\t\t\ttotal_error += (v-y)*(v-y);\n\t\t\tsumv += v;\n\t\t\tsumy += y;\n\t\t\tsumvv += v*v;\n\t\t\tsumyy += y*y;\n\t\t\tsumvy += v*y;\n\t\t}\n\t\tprintf(\"Cross Validation Mean squared error = %g\\n\",total_error/prob.l);\n\t\tprintf(\"Cross Validation Squared correlation coefficient = %g\\n\",\n\t\t\t((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/\n\t\t\t((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))\n\t\t\t);\n\t}\n\telse\n\t{\n\t\tfor(i=0;i<prob.l;i++)\n\t\t\tif(target[i] == prob.y[i])\n\t\t\t\t++total_correct;\n\t\tprintf(\"Cross Validation Accuracy = %g%%\\n\",100.0*total_correct/prob.l);\n\t}\n\tfree(target);\n}\n\nvoid parse_command_line(int argc, char **argv, char *input_file_name, char *model_file_name)\n{\n\tint i;\n\tvoid (*print_func)(const char*) = NULL;\t// default printing to stdout\n\n\t// default values\n\tparam.svm_type = C_SVC;\n\tparam.kernel_type = RBF;\n\tparam.degree = 3;\n\tparam.gamma = 0;\t// 1/num_features\n\tparam.coef0 = 0;\n\tparam.nu = 0.5;\n\tparam.cache_size = 100;\n\tparam.C = 1;\n\tparam.eps = 1e-3;\n\tparam.p = 0.1;\n\tparam.shrinking = 1;\n\tparam.probability = 0;\n\tparam.nr_weight = 0;\n\tparam.weight_label = NULL;\n\tparam.weight = NULL;\n\tcross_validation = 0;\n\n\t// parse options\n\tfor(i=1;i<argc;i++)\n\t{\n\t\tif(argv[i][0] != '-') break;\n\t\tif(++i>=argc)\n\t\t\texit_with_help();\n\t\tswitch(argv[i-1][1])\n\t\t{\n\t\t\tcase 's':\n\t\t\t\tparam.svm_type = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tparam.kernel_type = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'd':\n\t\t\t\tparam.degree = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'g':\n\t\t\t\tparam.gamma = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'r':\n\t\t\t\tparam.coef0 = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'n':\n\t\t\t\tparam.nu = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tparam.cache_size = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tparam.C = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'e':\n\t\t\t\tparam.eps = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'p':\n\t\t\t\tparam.p = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\t\tparam.shrinking = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'b':\n\t\t\t\tparam.probability = atoi(argv[i]);\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tprint_func = &print_null;\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\t\t\tcase 'v':\n\t\t\t\tcross_validation = 1;\n\t\t\t\tnr_fold = atoi(argv[i]);\n\t\t\t\tif(nr_fold < 2)\n\t\t\t\t{\n\t\t\t\t\tfprintf(stderr,\"n-fold cross validation: n must >= 2\\n\");\n\t\t\t\t\texit_with_help();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'w':\n\t\t\t\t++param.nr_weight;\n\t\t\t\tparam.weight_label = (int *)realloc(param.weight_label,sizeof(int)*param.nr_weight);\n\t\t\t\tparam.weight = (double *)realloc(param.weight,sizeof(double)*param.nr_weight);\n\t\t\t\tparam.weight_label[param.nr_weight-1] = atoi(&argv[i-1][2]);\n\t\t\t\tparam.weight[param.nr_weight-1] = atof(argv[i]);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfprintf(stderr,\"Unknown option: -%c\\n\", argv[i-1][1]);\n\t\t\t\texit_with_help();\n\t\t}\n\t}\n\n\tsvm_set_print_string_function(print_func);\n\n\t// determine filenames\n\n\tif(i>=argc)\n\t\texit_with_help();\n\n\tstrcpy(input_file_name, argv[i]);\n\n\tif(i<argc-1)\n\t\tstrcpy(model_file_name,argv[i+1]);\n\telse\n\t{\n\t\tchar *p = strrchr(argv[i],'/');\n\t\tif(p==NULL)\n\t\t\tp = argv[i];\n\t\telse\n\t\t\t++p;\n\t\tsprintf(model_file_name,\"%s.model\",p);\n\t}\n}\n\n// read in a problem (in svmlight format)\n\nvoid read_problem(const char *filename)\n{\n\tint max_index, inst_max_index, i;\n\tsize_t elements, j;\n\tFILE *fp = fopen(filename,\"r\");\n\tchar *endptr;\n\tchar *idx, *val, *label;\n\n\tif(fp == NULL)\n\t{\n\t\tfprintf(stderr,\"can't open input file %s\\n\",filename);\n\t\texit(1);\n\t}\n\n\tprob.l = 0;\n\telements = 0;\n\n\tmax_line_len = 1024;\n\tline = Malloc(char,max_line_len);\n\twhile(readline(fp)!=NULL)\n\t{\n\t\tchar *p = strtok(line,\" \\t\"); // label\n\n\t\t// features\n\t\twhile(1)\n\t\t{\n\t\t\tp = strtok(NULL,\" \\t\");\n\t\t\tif(p == NULL || *p == '\\n') // check '\\n' as ' ' may be after the last feature\n\t\t\t\tbreak;\n\t\t\t++elements;\n\t\t}\n\t\t++elements;\n\t\t++prob.l;\n\t}\n\trewind(fp);\n\n\tprob.y = Malloc(double,prob.l);\n\tprob.x = Malloc(struct svm_node *,prob.l);\n\tx_space = Malloc(struct svm_node,elements);\n\n\tmax_index = 0;\n\tj=0;\n\tfor(i=0;i<prob.l;i++)\n\t{\n\t\tinst_max_index = -1; // strtol gives 0 if wrong format, and precomputed kernel has <index> start from 0\n\t\treadline(fp);\n\t\tprob.x[i] = &x_space[j];\n\t\tlabel = strtok(line,\" \\t\\n\");\n\t\tif(label == NULL) // empty line\n\t\t\texit_input_error(i+1);\n\n\t\tprob.y[i] = strtod(label,&endptr);\n\t\tif(endptr == label || *endptr != '\\0')\n\t\t\texit_input_error(i+1);\n\n\t\twhile(1)\n\t\t{\n\t\t\tidx = strtok(NULL,\":\");\n\t\t\tval = strtok(NULL,\" \\t\");\n\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\n\t\t\terrno = 0;\n\t\t\tx_space[j].index = (int) strtol(idx,&endptr,10);\n\t\t\tif(endptr == idx || errno != 0 || *endptr != '\\0' || x_space[j].index <= inst_max_index)\n\t\t\t\texit_input_error(i+1);\n\t\t\telse\n\t\t\t\tinst_max_index = x_space[j].index;\n\n\t\t\terrno = 0;\n\t\t\tx_space[j].value = strtod(val,&endptr);\n\t\t\tif(endptr == val || errno != 0 || (*endptr != '\\0' && !isspace(*endptr)))\n\t\t\t\texit_input_error(i+1);\n\n\t\t\t++j;\n\t\t}\n\n\t\tif(inst_max_index > max_index)\n\t\t\tmax_index = inst_max_index;\n\t\tx_space[j++].index = -1;\n\t}\n\n\tif(param.gamma == 0 && max_index > 0)\n\t\tparam.gamma = 1.0/max_index;\n\n\tif(param.kernel_type == PRECOMPUTED)\n\t\tfor(i=0;i<prob.l;i++)\n\t\t{\n\t\t\tif (prob.x[i][0].index != 0)\n\t\t\t{\n\t\t\t\tfprintf(stderr,\"Wrong input format: first column must be 0:sample_serial_number\\n\");\n\t\t\t\texit(1);\n\t\t\t}\n\t\t\tif ((int)prob.x[i][0].value <= 0 || (int)prob.x[i][0].value > max_index)\n\t\t\t{\n\t\t\t\tfprintf(stderr,\"Wrong input format: sample_serial_number out of range\\n\");\n\t\t\t\texit(1);\n\t\t\t}\n\t\t}\n\n\tfclose(fp);\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm.cpp",
    "content": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <float.h>\n#include <string.h>\n#include <stdarg.h>\n#include <limits.h>\n#include <locale.h>\n#include \"svm.h\"\nint libsvm_version = LIBSVM_VERSION;\ntypedef float Qfloat;\ntypedef signed char schar;\n#ifndef min\ntemplate <class T> static inline T min(T x,T y) { return (x<y)?x:y; }\n#endif\n#ifndef max\ntemplate <class T> static inline T max(T x,T y) { return (x>y)?x:y; }\n#endif\ntemplate <class T> static inline void swap(T& x, T& y) { T t=x; x=y; y=t; }\ntemplate <class S, class T> static inline void clone(T*& dst, S* src, int n)\n{\n\tdst = new T[n];\n\tmemcpy((void *)dst,(void *)src,sizeof(T)*n);\n}\nstatic inline double powi(double base, int times)\n{\n\tdouble tmp = base, ret = 1.0;\n\n\tfor(int t=times; t>0; t/=2)\n\t{\n\t\tif(t%2==1) ret*=tmp;\n\t\ttmp = tmp * tmp;\n\t}\n\treturn ret;\n}\n#define INF HUGE_VAL\n#define TAU 1e-12\n#define Malloc(type,n) (type *)malloc((n)*sizeof(type))\n\nstatic void print_string_stdout(const char *s)\n{\n\tfputs(s,stdout);\n\tfflush(stdout);\n}\nstatic void (*svm_print_string) (const char *) = &print_string_stdout;\n#if 1\nstatic void info(const char *fmt,...)\n{\n\tchar buf[BUFSIZ];\n\tva_list ap;\n\tva_start(ap,fmt);\n\tvsprintf(buf,fmt,ap);\n\tva_end(ap);\n\t(*svm_print_string)(buf);\n}\n#else\nstatic void info(const char *fmt,...) {}\n#endif\n\n//\n// Kernel Cache\n//\n// l is the number of total data items\n// size is the cache size limit in bytes\n//\nclass Cache\n{\npublic:\n\tCache(int l,long int size);\n\t~Cache();\n\n\t// request data [0,len)\n\t// return some position p where [p,len) need to be filled\n\t// (p >= len if nothing needs to be filled)\n\tint get_data(const int index, Qfloat **data, int len);\n\tvoid swap_index(int i, int j);\nprivate:\n\tint l;\n\tlong int size;\n\tstruct head_t\n\t{\n\t\thead_t *prev, *next;\t// a circular list\n\t\tQfloat *data;\n\t\tint len;\t\t// data[0,len) is cached in this entry\n\t};\n\n\thead_t *head;\n\thead_t lru_head;\n\tvoid lru_delete(head_t *h);\n\tvoid lru_insert(head_t *h);\n};\n\nCache::Cache(int l_,long int size_):l(l_),size(size_)\n{\n\thead = (head_t *)calloc(l,sizeof(head_t));\t// initialized to 0\n\tsize /= sizeof(Qfloat);\n\tsize -= l * sizeof(head_t) / sizeof(Qfloat);\n\tsize = max(size, 2 * (long int) l);\t// cache must be large enough for two columns\n\tlru_head.next = lru_head.prev = &lru_head;\n}\n\nCache::~Cache()\n{\n\tfor(head_t *h = lru_head.next; h != &lru_head; h=h->next)\n\t\tfree(h->data);\n\tfree(head);\n}\n\nvoid Cache::lru_delete(head_t *h)\n{\n\t// delete from current location\n\th->prev->next = h->next;\n\th->next->prev = h->prev;\n}\n\nvoid Cache::lru_insert(head_t *h)\n{\n\t// insert to last position\n\th->next = &lru_head;\n\th->prev = lru_head.prev;\n\th->prev->next = h;\n\th->next->prev = h;\n}\n\nint Cache::get_data(const int index, Qfloat **data, int len)\n{\n\thead_t *h = &head[index];\n\tif(h->len) lru_delete(h);\n\tint more = len - h->len;\n\n\tif(more > 0)\n\t{\n\t\t// free old space\n\t\twhile(size < more)\n\t\t{\n\t\t\thead_t *old = lru_head.next;\n\t\t\tlru_delete(old);\n\t\t\tfree(old->data);\n\t\t\tsize += old->len;\n\t\t\told->data = 0;\n\t\t\told->len = 0;\n\t\t}\n\n\t\t// allocate new space\n\t\th->data = (Qfloat *)realloc(h->data,sizeof(Qfloat)*len);\n\t\tsize -= more;\n\t\tswap(h->len,len);\n\t}\n\n\tlru_insert(h);\n\t*data = h->data;\n\treturn len;\n}\n\nvoid Cache::swap_index(int i, int j)\n{\n\tif(i==j) return;\n\n\tif(head[i].len) lru_delete(&head[i]);\n\tif(head[j].len) lru_delete(&head[j]);\n\tswap(head[i].data,head[j].data);\n\tswap(head[i].len,head[j].len);\n\tif(head[i].len) lru_insert(&head[i]);\n\tif(head[j].len) lru_insert(&head[j]);\n\n\tif(i>j) swap(i,j);\n\tfor(head_t *h = lru_head.next; h!=&lru_head; h=h->next)\n\t{\n\t\tif(h->len > i)\n\t\t{\n\t\t\tif(h->len > j)\n\t\t\t\tswap(h->data[i],h->data[j]);\n\t\t\telse\n\t\t\t{\n\t\t\t\t// give up\n\t\t\t\tlru_delete(h);\n\t\t\t\tfree(h->data);\n\t\t\t\tsize += h->len;\n\t\t\t\th->data = 0;\n\t\t\t\th->len = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Kernel evaluation\n//\n// the static method k_function is for doing single kernel evaluation\n// the constructor of Kernel prepares to calculate the l*l kernel matrix\n// the member function get_Q is for getting one column from the Q Matrix\n//\nclass QMatrix {\npublic:\n\tvirtual Qfloat *get_Q(int column, int len) const = 0;\n\tvirtual double *get_QD() const = 0;\n\tvirtual void swap_index(int i, int j) const = 0;\n\tvirtual ~QMatrix() {}\n};\n\nclass Kernel: public QMatrix {\npublic:\n\tKernel(int l, svm_node * const * x, const svm_parameter& param);\n\tvirtual ~Kernel();\n\n\tstatic double k_function(const svm_node *x, const svm_node *y,\n\t\t\t\t const svm_parameter& param);\n\tvirtual Qfloat *get_Q(int column, int len) const = 0;\n\tvirtual double *get_QD() const = 0;\n\tvirtual void swap_index(int i, int j) const\t// no so const...\n\t{\n\t\tswap(x[i],x[j]);\n\t\tif(x_square) swap(x_square[i],x_square[j]);\n\t}\nprotected:\n\n\tdouble (Kernel::*kernel_function)(int i, int j) const;\n\nprivate:\n\tconst svm_node **x;\n\tdouble *x_square;\n\n\t// svm_parameter\n\tconst int kernel_type;\n\tconst int degree;\n\tconst double gamma;\n\tconst double coef0;\n\n\tstatic double dot(const svm_node *px, const svm_node *py);\n\tdouble kernel_linear(int i, int j) const\n\t{\n\t\treturn dot(x[i],x[j]);\n\t}\n\tdouble kernel_poly(int i, int j) const\n\t{\n\t\treturn powi(gamma*dot(x[i],x[j])+coef0,degree);\n\t}\n\tdouble kernel_rbf(int i, int j) const\n\t{\n\t\treturn exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j])));\n\t}\n\tdouble kernel_sigmoid(int i, int j) const\n\t{\n\t\treturn tanh(gamma*dot(x[i],x[j])+coef0);\n\t}\n\tdouble kernel_precomputed(int i, int j) const\n\t{\n\t\treturn x[i][(int)(x[j][0].value)].value;\n\t}\n};\n\nKernel::Kernel(int l, svm_node * const * x_, const svm_parameter& param)\n:kernel_type(param.kernel_type), degree(param.degree),\n gamma(param.gamma), coef0(param.coef0)\n{\n\tswitch(kernel_type)\n\t{\n\t\tcase LINEAR:\n\t\t\tkernel_function = &Kernel::kernel_linear;\n\t\t\tbreak;\n\t\tcase POLY:\n\t\t\tkernel_function = &Kernel::kernel_poly;\n\t\t\tbreak;\n\t\tcase RBF:\n\t\t\tkernel_function = &Kernel::kernel_rbf;\n\t\t\tbreak;\n\t\tcase SIGMOID:\n\t\t\tkernel_function = &Kernel::kernel_sigmoid;\n\t\t\tbreak;\n\t\tcase PRECOMPUTED:\n\t\t\tkernel_function = &Kernel::kernel_precomputed;\n\t\t\tbreak;\n\t}\n\n\tclone(x,x_,l);\n\n\tif(kernel_type == RBF)\n\t{\n\t\tx_square = new double[l];\n\t\tfor(int i=0;i<l;i++)\n\t\t\tx_square[i] = dot(x[i],x[i]);\n\t}\n\telse\n\t\tx_square = 0;\n}\n\nKernel::~Kernel()\n{\n\tdelete[] x;\n\tdelete[] x_square;\n}\n\ndouble Kernel::dot(const svm_node *px, const svm_node *py)\n{\n\tdouble sum = 0;\n\twhile(px->index != -1 && py->index != -1)\n\t{\n\t\tif(px->index == py->index)\n\t\t{\n\t\t\tsum += px->value * py->value;\n\t\t\t++px;\n\t\t\t++py;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(px->index > py->index)\n\t\t\t\t++py;\n\t\t\telse\n\t\t\t\t++px;\n\t\t}\t\t\t\n\t}\n\treturn sum;\n}\n\ndouble Kernel::k_function(const svm_node *x, const svm_node *y,\n\t\t\t  const svm_parameter& param)\n{\n\tswitch(param.kernel_type)\n\t{\n\t\tcase LINEAR:\n\t\t\treturn dot(x,y);\n\t\tcase POLY:\n\t\t\treturn powi(param.gamma*dot(x,y)+param.coef0,param.degree);\n\t\tcase RBF:\n\t\t{\n\t\t\tdouble sum = 0;\n\t\t\twhile(x->index != -1 && y->index !=-1)\n\t\t\t{\n\t\t\t\tif(x->index == y->index)\n\t\t\t\t{\n\t\t\t\t\tdouble d = x->value - y->value;\n\t\t\t\t\tsum += d*d;\n\t\t\t\t\t++x;\n\t\t\t\t\t++y;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(x->index > y->index)\n\t\t\t\t\t{\t\n\t\t\t\t\t\tsum += y->value * y->value;\n\t\t\t\t\t\t++y;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tsum += x->value * x->value;\n\t\t\t\t\t\t++x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile(x->index != -1)\n\t\t\t{\n\t\t\t\tsum += x->value * x->value;\n\t\t\t\t++x;\n\t\t\t}\n\n\t\t\twhile(y->index != -1)\n\t\t\t{\n\t\t\t\tsum += y->value * y->value;\n\t\t\t\t++y;\n\t\t\t}\n\t\t\t\n\t\t\treturn exp(-param.gamma*sum);\n\t\t}\n\t\tcase SIGMOID:\n\t\t\treturn tanh(param.gamma*dot(x,y)+param.coef0);\n\t\tcase PRECOMPUTED:  //x: test (validation), y: SV\n\t\t\treturn x[(int)(y->value)].value;\n\t\tdefault:\n\t\t\treturn 0;  // Unreachable \n\t}\n}\n\n// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918\n// Solves:\n//\n//\tmin 0.5(\\alpha^T Q \\alpha) + p^T \\alpha\n//\n//\t\ty^T \\alpha = \\delta\n//\t\ty_i = +1 or -1\n//\t\t0 <= alpha_i <= Cp for y_i = 1\n//\t\t0 <= alpha_i <= Cn for y_i = -1\n//\n// Given:\n//\n//\tQ, p, y, Cp, Cn, and an initial feasible point \\alpha\n//\tl is the size of vectors and matrices\n//\teps is the stopping tolerance\n//\n// solution will be put in \\alpha, objective value will be put in obj\n//\nclass Solver {\npublic:\n\tSolver() {};\n\tvirtual ~Solver() {};\n\n\tstruct SolutionInfo {\n\t\tdouble obj;\n\t\tdouble rho;\n\t\tdouble upper_bound_p;\n\t\tdouble upper_bound_n;\n\t\tdouble r;\t// for Solver_NU\n\t};\n\n\tvoid Solve(int l, const QMatrix& Q, const double *p_, const schar *y_,\n\t\t   double *alpha_, double Cp, double Cn, double eps,\n\t\t   SolutionInfo* si, int shrinking);\nprotected:\n\tint active_size;\n\tschar *y;\n\tdouble *G;\t\t// gradient of objective function\n\tenum { LOWER_BOUND, UPPER_BOUND, FREE };\n\tchar *alpha_status;\t// LOWER_BOUND, UPPER_BOUND, FREE\n\tdouble *alpha;\n\tconst QMatrix *Q;\n\tconst double *QD;\n\tdouble eps;\n\tdouble Cp,Cn;\n\tdouble *p;\n\tint *active_set;\n\tdouble *G_bar;\t\t// gradient, if we treat free variables as 0\n\tint l;\n\tbool unshrink;\t// XXX\n\n\tdouble get_C(int i)\n\t{\n\t\treturn (y[i] > 0)? Cp : Cn;\n\t}\n\tvoid update_alpha_status(int i)\n\t{\n\t\tif(alpha[i] >= get_C(i))\n\t\t\talpha_status[i] = UPPER_BOUND;\n\t\telse if(alpha[i] <= 0)\n\t\t\talpha_status[i] = LOWER_BOUND;\n\t\telse alpha_status[i] = FREE;\n\t}\n\tbool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }\n\tbool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }\n\tbool is_free(int i) { return alpha_status[i] == FREE; }\n\tvoid swap_index(int i, int j);\n\tvoid reconstruct_gradient();\n\tvirtual int select_working_set(int &i, int &j);\n\tvirtual double calculate_rho();\n\tvirtual void do_shrinking();\nprivate:\n\tbool be_shrunk(int i, double Gmax1, double Gmax2);\n};\n\nvoid Solver::swap_index(int i, int j)\n{\n\tQ->swap_index(i,j);\n\tswap(y[i],y[j]);\n\tswap(G[i],G[j]);\n\tswap(alpha_status[i],alpha_status[j]);\n\tswap(alpha[i],alpha[j]);\n\tswap(p[i],p[j]);\n\tswap(active_set[i],active_set[j]);\n\tswap(G_bar[i],G_bar[j]);\n}\n\nvoid Solver::reconstruct_gradient()\n{\n\t// reconstruct inactive elements of G from G_bar and free variables\n\n\tif(active_size == l) return;\n\n\tint i,j;\n\tint nr_free = 0;\n\n\tfor(j=active_size;j<l;j++)\n\t\tG[j] = G_bar[j] + p[j];\n\n\tfor(j=0;j<active_size;j++)\n\t\tif(is_free(j))\n\t\t\tnr_free++;\n\n\tif(2*nr_free < active_size)\n\t\tinfo(\"\\nWARNING: using -h 0 may be faster\\n\");\n\n\tif (nr_free*l > 2*active_size*(l-active_size))\n\t{\n\t\tfor(i=active_size;i<l;i++)\n\t\t{\n\t\t\tconst Qfloat *Q_i = Q->get_Q(i,active_size);\n\t\t\tfor(j=0;j<active_size;j++)\n\t\t\t\tif(is_free(j))\n\t\t\t\t\tG[i] += alpha[j] * Q_i[j];\n\t\t}\n\t}\n\telse\n\t{\n\t\tfor(i=0;i<active_size;i++)\n\t\t\tif(is_free(i))\n\t\t\t{\n\t\t\t\tconst Qfloat *Q_i = Q->get_Q(i,l);\n\t\t\t\tdouble alpha_i = alpha[i];\n\t\t\t\tfor(j=active_size;j<l;j++)\n\t\t\t\t\tG[j] += alpha_i * Q_i[j];\n\t\t\t}\n\t}\n}\n\nvoid Solver::Solve(int l, const QMatrix& Q, const double *p_, const schar *y_,\n\t\t   double *alpha_, double Cp, double Cn, double eps,\n\t\t   SolutionInfo* si, int shrinking)\n{\n\tthis->l = l;\n\tthis->Q = &Q;\n\tQD=Q.get_QD();\n\tclone(p, p_,l);\n\tclone(y, y_,l);\n\tclone(alpha,alpha_,l);\n\tthis->Cp = Cp;\n\tthis->Cn = Cn;\n\tthis->eps = eps;\n\tunshrink = false;\n\n\t// initialize alpha_status\n\t{\n\t\talpha_status = new char[l];\n\t\tfor(int i=0;i<l;i++)\n\t\t\tupdate_alpha_status(i);\n\t}\n\n\t// initialize active set (for shrinking)\n\t{\n\t\tactive_set = new int[l];\n\t\tfor(int i=0;i<l;i++)\n\t\t\tactive_set[i] = i;\n\t\tactive_size = l;\n\t}\n\n\t// initialize gradient\n\t{\n\t\tG = new double[l];\n\t\tG_bar = new double[l];\n\t\tint i;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tG[i] = p[i];\n\t\t\tG_bar[i] = 0;\n\t\t}\n\t\tfor(i=0;i<l;i++)\n\t\t\tif(!is_lower_bound(i))\n\t\t\t{\n\t\t\t\tconst Qfloat *Q_i = Q.get_Q(i,l);\n\t\t\t\tdouble alpha_i = alpha[i];\n\t\t\t\tint j;\n\t\t\t\tfor(j=0;j<l;j++)\n\t\t\t\t\tG[j] += alpha_i*Q_i[j];\n\t\t\t\tif(is_upper_bound(i))\n\t\t\t\t\tfor(j=0;j<l;j++)\n\t\t\t\t\t\tG_bar[j] += get_C(i) * Q_i[j];\n\t\t\t}\n\t}\n\n\t// optimization step\n\n\tint iter = 0;\n\tint max_iter = max(10000000, l>INT_MAX/100 ? INT_MAX : 100*l);\n\tint counter = min(l,1000)+1;\n\t\n\twhile(iter < max_iter)\n\t{\n\t\t// show progress and do shrinking\n\n\t\tif(--counter == 0)\n\t\t{\n\t\t\tcounter = min(l,1000);\n\t\t\tif(shrinking) do_shrinking();\n\t\t\tinfo(\".\");\n\t\t}\n\n\t\tint i,j;\n\t\tif(select_working_set(i,j)!=0)\n\t\t{\n\t\t\t// reconstruct the whole gradient\n\t\t\treconstruct_gradient();\n\t\t\t// reset active set size and check\n\t\t\tactive_size = l;\n\t\t\tinfo(\"*\");\n\t\t\tif(select_working_set(i,j)!=0)\n\t\t\t\tbreak;\n\t\t\telse\n\t\t\t\tcounter = 1;\t// do shrinking next iteration\n\t\t}\n\t\t\n\t\t++iter;\n\n\t\t// update alpha[i] and alpha[j], handle bounds carefully\n\t\t\n\t\tconst Qfloat *Q_i = Q.get_Q(i,active_size);\n\t\tconst Qfloat *Q_j = Q.get_Q(j,active_size);\n\n\t\tdouble C_i = get_C(i);\n\t\tdouble C_j = get_C(j);\n\n\t\tdouble old_alpha_i = alpha[i];\n\t\tdouble old_alpha_j = alpha[j];\n\n\t\tif(y[i]!=y[j])\n\t\t{\n\t\t\tdouble quad_coef = QD[i]+QD[j]+2*Q_i[j];\n\t\t\tif (quad_coef <= 0)\n\t\t\t\tquad_coef = TAU;\n\t\t\tdouble delta = (-G[i]-G[j])/quad_coef;\n\t\t\tdouble diff = alpha[i] - alpha[j];\n\t\t\talpha[i] += delta;\n\t\t\talpha[j] += delta;\n\t\t\t\n\t\t\tif(diff > 0)\n\t\t\t{\n\t\t\t\tif(alpha[j] < 0)\n\t\t\t\t{\n\t\t\t\t\talpha[j] = 0;\n\t\t\t\t\talpha[i] = diff;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(alpha[i] < 0)\n\t\t\t\t{\n\t\t\t\t\talpha[i] = 0;\n\t\t\t\t\talpha[j] = -diff;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(diff > C_i - C_j)\n\t\t\t{\n\t\t\t\tif(alpha[i] > C_i)\n\t\t\t\t{\n\t\t\t\t\talpha[i] = C_i;\n\t\t\t\t\talpha[j] = C_i - diff;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(alpha[j] > C_j)\n\t\t\t\t{\n\t\t\t\t\talpha[j] = C_j;\n\t\t\t\t\talpha[i] = C_j + diff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdouble quad_coef = QD[i]+QD[j]-2*Q_i[j];\n\t\t\tif (quad_coef <= 0)\n\t\t\t\tquad_coef = TAU;\n\t\t\tdouble delta = (G[i]-G[j])/quad_coef;\n\t\t\tdouble sum = alpha[i] + alpha[j];\n\t\t\talpha[i] -= delta;\n\t\t\talpha[j] += delta;\n\n\t\t\tif(sum > C_i)\n\t\t\t{\n\t\t\t\tif(alpha[i] > C_i)\n\t\t\t\t{\n\t\t\t\t\talpha[i] = C_i;\n\t\t\t\t\talpha[j] = sum - C_i;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(alpha[j] < 0)\n\t\t\t\t{\n\t\t\t\t\talpha[j] = 0;\n\t\t\t\t\talpha[i] = sum;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(sum > C_j)\n\t\t\t{\n\t\t\t\tif(alpha[j] > C_j)\n\t\t\t\t{\n\t\t\t\t\talpha[j] = C_j;\n\t\t\t\t\talpha[i] = sum - C_j;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(alpha[i] < 0)\n\t\t\t\t{\n\t\t\t\t\talpha[i] = 0;\n\t\t\t\t\talpha[j] = sum;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// update G\n\n\t\tdouble delta_alpha_i = alpha[i] - old_alpha_i;\n\t\tdouble delta_alpha_j = alpha[j] - old_alpha_j;\n\t\t\n\t\tfor(int k=0;k<active_size;k++)\n\t\t{\n\t\t\tG[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;\n\t\t}\n\n\t\t// update alpha_status and G_bar\n\n\t\t{\n\t\t\tbool ui = is_upper_bound(i);\n\t\t\tbool uj = is_upper_bound(j);\n\t\t\tupdate_alpha_status(i);\n\t\t\tupdate_alpha_status(j);\n\t\t\tint k;\n\t\t\tif(ui != is_upper_bound(i))\n\t\t\t{\n\t\t\t\tQ_i = Q.get_Q(i,l);\n\t\t\t\tif(ui)\n\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\tG_bar[k] -= C_i * Q_i[k];\n\t\t\t\telse\n\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\tG_bar[k] += C_i * Q_i[k];\n\t\t\t}\n\n\t\t\tif(uj != is_upper_bound(j))\n\t\t\t{\n\t\t\t\tQ_j = Q.get_Q(j,l);\n\t\t\t\tif(uj)\n\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\tG_bar[k] -= C_j * Q_j[k];\n\t\t\t\telse\n\t\t\t\t\tfor(k=0;k<l;k++)\n\t\t\t\t\t\tG_bar[k] += C_j * Q_j[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif(iter >= max_iter)\n\t{\n\t\tif(active_size < l)\n\t\t{\n\t\t\t// reconstruct the whole gradient to calculate objective value\n\t\t\treconstruct_gradient();\n\t\t\tactive_size = l;\n\t\t\tinfo(\"*\");\n\t\t}\n\t\tfprintf(stderr,\"\\nWARNING: reaching max number of iterations\\n\");\n\t}\n\n\t// calculate rho\n\n\tsi->rho = calculate_rho();\n\n\t// calculate objective value\n\t{\n\t\tdouble v = 0;\n\t\tint i;\n\t\tfor(i=0;i<l;i++)\n\t\t\tv += alpha[i] * (G[i] + p[i]);\n\n\t\tsi->obj = v/2;\n\t}\n\n\t// put back the solution\n\t{\n\t\tfor(int i=0;i<l;i++)\n\t\t\talpha_[active_set[i]] = alpha[i];\n\t}\n\n\t// juggle everything back\n\t/*{\n\t\tfor(int i=0;i<l;i++)\n\t\t\twhile(active_set[i] != i)\n\t\t\t\tswap_index(i,active_set[i]);\n\t\t\t\t// or Q.swap_index(i,active_set[i]);\n\t}*/\n\n\tsi->upper_bound_p = Cp;\n\tsi->upper_bound_n = Cn;\n\n\tinfo(\"\\noptimization finished, #iter = %d\\n\",iter);\n\n\tdelete[] p;\n\tdelete[] y;\n\tdelete[] alpha;\n\tdelete[] alpha_status;\n\tdelete[] active_set;\n\tdelete[] G;\n\tdelete[] G_bar;\n}\n\n// return 1 if already optimal, return 0 otherwise\nint Solver::select_working_set(int &out_i, int &out_j)\n{\n\t// return i,j such that\n\t// i: maximizes -y_i * grad(f)_i, i in I_up(\\alpha)\n\t// j: minimizes the decrease of obj value\n\t//    (if quadratic coefficeint <= 0, replace it with tau)\n\t//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\\alpha)\n\t\n\tdouble Gmax = -INF;\n\tdouble Gmax2 = -INF;\n\tint Gmax_idx = -1;\n\tint Gmin_idx = -1;\n\tdouble obj_diff_min = INF;\n\n\tfor(int t=0;t<active_size;t++)\n\t\tif(y[t]==+1)\t\n\t\t{\n\t\t\tif(!is_upper_bound(t))\n\t\t\t\tif(-G[t] >= Gmax)\n\t\t\t\t{\n\t\t\t\t\tGmax = -G[t];\n\t\t\t\t\tGmax_idx = t;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(!is_lower_bound(t))\n\t\t\t\tif(G[t] >= Gmax)\n\t\t\t\t{\n\t\t\t\t\tGmax = G[t];\n\t\t\t\t\tGmax_idx = t;\n\t\t\t\t}\n\t\t}\n\n\tint i = Gmax_idx;\n\tconst Qfloat *Q_i = NULL;\n\tif(i != -1) // NULL Q_i not accessed: Gmax=-INF if i=-1\n\t\tQ_i = Q->get_Q(i,active_size);\n\n\tfor(int j=0;j<active_size;j++)\n\t{\n\t\tif(y[j]==+1)\n\t\t{\n\t\t\tif (!is_lower_bound(j))\n\t\t\t{\n\t\t\t\tdouble grad_diff=Gmax+G[j];\n\t\t\t\tif (G[j] >= Gmax2)\n\t\t\t\t\tGmax2 = G[j];\n\t\t\t\tif (grad_diff > 0)\n\t\t\t\t{\n\t\t\t\t\tdouble obj_diff;\n\t\t\t\t\tdouble quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j];\n\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\telse\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\n\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (!is_upper_bound(j))\n\t\t\t{\n\t\t\t\tdouble grad_diff= Gmax-G[j];\n\t\t\t\tif (-G[j] >= Gmax2)\n\t\t\t\t\tGmax2 = -G[j];\n\t\t\t\tif (grad_diff > 0)\n\t\t\t\t{\n\t\t\t\t\tdouble obj_diff;\n\t\t\t\t\tdouble quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j];\n\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\telse\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\n\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif(Gmax+Gmax2 < eps)\n\t\treturn 1;\n\n\tout_i = Gmax_idx;\n\tout_j = Gmin_idx;\n\treturn 0;\n}\n\nbool Solver::be_shrunk(int i, double Gmax1, double Gmax2)\n{\n\tif(is_upper_bound(i))\n\t{\n\t\tif(y[i]==+1)\n\t\t\treturn(-G[i] > Gmax1);\n\t\telse\n\t\t\treturn(-G[i] > Gmax2);\n\t}\n\telse if(is_lower_bound(i))\n\t{\n\t\tif(y[i]==+1)\n\t\t\treturn(G[i] > Gmax2);\n\t\telse\t\n\t\t\treturn(G[i] > Gmax1);\n\t}\n\telse\n\t\treturn(false);\n}\n\nvoid Solver::do_shrinking()\n{\n\tint i;\n\tdouble Gmax1 = -INF;\t\t// max { -y_i * grad(f)_i | i in I_up(\\alpha) }\n\tdouble Gmax2 = -INF;\t\t// max { y_i * grad(f)_i | i in I_low(\\alpha) }\n\n\t// find maximal violating pair first\n\tfor(i=0;i<active_size;i++)\n\t{\n\t\tif(y[i]==+1)\t\n\t\t{\n\t\t\tif(!is_upper_bound(i))\t\n\t\t\t{\n\t\t\t\tif(-G[i] >= Gmax1)\n\t\t\t\t\tGmax1 = -G[i];\n\t\t\t}\n\t\t\tif(!is_lower_bound(i))\t\n\t\t\t{\n\t\t\t\tif(G[i] >= Gmax2)\n\t\t\t\t\tGmax2 = G[i];\n\t\t\t}\n\t\t}\n\t\telse\t\n\t\t{\n\t\t\tif(!is_upper_bound(i))\t\n\t\t\t{\n\t\t\t\tif(-G[i] >= Gmax2)\n\t\t\t\t\tGmax2 = -G[i];\n\t\t\t}\n\t\t\tif(!is_lower_bound(i))\t\n\t\t\t{\n\t\t\t\tif(G[i] >= Gmax1)\n\t\t\t\t\tGmax1 = G[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tif(unshrink == false && Gmax1 + Gmax2 <= eps*10) \n\t{\n\t\tunshrink = true;\n\t\treconstruct_gradient();\n\t\tactive_size = l;\n\t\tinfo(\"*\");\n\t}\n\n\tfor(i=0;i<active_size;i++)\n\t\tif (be_shrunk(i, Gmax1, Gmax2))\n\t\t{\n\t\t\tactive_size--;\n\t\t\twhile (active_size > i)\n\t\t\t{\n\t\t\t\tif (!be_shrunk(active_size, Gmax1, Gmax2))\n\t\t\t\t{\n\t\t\t\t\tswap_index(i,active_size);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tactive_size--;\n\t\t\t}\n\t\t}\n}\n\ndouble Solver::calculate_rho()\n{\n\tdouble r;\n\tint nr_free = 0;\n\tdouble ub = INF, lb = -INF, sum_free = 0;\n\tfor(int i=0;i<active_size;i++)\n\t{\n\t\tdouble yG = y[i]*G[i];\n\n\t\tif(is_upper_bound(i))\n\t\t{\n\t\t\tif(y[i]==-1)\n\t\t\t\tub = min(ub,yG);\n\t\t\telse\n\t\t\t\tlb = max(lb,yG);\n\t\t}\n\t\telse if(is_lower_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t\tub = min(ub,yG);\n\t\t\telse\n\t\t\t\tlb = max(lb,yG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t++nr_free;\n\t\t\tsum_free += yG;\n\t\t}\n\t}\n\n\tif(nr_free>0)\n\t\tr = sum_free/nr_free;\n\telse\n\t\tr = (ub+lb)/2;\n\n\treturn r;\n}\n\n//\n// Solver for nu-svm classification and regression\n//\n// additional constraint: e^T \\alpha = constant\n//\nclass Solver_NU: public Solver\n{\npublic:\n\tSolver_NU() {}\n\tvoid Solve(int l, const QMatrix& Q, const double *p, const schar *y,\n\t\t   double *alpha, double Cp, double Cn, double eps,\n\t\t   SolutionInfo* si, int shrinking)\n\t{\n\t\tthis->si = si;\n\t\tSolver::Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking);\n\t}\nprivate:\n\tSolutionInfo *si;\n\tint select_working_set(int &i, int &j);\n\tdouble calculate_rho();\n\tbool be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4);\n\tvoid do_shrinking();\n};\n\n// return 1 if already optimal, return 0 otherwise\nint Solver_NU::select_working_set(int &out_i, int &out_j)\n{\n\t// return i,j such that y_i = y_j and\n\t// i: maximizes -y_i * grad(f)_i, i in I_up(\\alpha)\n\t// j: minimizes the decrease of obj value\n\t//    (if quadratic coefficeint <= 0, replace it with tau)\n\t//    -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\\alpha)\n\n\tdouble Gmaxp = -INF;\n\tdouble Gmaxp2 = -INF;\n\tint Gmaxp_idx = -1;\n\n\tdouble Gmaxn = -INF;\n\tdouble Gmaxn2 = -INF;\n\tint Gmaxn_idx = -1;\n\n\tint Gmin_idx = -1;\n\tdouble obj_diff_min = INF;\n\n\tfor(int t=0;t<active_size;t++)\n\t\tif(y[t]==+1)\n\t\t{\n\t\t\tif(!is_upper_bound(t))\n\t\t\t\tif(-G[t] >= Gmaxp)\n\t\t\t\t{\n\t\t\t\t\tGmaxp = -G[t];\n\t\t\t\t\tGmaxp_idx = t;\n\t\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(!is_lower_bound(t))\n\t\t\t\tif(G[t] >= Gmaxn)\n\t\t\t\t{\n\t\t\t\t\tGmaxn = G[t];\n\t\t\t\t\tGmaxn_idx = t;\n\t\t\t\t}\n\t\t}\n\n\tint ip = Gmaxp_idx;\n\tint in = Gmaxn_idx;\n\tconst Qfloat *Q_ip = NULL;\n\tconst Qfloat *Q_in = NULL;\n\tif(ip != -1) // NULL Q_ip not accessed: Gmaxp=-INF if ip=-1\n\t\tQ_ip = Q->get_Q(ip,active_size);\n\tif(in != -1)\n\t\tQ_in = Q->get_Q(in,active_size);\n\n\tfor(int j=0;j<active_size;j++)\n\t{\n\t\tif(y[j]==+1)\n\t\t{\n\t\t\tif (!is_lower_bound(j))\t\n\t\t\t{\n\t\t\t\tdouble grad_diff=Gmaxp+G[j];\n\t\t\t\tif (G[j] >= Gmaxp2)\n\t\t\t\t\tGmaxp2 = G[j];\n\t\t\t\tif (grad_diff > 0)\n\t\t\t\t{\n\t\t\t\t\tdouble obj_diff;\n\t\t\t\t\tdouble quad_coef = QD[ip]+QD[j]-2*Q_ip[j];\n\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\telse\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\n\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (!is_upper_bound(j))\n\t\t\t{\n\t\t\t\tdouble grad_diff=Gmaxn-G[j];\n\t\t\t\tif (-G[j] >= Gmaxn2)\n\t\t\t\t\tGmaxn2 = -G[j];\n\t\t\t\tif (grad_diff > 0)\n\t\t\t\t{\n\t\t\t\t\tdouble obj_diff;\n\t\t\t\t\tdouble quad_coef = QD[in]+QD[j]-2*Q_in[j];\n\t\t\t\t\tif (quad_coef > 0)\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/quad_coef;\n\t\t\t\t\telse\n\t\t\t\t\t\tobj_diff = -(grad_diff*grad_diff)/TAU;\n\n\t\t\t\t\tif (obj_diff <= obj_diff_min)\n\t\t\t\t\t{\n\t\t\t\t\t\tGmin_idx=j;\n\t\t\t\t\t\tobj_diff_min = obj_diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif(max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps)\n\t\treturn 1;\n\n\tif (y[Gmin_idx] == +1)\n\t\tout_i = Gmaxp_idx;\n\telse\n\t\tout_i = Gmaxn_idx;\n\tout_j = Gmin_idx;\n\n\treturn 0;\n}\n\nbool Solver_NU::be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4)\n{\n\tif(is_upper_bound(i))\n\t{\n\t\tif(y[i]==+1)\n\t\t\treturn(-G[i] > Gmax1);\n\t\telse\t\n\t\t\treturn(-G[i] > Gmax4);\n\t}\n\telse if(is_lower_bound(i))\n\t{\n\t\tif(y[i]==+1)\n\t\t\treturn(G[i] > Gmax2);\n\t\telse\t\n\t\t\treturn(G[i] > Gmax3);\n\t}\n\telse\n\t\treturn(false);\n}\n\nvoid Solver_NU::do_shrinking()\n{\n\tdouble Gmax1 = -INF;\t// max { -y_i * grad(f)_i | y_i = +1, i in I_up(\\alpha) }\n\tdouble Gmax2 = -INF;\t// max { y_i * grad(f)_i | y_i = +1, i in I_low(\\alpha) }\n\tdouble Gmax3 = -INF;\t// max { -y_i * grad(f)_i | y_i = -1, i in I_up(\\alpha) }\n\tdouble Gmax4 = -INF;\t// max { y_i * grad(f)_i | y_i = -1, i in I_low(\\alpha) }\n\n\t// find maximal violating pair first\n\tint i;\n\tfor(i=0;i<active_size;i++)\n\t{\n\t\tif(!is_upper_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t{\n\t\t\t\tif(-G[i] > Gmax1) Gmax1 = -G[i];\n\t\t\t}\n\t\t\telse\tif(-G[i] > Gmax4) Gmax4 = -G[i];\n\t\t}\n\t\tif(!is_lower_bound(i))\n\t\t{\n\t\t\tif(y[i]==+1)\n\t\t\t{\t\n\t\t\t\tif(G[i] > Gmax2) Gmax2 = G[i];\n\t\t\t}\n\t\t\telse\tif(G[i] > Gmax3) Gmax3 = G[i];\n\t\t}\n\t}\n\n\tif(unshrink == false && max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) \n\t{\n\t\tunshrink = true;\n\t\treconstruct_gradient();\n\t\tactive_size = l;\n\t}\n\n\tfor(i=0;i<active_size;i++)\n\t\tif (be_shrunk(i, Gmax1, Gmax2, Gmax3, Gmax4))\n\t\t{\n\t\t\tactive_size--;\n\t\t\twhile (active_size > i)\n\t\t\t{\n\t\t\t\tif (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4))\n\t\t\t\t{\n\t\t\t\t\tswap_index(i,active_size);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tactive_size--;\n\t\t\t}\n\t\t}\n}\n\ndouble Solver_NU::calculate_rho()\n{\n\tint nr_free1 = 0,nr_free2 = 0;\n\tdouble ub1 = INF, ub2 = INF;\n\tdouble lb1 = -INF, lb2 = -INF;\n\tdouble sum_free1 = 0, sum_free2 = 0;\n\n\tfor(int i=0;i<active_size;i++)\n\t{\n\t\tif(y[i]==+1)\n\t\t{\n\t\t\tif(is_upper_bound(i))\n\t\t\t\tlb1 = max(lb1,G[i]);\n\t\t\telse if(is_lower_bound(i))\n\t\t\t\tub1 = min(ub1,G[i]);\n\t\t\telse\n\t\t\t{\n\t\t\t\t++nr_free1;\n\t\t\t\tsum_free1 += G[i];\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(is_upper_bound(i))\n\t\t\t\tlb2 = max(lb2,G[i]);\n\t\t\telse if(is_lower_bound(i))\n\t\t\t\tub2 = min(ub2,G[i]);\n\t\t\telse\n\t\t\t{\n\t\t\t\t++nr_free2;\n\t\t\t\tsum_free2 += G[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tdouble r1,r2;\n\tif(nr_free1 > 0)\n\t\tr1 = sum_free1/nr_free1;\n\telse\n\t\tr1 = (ub1+lb1)/2;\n\t\n\tif(nr_free2 > 0)\n\t\tr2 = sum_free2/nr_free2;\n\telse\n\t\tr2 = (ub2+lb2)/2;\n\t\n\tsi->r = (r1+r2)/2;\n\treturn (r1-r2)/2;\n}\n\n//\n// Q matrices for various formulations\n//\nclass SVC_Q: public Kernel\n{ \npublic:\n\tSVC_Q(const svm_problem& prob, const svm_parameter& param, const schar *y_)\n\t:Kernel(prob.l, prob.x, param)\n\t{\n\t\tclone(y,y_,prob.l);\n\t\tcache = new Cache(prob.l,(long int)(param.cache_size*(1<<20)));\n\t\tQD = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tQD[i] = (this->*kernel_function)(i,i);\n\t}\n\t\n\tQfloat *get_Q(int i, int len) const\n\t{\n\t\tQfloat *data;\n\t\tint start, j;\n\t\tif((start = cache->get_data(i,&data,len)) < len)\n\t\t{\n\t\t\tfor(j=start;j<len;j++)\n\t\t\t\tdata[j] = (Qfloat)(y[i]*y[j]*(this->*kernel_function)(i,j));\n\t\t}\n\t\treturn data;\n\t}\n\n\tdouble *get_QD() const\n\t{\n\t\treturn QD;\n\t}\n\n\tvoid swap_index(int i, int j) const\n\t{\n\t\tcache->swap_index(i,j);\n\t\tKernel::swap_index(i,j);\n\t\tswap(y[i],y[j]);\n\t\tswap(QD[i],QD[j]);\n\t}\n\n\t~SVC_Q()\n\t{\n\t\tdelete[] y;\n\t\tdelete cache;\n\t\tdelete[] QD;\n\t}\nprivate:\n\tschar *y;\n\tCache *cache;\n\tdouble *QD;\n};\n\nclass ONE_CLASS_Q: public Kernel\n{\npublic:\n\tONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param)\n\t:Kernel(prob.l, prob.x, param)\n\t{\n\t\tcache = new Cache(prob.l,(long int)(param.cache_size*(1<<20)));\n\t\tQD = new double[prob.l];\n\t\tfor(int i=0;i<prob.l;i++)\n\t\t\tQD[i] = (this->*kernel_function)(i,i);\n\t}\n\t\n\tQfloat *get_Q(int i, int len) const\n\t{\n\t\tQfloat *data;\n\t\tint start, j;\n\t\tif((start = cache->get_data(i,&data,len)) < len)\n\t\t{\n\t\t\tfor(j=start;j<len;j++)\n\t\t\t\tdata[j] = (Qfloat)(this->*kernel_function)(i,j);\n\t\t}\n\t\treturn data;\n\t}\n\n\tdouble *get_QD() const\n\t{\n\t\treturn QD;\n\t}\n\n\tvoid swap_index(int i, int j) const\n\t{\n\t\tcache->swap_index(i,j);\n\t\tKernel::swap_index(i,j);\n\t\tswap(QD[i],QD[j]);\n\t}\n\n\t~ONE_CLASS_Q()\n\t{\n\t\tdelete cache;\n\t\tdelete[] QD;\n\t}\nprivate:\n\tCache *cache;\n\tdouble *QD;\n};\n\nclass SVR_Q: public Kernel\n{ \npublic:\n\tSVR_Q(const svm_problem& prob, const svm_parameter& param)\n\t:Kernel(prob.l, prob.x, param)\n\t{\n\t\tl = prob.l;\n\t\tcache = new Cache(l,(long int)(param.cache_size*(1<<20)));\n\t\tQD = new double[2*l];\n\t\tsign = new schar[2*l];\n\t\tindex = new int[2*l];\n\t\tfor(int k=0;k<l;k++)\n\t\t{\n\t\t\tsign[k] = 1;\n\t\t\tsign[k+l] = -1;\n\t\t\tindex[k] = k;\n\t\t\tindex[k+l] = k;\n\t\t\tQD[k] = (this->*kernel_function)(k,k);\n\t\t\tQD[k+l] = QD[k];\n\t\t}\n\t\tbuffer[0] = new Qfloat[2*l];\n\t\tbuffer[1] = new Qfloat[2*l];\n\t\tnext_buffer = 0;\n\t}\n\n\tvoid swap_index(int i, int j) const\n\t{\n\t\tswap(sign[i],sign[j]);\n\t\tswap(index[i],index[j]);\n\t\tswap(QD[i],QD[j]);\n\t}\n\t\n\tQfloat *get_Q(int i, int len) const\n\t{\n\t\tQfloat *data;\n\t\tint j, real_i = index[i];\n\t\tif(cache->get_data(real_i,&data,l) < l)\n\t\t{\n\t\t\tfor(j=0;j<l;j++)\n\t\t\t\tdata[j] = (Qfloat)(this->*kernel_function)(real_i,j);\n\t\t}\n\n\t\t// reorder and copy\n\t\tQfloat *buf = buffer[next_buffer];\n\t\tnext_buffer = 1 - next_buffer;\n\t\tschar si = sign[i];\n\t\tfor(j=0;j<len;j++)\n\t\t\tbuf[j] = (Qfloat) si * (Qfloat) sign[j] * data[index[j]];\n\t\treturn buf;\n\t}\n\n\tdouble *get_QD() const\n\t{\n\t\treturn QD;\n\t}\n\n\t~SVR_Q()\n\t{\n\t\tdelete cache;\n\t\tdelete[] sign;\n\t\tdelete[] index;\n\t\tdelete[] buffer[0];\n\t\tdelete[] buffer[1];\n\t\tdelete[] QD;\n\t}\nprivate:\n\tint l;\n\tCache *cache;\n\tschar *sign;\n\tint *index;\n\tmutable int next_buffer;\n\tQfloat *buffer[2];\n\tdouble *QD;\n};\n\n//\n// construct and solve various formulations\n//\nstatic void solve_c_svc(\n\tconst svm_problem *prob, const svm_parameter* param,\n\tdouble *alpha, Solver::SolutionInfo* si, double Cp, double Cn)\n{\n\tint l = prob->l;\n\tdouble *minus_ones = new double[l];\n\tschar *y = new schar[l];\n\n\tint i;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\talpha[i] = 0;\n\t\tminus_ones[i] = -1;\n\t\tif(prob->y[i] > 0) y[i] = +1; else y[i] = -1;\n\t}\n\n\tSolver s;\n\ts.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y,\n\t\talpha, Cp, Cn, param->eps, si, param->shrinking);\n\n\tdouble sum_alpha=0;\n\tfor(i=0;i<l;i++)\n\t\tsum_alpha += alpha[i];\n\n\tif (Cp==Cn)\n\t\tinfo(\"nu = %f\\n\", sum_alpha/(Cp*prob->l));\n\n\tfor(i=0;i<l;i++)\n\t\talpha[i] *= y[i];\n\n\tdelete[] minus_ones;\n\tdelete[] y;\n}\n\nstatic void solve_nu_svc(\n\tconst svm_problem *prob, const svm_parameter *param,\n\tdouble *alpha, Solver::SolutionInfo* si)\n{\n\tint i;\n\tint l = prob->l;\n\tdouble nu = param->nu;\n\n\tschar *y = new schar[l];\n\n\tfor(i=0;i<l;i++)\n\t\tif(prob->y[i]>0)\n\t\t\ty[i] = +1;\n\t\telse\n\t\t\ty[i] = -1;\n\n\tdouble sum_pos = nu*l/2;\n\tdouble sum_neg = nu*l/2;\n\n\tfor(i=0;i<l;i++)\n\t\tif(y[i] == +1)\n\t\t{\n\t\t\talpha[i] = min(1.0,sum_pos);\n\t\t\tsum_pos -= alpha[i];\n\t\t}\n\t\telse\n\t\t{\n\t\t\talpha[i] = min(1.0,sum_neg);\n\t\t\tsum_neg -= alpha[i];\n\t\t}\n\n\tdouble *zeros = new double[l];\n\n\tfor(i=0;i<l;i++)\n\t\tzeros[i] = 0;\n\n\tSolver_NU s;\n\ts.Solve(l, SVC_Q(*prob,*param,y), zeros, y,\n\t\talpha, 1.0, 1.0, param->eps, si,  param->shrinking);\n\tdouble r = si->r;\n\n\tinfo(\"C = %f\\n\",1/r);\n\n\tfor(i=0;i<l;i++)\n\t\talpha[i] *= y[i]/r;\n\n\tsi->rho /= r;\n\tsi->obj /= (r*r);\n\tsi->upper_bound_p = 1/r;\n\tsi->upper_bound_n = 1/r;\n\n\tdelete[] y;\n\tdelete[] zeros;\n}\n\nstatic void solve_one_class(\n\tconst svm_problem *prob, const svm_parameter *param,\n\tdouble *alpha, Solver::SolutionInfo* si)\n{\n\tint l = prob->l;\n\tdouble *zeros = new double[l];\n\tschar *ones = new schar[l];\n\tint i;\n\n\tint n = (int)(param->nu*prob->l);\t// # of alpha's at upper bound\n\n\tfor(i=0;i<n;i++)\n\t\talpha[i] = 1;\n\tif(n<prob->l)\n\t\talpha[n] = param->nu * prob->l - n;\n\tfor(i=n+1;i<l;i++)\n\t\talpha[i] = 0;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tzeros[i] = 0;\n\t\tones[i] = 1;\n\t}\n\n\tSolver s;\n\ts.Solve(l, ONE_CLASS_Q(*prob,*param), zeros, ones,\n\t\talpha, 1.0, 1.0, param->eps, si, param->shrinking);\n\n\tdelete[] zeros;\n\tdelete[] ones;\n}\n\nstatic void solve_epsilon_svr(\n\tconst svm_problem *prob, const svm_parameter *param,\n\tdouble *alpha, Solver::SolutionInfo* si)\n{\n\tint l = prob->l;\n\tdouble *alpha2 = new double[2*l];\n\tdouble *linear_term = new double[2*l];\n\tschar *y = new schar[2*l];\n\tint i;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\talpha2[i] = 0;\n\t\tlinear_term[i] = param->p - prob->y[i];\n\t\ty[i] = 1;\n\n\t\talpha2[i+l] = 0;\n\t\tlinear_term[i+l] = param->p + prob->y[i];\n\t\ty[i+l] = -1;\n\t}\n\n\tSolver s;\n\ts.Solve(2*l, SVR_Q(*prob,*param), linear_term, y,\n\t\talpha2, param->C, param->C, param->eps, si, param->shrinking);\n\n\tdouble sum_alpha = 0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\talpha[i] = alpha2[i] - alpha2[i+l];\n\t\tsum_alpha += fabs(alpha[i]);\n\t}\n\tinfo(\"nu = %f\\n\",sum_alpha/(param->C*l));\n\n\tdelete[] alpha2;\n\tdelete[] linear_term;\n\tdelete[] y;\n}\n\nstatic void solve_nu_svr(\n\tconst svm_problem *prob, const svm_parameter *param,\n\tdouble *alpha, Solver::SolutionInfo* si)\n{\n\tint l = prob->l;\n\tdouble C = param->C;\n\tdouble *alpha2 = new double[2*l];\n\tdouble *linear_term = new double[2*l];\n\tschar *y = new schar[2*l];\n\tint i;\n\n\tdouble sum = C * param->nu * l / 2;\n\tfor(i=0;i<l;i++)\n\t{\n\t\talpha2[i] = alpha2[i+l] = min(sum,C);\n\t\tsum -= alpha2[i];\n\n\t\tlinear_term[i] = - prob->y[i];\n\t\ty[i] = 1;\n\n\t\tlinear_term[i+l] = prob->y[i];\n\t\ty[i+l] = -1;\n\t}\n\n\tSolver_NU s;\n\ts.Solve(2*l, SVR_Q(*prob,*param), linear_term, y,\n\t\talpha2, C, C, param->eps, si, param->shrinking);\n\n\tinfo(\"epsilon = %f\\n\",-si->r);\n\n\tfor(i=0;i<l;i++)\n\t\talpha[i] = alpha2[i] - alpha2[i+l];\n\n\tdelete[] alpha2;\n\tdelete[] linear_term;\n\tdelete[] y;\n}\n\n//\n// decision_function\n//\nstruct decision_function\n{\n\tdouble *alpha;\n\tdouble rho;\n};\n\nstatic decision_function svm_train_one(\n\tconst svm_problem *prob, const svm_parameter *param,\n\tdouble Cp, double Cn)\n{\n\tdouble *alpha = Malloc(double,prob->l);\n\tSolver::SolutionInfo si;\n\tswitch(param->svm_type)\n\t{\n\t\tcase C_SVC:\n\t\t\tsolve_c_svc(prob,param,alpha,&si,Cp,Cn);\n\t\t\tbreak;\n\t\tcase NU_SVC:\n\t\t\tsolve_nu_svc(prob,param,alpha,&si);\n\t\t\tbreak;\n\t\tcase ONE_CLASS:\n\t\t\tsolve_one_class(prob,param,alpha,&si);\n\t\t\tbreak;\n\t\tcase EPSILON_SVR:\n\t\t\tsolve_epsilon_svr(prob,param,alpha,&si);\n\t\t\tbreak;\n\t\tcase NU_SVR:\n\t\t\tsolve_nu_svr(prob,param,alpha,&si);\n\t\t\tbreak;\n\t}\n\n\tinfo(\"obj = %f, rho = %f\\n\",si.obj,si.rho);\n\n\t// output SVs\n\n\tint nSV = 0;\n\tint nBSV = 0;\n\tfor(int i=0;i<prob->l;i++)\n\t{\n\t\tif(fabs(alpha[i]) > 0)\n\t\t{\n\t\t\t++nSV;\n\t\t\tif(prob->y[i] > 0)\n\t\t\t{\n\t\t\t\tif(fabs(alpha[i]) >= si.upper_bound_p)\n\t\t\t\t\t++nBSV;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(fabs(alpha[i]) >= si.upper_bound_n)\n\t\t\t\t\t++nBSV;\n\t\t\t}\n\t\t}\n\t}\n\n\tinfo(\"nSV = %d, nBSV = %d\\n\",nSV,nBSV);\n\n\tdecision_function f;\n\tf.alpha = alpha;\n\tf.rho = si.rho;\n\treturn f;\n}\n\n// Platt's binary SVM Probablistic Output: an improvement from Lin et al.\nstatic void sigmoid_train(\n\tint l, const double *dec_values, const double *labels, \n\tdouble& A, double& B)\n{\n\tdouble prior1=0, prior0 = 0;\n\tint i;\n\n\tfor (i=0;i<l;i++)\n\t\tif (labels[i] > 0) prior1+=1;\n\t\telse prior0+=1;\n\t\n\tint max_iter=100;\t// Maximal number of iterations\n\tdouble min_step=1e-10;\t// Minimal step taken in line search\n\tdouble sigma=1e-12;\t// For numerically strict PD of Hessian\n\tdouble eps=1e-5;\n\tdouble hiTarget=(prior1+1.0)/(prior1+2.0);\n\tdouble loTarget=1/(prior0+2.0);\n\tdouble *t=Malloc(double,l);\n\tdouble fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize;\n\tdouble newA,newB,newf,d1,d2;\n\tint iter;\n\t\n\t// Initial Point and Initial Fun Value\n\tA=0.0; B=log((prior0+1.0)/(prior1+1.0));\n\tdouble fval = 0.0;\n\n\tfor (i=0;i<l;i++)\n\t{\n\t\tif (labels[i]>0) t[i]=hiTarget;\n\t\telse t[i]=loTarget;\n\t\tfApB = dec_values[i]*A+B;\n\t\tif (fApB>=0)\n\t\t\tfval += t[i]*fApB + log(1+exp(-fApB));\n\t\telse\n\t\t\tfval += (t[i] - 1)*fApB +log(1+exp(fApB));\n\t}\n\tfor (iter=0;iter<max_iter;iter++)\n\t{\n\t\t// Update Gradient and Hessian (use H' = H + sigma I)\n\t\th11=sigma; // numerically ensures strict PD\n\t\th22=sigma;\n\t\th21=0.0;g1=0.0;g2=0.0;\n\t\tfor (i=0;i<l;i++)\n\t\t{\n\t\t\tfApB = dec_values[i]*A+B;\n\t\t\tif (fApB >= 0)\n\t\t\t{\n\t\t\t\tp=exp(-fApB)/(1.0+exp(-fApB));\n\t\t\t\tq=1.0/(1.0+exp(-fApB));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tp=1.0/(1.0+exp(fApB));\n\t\t\t\tq=exp(fApB)/(1.0+exp(fApB));\n\t\t\t}\n\t\t\td2=p*q;\n\t\t\th11+=dec_values[i]*dec_values[i]*d2;\n\t\t\th22+=d2;\n\t\t\th21+=dec_values[i]*d2;\n\t\t\td1=t[i]-p;\n\t\t\tg1+=dec_values[i]*d1;\n\t\t\tg2+=d1;\n\t\t}\n\n\t\t// Stopping Criteria\n\t\tif (fabs(g1)<eps && fabs(g2)<eps)\n\t\t\tbreak;\n\n\t\t// Finding Newton direction: -inv(H') * g\n\t\tdet=h11*h22-h21*h21;\n\t\tdA=-(h22*g1 - h21 * g2) / det;\n\t\tdB=-(-h21*g1+ h11 * g2) / det;\n\t\tgd=g1*dA+g2*dB;\n\n\n\t\tstepsize = 1;\t\t// Line Search\n\t\twhile (stepsize >= min_step)\n\t\t{\n\t\t\tnewA = A + stepsize * dA;\n\t\t\tnewB = B + stepsize * dB;\n\n\t\t\t// New function value\n\t\t\tnewf = 0.0;\n\t\t\tfor (i=0;i<l;i++)\n\t\t\t{\n\t\t\t\tfApB = dec_values[i]*newA+newB;\n\t\t\t\tif (fApB >= 0)\n\t\t\t\t\tnewf += t[i]*fApB + log(1+exp(-fApB));\n\t\t\t\telse\n\t\t\t\t\tnewf += (t[i] - 1)*fApB +log(1+exp(fApB));\n\t\t\t}\n\t\t\t// Check sufficient decrease\n\t\t\tif (newf<fval+0.0001*stepsize*gd)\n\t\t\t{\n\t\t\t\tA=newA;B=newB;fval=newf;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t\tstepsize = stepsize / 2.0;\n\t\t}\n\n\t\tif (stepsize < min_step)\n\t\t{\n\t\t\tinfo(\"Line search fails in two-class probability estimates\\n\");\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (iter>=max_iter)\n\t\tinfo(\"Reaching maximal iterations in two-class probability estimates\\n\");\n\tfree(t);\n}\n\nstatic double sigmoid_predict(double decision_value, double A, double B)\n{\n\tdouble fApB = decision_value*A+B;\n\t// 1-p used later; avoid catastrophic cancellation\n\tif (fApB >= 0)\n\t\treturn exp(-fApB)/(1.0+exp(-fApB));\n\telse\n\t\treturn 1.0/(1+exp(fApB)) ;\n}\n\n// Method 2 from the multiclass_prob paper by Wu, Lin, and Weng\nstatic void multiclass_probability(int k, double **r, double *p)\n{\n\tint t,j;\n\tint iter = 0, max_iter=max(100,k);\n\tdouble **Q=Malloc(double *,k);\n\tdouble *Qp=Malloc(double,k);\n\tdouble pQp, eps=0.005/k;\n\t\n\tfor (t=0;t<k;t++)\n\t{\n\t\tp[t]=1.0/k;  // Valid if k = 1\n\t\tQ[t]=Malloc(double,k);\n\t\tQ[t][t]=0;\n\t\tfor (j=0;j<t;j++)\n\t\t{\n\t\t\tQ[t][t]+=r[j][t]*r[j][t];\n\t\t\tQ[t][j]=Q[j][t];\n\t\t}\n\t\tfor (j=t+1;j<k;j++)\n\t\t{\n\t\t\tQ[t][t]+=r[j][t]*r[j][t];\n\t\t\tQ[t][j]=-r[j][t]*r[t][j];\n\t\t}\n\t}\n\tfor (iter=0;iter<max_iter;iter++)\n\t{\n\t\t// stopping condition, recalculate QP,pQP for numerical accuracy\n\t\tpQp=0;\n\t\tfor (t=0;t<k;t++)\n\t\t{\n\t\t\tQp[t]=0;\n\t\t\tfor (j=0;j<k;j++)\n\t\t\t\tQp[t]+=Q[t][j]*p[j];\n\t\t\tpQp+=p[t]*Qp[t];\n\t\t}\n\t\tdouble max_error=0;\n\t\tfor (t=0;t<k;t++)\n\t\t{\n\t\t\tdouble error=fabs(Qp[t]-pQp);\n\t\t\tif (error>max_error)\n\t\t\t\tmax_error=error;\n\t\t}\n\t\tif (max_error<eps) break;\n\t\t\n\t\tfor (t=0;t<k;t++)\n\t\t{\n\t\t\tdouble diff=(-Qp[t]+pQp)/Q[t][t];\n\t\t\tp[t]+=diff;\n\t\t\tpQp=(pQp+diff*(diff*Q[t][t]+2*Qp[t]))/(1+diff)/(1+diff);\n\t\t\tfor (j=0;j<k;j++)\n\t\t\t{\n\t\t\t\tQp[j]=(Qp[j]+diff*Q[t][j])/(1+diff);\n\t\t\t\tp[j]/=(1+diff);\n\t\t\t}\n\t\t}\n\t}\n\tif (iter>=max_iter)\n\t\tinfo(\"Exceeds max_iter in multiclass_prob\\n\");\n\tfor(t=0;t<k;t++) free(Q[t]);\n\tfree(Q);\n\tfree(Qp);\n}\n\n// Cross-validation decision values for probability estimates\nstatic void svm_binary_svc_probability(\n\tconst svm_problem *prob, const svm_parameter *param,\n\tdouble Cp, double Cn, double& probA, double& probB)\n{\n\tint i;\n\tint nr_fold = 5;\n\tint *perm = Malloc(int,prob->l);\n\tdouble *dec_values = Malloc(double,prob->l);\n\n\t// random shuffle\n\tfor(i=0;i<prob->l;i++) perm[i]=i;\n\tfor(i=0;i<prob->l;i++)\n\t{\n\t\tint j = i+rand()%(prob->l-i);\n\t\tswap(perm[i],perm[j]);\n\t}\n\tfor(i=0;i<nr_fold;i++)\n\t{\n\t\tint begin = i*prob->l/nr_fold;\n\t\tint end = (i+1)*prob->l/nr_fold;\n\t\tint j,k;\n\t\tstruct svm_problem subprob;\n\n\t\tsubprob.l = prob->l-(end-begin);\n\t\tsubprob.x = Malloc(struct svm_node*,subprob.l);\n\t\tsubprob.y = Malloc(double,subprob.l);\n\t\t\t\n\t\tk=0;\n\t\tfor(j=0;j<begin;j++)\n\t\t{\n\t\t\tsubprob.x[k] = prob->x[perm[j]];\n\t\t\tsubprob.y[k] = prob->y[perm[j]];\n\t\t\t++k;\n\t\t}\n\t\tfor(j=end;j<prob->l;j++)\n\t\t{\n\t\t\tsubprob.x[k] = prob->x[perm[j]];\n\t\t\tsubprob.y[k] = prob->y[perm[j]];\n\t\t\t++k;\n\t\t}\n\t\tint p_count=0,n_count=0;\n\t\tfor(j=0;j<k;j++)\n\t\t\tif(subprob.y[j]>0)\n\t\t\t\tp_count++;\n\t\t\telse\n\t\t\t\tn_count++;\n\n\t\tif(p_count==0 && n_count==0)\n\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\tdec_values[perm[j]] = 0;\n\t\telse if(p_count > 0 && n_count == 0)\n\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\tdec_values[perm[j]] = 1;\n\t\telse if(p_count == 0 && n_count > 0)\n\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\tdec_values[perm[j]] = -1;\n\t\telse\n\t\t{\n\t\t\tsvm_parameter subparam = *param;\n\t\t\tsubparam.probability=0;\n\t\t\tsubparam.C=1.0;\n\t\t\tsubparam.nr_weight=2;\n\t\t\tsubparam.weight_label = Malloc(int,2);\n\t\t\tsubparam.weight = Malloc(double,2);\n\t\t\tsubparam.weight_label[0]=+1;\n\t\t\tsubparam.weight_label[1]=-1;\n\t\t\tsubparam.weight[0]=Cp;\n\t\t\tsubparam.weight[1]=Cn;\n\t\t\tstruct svm_model *submodel = svm_train(&subprob,&subparam);\n\t\t\tfor(j=begin;j<end;j++)\n\t\t\t{\n\t\t\t\tsvm_predict_values(submodel,prob->x[perm[j]],&(dec_values[perm[j]]));\n\t\t\t\t// ensure +1 -1 order; reason not using CV subroutine\n\t\t\t\tdec_values[perm[j]] *= submodel->label[0];\n\t\t\t}\t\t\n\t\t\tsvm_free_and_destroy_model(&submodel);\n\t\t\tsvm_destroy_param(&subparam);\n\t\t}\n\t\tfree(subprob.x);\n\t\tfree(subprob.y);\n\t}\t\t\n\tsigmoid_train(prob->l,dec_values,prob->y,probA,probB);\n\tfree(dec_values);\n\tfree(perm);\n}\n\n// Return parameter of a Laplace distribution \nstatic double svm_svr_probability(\n\tconst svm_problem *prob, const svm_parameter *param)\n{\n\tint i;\n\tint nr_fold = 5;\n\tdouble *ymv = Malloc(double,prob->l);\n\tdouble mae = 0;\n\n\tsvm_parameter newparam = *param;\n\tnewparam.probability = 0;\n\tsvm_cross_validation(prob,&newparam,nr_fold,ymv);\n\tfor(i=0;i<prob->l;i++)\n\t{\n\t\tymv[i]=prob->y[i]-ymv[i];\n\t\tmae += fabs(ymv[i]);\n\t}\t\t\n\tmae /= prob->l;\n\tdouble std=sqrt(2*mae*mae);\n\tint count=0;\n\tmae=0;\n\tfor(i=0;i<prob->l;i++)\n\t\tif (fabs(ymv[i]) > 5*std) \n\t\t\tcount=count+1;\n\t\telse \n\t\t\tmae+=fabs(ymv[i]);\n\tmae /= (prob->l-count);\n\tinfo(\"Prob. model for test data: target value = predicted value + z,\\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma= %g\\n\",mae);\n\tfree(ymv);\n\treturn mae;\n}\n\n\n// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data\n// perm, length l, must be allocated before calling this subroutine\nstatic void svm_group_classes(const svm_problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm)\n{\n\tint l = prob->l;\n\tint max_nr_class = 16;\n\tint nr_class = 0;\n\tint *label = Malloc(int,max_nr_class);\n\tint *count = Malloc(int,max_nr_class);\n\tint *data_label = Malloc(int,l);\n\tint i;\n\n\tfor(i=0;i<l;i++)\n\t{\n\t\tint this_label = (int)prob->y[i];\n\t\tint j;\n\t\tfor(j=0;j<nr_class;j++)\n\t\t{\n\t\t\tif(this_label == label[j])\n\t\t\t{\n\t\t\t\t++count[j];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tdata_label[i] = j;\n\t\tif(j == nr_class)\n\t\t{\n\t\t\tif(nr_class == max_nr_class)\n\t\t\t{\n\t\t\t\tmax_nr_class *= 2;\n\t\t\t\tlabel = (int *)realloc(label,max_nr_class*sizeof(int));\n\t\t\t\tcount = (int *)realloc(count,max_nr_class*sizeof(int));\n\t\t\t}\n\t\t\tlabel[nr_class] = this_label;\n\t\t\tcount[nr_class] = 1;\n\t\t\t++nr_class;\n\t\t}\n\t}\n\n\t//\n\t// Labels are ordered by their first occurrence in the training set. \n\t// However, for two-class sets with -1/+1 labels and -1 appears first, \n\t// we swap labels to ensure that internally the binary SVM has positive data corresponding to the +1 instances.\n\t//\n\tif (nr_class == 2 && label[0] == -1 && label[1] == 1)\n\t{\n\t\tswap(label[0],label[1]);\n\t\tswap(count[0],count[1]);\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tif(data_label[i] == 0)\n\t\t\t\tdata_label[i] = 1;\n\t\t\telse\n\t\t\t\tdata_label[i] = 0;\n\t\t}\n\t}\n\n\tint *start = Malloc(int,nr_class);\n\tstart[0] = 0;\n\tfor(i=1;i<nr_class;i++)\n\t\tstart[i] = start[i-1]+count[i-1];\n\tfor(i=0;i<l;i++)\n\t{\n\t\tperm[start[data_label[i]]] = i;\n\t\t++start[data_label[i]];\n\t}\n\tstart[0] = 0;\n\tfor(i=1;i<nr_class;i++)\n\t\tstart[i] = start[i-1]+count[i-1];\n\n\t*nr_class_ret = nr_class;\n\t*label_ret = label;\n\t*start_ret = start;\n\t*count_ret = count;\n\tfree(data_label);\n}\n\n//\n// Interface functions\n//\nsvm_model *svm_train(const svm_problem *prob, const svm_parameter *param)\n{\n\tsvm_model *model = Malloc(svm_model,1);\n\tmodel->param = *param;\n\tmodel->free_sv = 0;\t// XXX\n\n\tif(param->svm_type == ONE_CLASS ||\n\t   param->svm_type == EPSILON_SVR ||\n\t   param->svm_type == NU_SVR)\n\t{\n\t\t// regression or one-class-svm\n\t\tmodel->nr_class = 2;\n\t\tmodel->label = NULL;\n\t\tmodel->nSV = NULL;\n\t\tmodel->probA = NULL; model->probB = NULL;\n\t\tmodel->sv_coef = Malloc(double *,1);\n\n\t\tif(param->probability && \n\t\t   (param->svm_type == EPSILON_SVR ||\n\t\t    param->svm_type == NU_SVR))\n\t\t{\n\t\t\tmodel->probA = Malloc(double,1);\n\t\t\tmodel->probA[0] = svm_svr_probability(prob,param);\n\t\t}\n\n\t\tdecision_function f = svm_train_one(prob,param,0,0);\n\t\tmodel->rho = Malloc(double,1);\n\t\tmodel->rho[0] = f.rho;\n\n\t\tint nSV = 0;\n\t\tint i;\n\t\tfor(i=0;i<prob->l;i++)\n\t\t\tif(fabs(f.alpha[i]) > 0) ++nSV;\n\t\tmodel->l = nSV;\n\t\tmodel->SV = Malloc(svm_node *,nSV);\n\t\tmodel->sv_coef[0] = Malloc(double,nSV);\n\t\tmodel->sv_indices = Malloc(int,nSV);\n\t\tint j = 0;\n\t\tfor(i=0;i<prob->l;i++)\n\t\t\tif(fabs(f.alpha[i]) > 0)\n\t\t\t{\n\t\t\t\tmodel->SV[j] = prob->x[i];\n\t\t\t\tmodel->sv_coef[0][j] = f.alpha[i];\n\t\t\t\tmodel->sv_indices[j] = i+1;\n\t\t\t\t++j;\n\t\t\t}\t\t\n\n\t\tfree(f.alpha);\n\t}\n\telse\n\t{\n\t\t// classification\n\t\tint l = prob->l;\n\t\tint nr_class;\n\t\tint *label = NULL;\n\t\tint *start = NULL;\n\t\tint *count = NULL;\n\t\tint *perm = Malloc(int,l);\n\n\t\t// group training data of the same class\n\t\tsvm_group_classes(prob,&nr_class,&label,&start,&count,perm);\n\t\tif(nr_class == 1) \n\t\t\tinfo(\"WARNING: training data in only one class. See README for details.\\n\");\n\t\t\n\t\tsvm_node **x = Malloc(svm_node *,l);\n\t\tint i;\n\t\tfor(i=0;i<l;i++)\n\t\t\tx[i] = prob->x[perm[i]];\n\n\t\t// calculate weighted C\n\n\t\tdouble *weighted_C = Malloc(double, nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tweighted_C[i] = param->C;\n\t\tfor(i=0;i<param->nr_weight;i++)\n\t\t{\t\n\t\t\tint j;\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\tif(param->weight_label[i] == label[j])\n\t\t\t\t\tbreak;\n\t\t\tif(j == nr_class)\n\t\t\t\tfprintf(stderr,\"WARNING: class label %d specified in weight is not found\\n\", param->weight_label[i]);\n\t\t\telse\n\t\t\t\tweighted_C[j] *= param->weight[i];\n\t\t}\n\n\t\t// train k*(k-1)/2 models\n\t\t\n\t\tbool *nonzero = Malloc(bool,l);\n\t\tfor(i=0;i<l;i++)\n\t\t\tnonzero[i] = false;\n\t\tdecision_function *f = Malloc(decision_function,nr_class*(nr_class-1)/2);\n\n\t\tdouble *probA=NULL,*probB=NULL;\n\t\tif (param->probability)\n\t\t{\n\t\t\tprobA=Malloc(double,nr_class*(nr_class-1)/2);\n\t\t\tprobB=Malloc(double,nr_class*(nr_class-1)/2);\n\t\t}\n\n\t\tint p = 0;\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t{\n\t\t\t\tsvm_problem sub_prob;\n\t\t\t\tint si = start[i], sj = start[j];\n\t\t\t\tint ci = count[i], cj = count[j];\n\t\t\t\tsub_prob.l = ci+cj;\n\t\t\t\tsub_prob.x = Malloc(svm_node *,sub_prob.l);\n\t\t\t\tsub_prob.y = Malloc(double,sub_prob.l);\n\t\t\t\tint k;\n\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t{\n\t\t\t\t\tsub_prob.x[k] = x[si+k];\n\t\t\t\t\tsub_prob.y[k] = +1;\n\t\t\t\t}\n\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t{\n\t\t\t\t\tsub_prob.x[ci+k] = x[sj+k];\n\t\t\t\t\tsub_prob.y[ci+k] = -1;\n\t\t\t\t}\n\n\t\t\t\tif(param->probability)\n\t\t\t\t\tsvm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]);\n\n\t\t\t\tf[p] = svm_train_one(&sub_prob,param,weighted_C[i],weighted_C[j]);\n\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\tif(!nonzero[si+k] && fabs(f[p].alpha[k]) > 0)\n\t\t\t\t\t\tnonzero[si+k] = true;\n\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\tif(!nonzero[sj+k] && fabs(f[p].alpha[ci+k]) > 0)\n\t\t\t\t\t\tnonzero[sj+k] = true;\n\t\t\t\tfree(sub_prob.x);\n\t\t\t\tfree(sub_prob.y);\n\t\t\t\t++p;\n\t\t\t}\n\n\t\t// build output\n\n\t\tmodel->nr_class = nr_class;\n\t\t\n\t\tmodel->label = Malloc(int,nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tmodel->label[i] = label[i];\n\t\t\n\t\tmodel->rho = Malloc(double,nr_class*(nr_class-1)/2);\n\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\tmodel->rho[i] = f[i].rho;\n\n\t\tif(param->probability)\n\t\t{\n\t\t\tmodel->probA = Malloc(double,nr_class*(nr_class-1)/2);\n\t\t\tmodel->probB = Malloc(double,nr_class*(nr_class-1)/2);\n\t\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\t{\n\t\t\t\tmodel->probA[i] = probA[i];\n\t\t\t\tmodel->probB[i] = probB[i];\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmodel->probA=NULL;\n\t\t\tmodel->probB=NULL;\n\t\t}\n\n\t\tint total_sv = 0;\n\t\tint *nz_count = Malloc(int,nr_class);\n\t\tmodel->nSV = Malloc(int,nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t{\n\t\t\tint nSV = 0;\n\t\t\tfor(int j=0;j<count[i];j++)\n\t\t\t\tif(nonzero[start[i]+j])\n\t\t\t\t{\t\n\t\t\t\t\t++nSV;\n\t\t\t\t\t++total_sv;\n\t\t\t\t}\n\t\t\tmodel->nSV[i] = nSV;\n\t\t\tnz_count[i] = nSV;\n\t\t}\n\t\t\n\t\tinfo(\"Total nSV = %d\\n\",total_sv);\n\n\t\tmodel->l = total_sv;\n\t\tmodel->SV = Malloc(svm_node *,total_sv);\n\t\tmodel->sv_indices = Malloc(int,total_sv);\n\t\tp = 0;\n\t\tfor(i=0;i<l;i++)\n\t\t\tif(nonzero[i])\n\t\t\t{\n\t\t\t\tmodel->SV[p] = x[i];\n\t\t\t\tmodel->sv_indices[p++] = perm[i] + 1;\n\t\t\t}\n\n\t\tint *nz_start = Malloc(int,nr_class);\n\t\tnz_start[0] = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tnz_start[i] = nz_start[i-1]+nz_count[i-1];\n\n\t\tmodel->sv_coef = Malloc(double *,nr_class-1);\n\t\tfor(i=0;i<nr_class-1;i++)\n\t\t\tmodel->sv_coef[i] = Malloc(double,total_sv);\n\n\t\tp = 0;\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t{\n\t\t\t\t// classifier (i,j): coefficients with\n\t\t\t\t// i are in sv_coef[j-1][nz_start[i]...],\n\t\t\t\t// j are in sv_coef[i][nz_start[j]...]\n\n\t\t\t\tint si = start[i];\n\t\t\t\tint sj = start[j];\n\t\t\t\tint ci = count[i];\n\t\t\t\tint cj = count[j];\n\t\t\t\t\n\t\t\t\tint q = nz_start[i];\n\t\t\t\tint k;\n\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\tif(nonzero[si+k])\n\t\t\t\t\t\tmodel->sv_coef[j-1][q++] = f[p].alpha[k];\n\t\t\t\tq = nz_start[j];\n\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\tif(nonzero[sj+k])\n\t\t\t\t\t\tmodel->sv_coef[i][q++] = f[p].alpha[ci+k];\n\t\t\t\t++p;\n\t\t\t}\n\t\t\n\t\tfree(label);\n\t\tfree(probA);\n\t\tfree(probB);\n\t\tfree(count);\n\t\tfree(perm);\n\t\tfree(start);\n\t\tfree(x);\n\t\tfree(weighted_C);\n\t\tfree(nonzero);\n\t\tfor(i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\tfree(f[i].alpha);\n\t\tfree(f);\n\t\tfree(nz_count);\n\t\tfree(nz_start);\n\t}\n\treturn model;\n}\n\n// Stratified cross validation\nvoid svm_cross_validation(const svm_problem *prob, const svm_parameter *param, int nr_fold, double *target)\n{\n\tint i;\n\tint *fold_start;\n\tint l = prob->l;\n\tint *perm = Malloc(int,l);\n\tint nr_class;\n\tif (nr_fold > l)\n\t{\n\t\tnr_fold = l;\n\t\tfprintf(stderr,\"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\\n\");\n\t}\n\tfold_start = Malloc(int,nr_fold+1);\n\t// stratified cv may not give leave-one-out rate\n\t// Each class to l folds -> some folds may have zero elements\n\tif((param->svm_type == C_SVC ||\n\t    param->svm_type == NU_SVC) && nr_fold < l)\n\t{\n\t\tint *start = NULL;\n\t\tint *label = NULL;\n\t\tint *count = NULL;\n\t\tsvm_group_classes(prob,&nr_class,&label,&start,&count,perm);\n\n\t\t// random shuffle and then data grouped by fold using the array perm\n\t\tint *fold_count = Malloc(int,nr_fold);\n\t\tint c;\n\t\tint *index = Malloc(int,l);\n\t\tfor(i=0;i<l;i++)\n\t\t\tindex[i]=perm[i];\n\t\tfor (c=0; c<nr_class; c++) \n\t\t\tfor(i=0;i<count[c];i++)\n\t\t\t{\n\t\t\t\tint j = i+rand()%(count[c]-i);\n\t\t\t\tswap(index[start[c]+j],index[start[c]+i]);\n\t\t\t}\n\t\tfor(i=0;i<nr_fold;i++)\n\t\t{\n\t\t\tfold_count[i] = 0;\n\t\t\tfor (c=0; c<nr_class;c++)\n\t\t\t\tfold_count[i]+=(i+1)*count[c]/nr_fold-i*count[c]/nr_fold;\n\t\t}\n\t\tfold_start[0]=0;\n\t\tfor (i=1;i<=nr_fold;i++)\n\t\t\tfold_start[i] = fold_start[i-1]+fold_count[i-1];\n\t\tfor (c=0; c<nr_class;c++)\n\t\t\tfor(i=0;i<nr_fold;i++)\n\t\t\t{\n\t\t\t\tint begin = start[c]+i*count[c]/nr_fold;\n\t\t\t\tint end = start[c]+(i+1)*count[c]/nr_fold;\n\t\t\t\tfor(int j=begin;j<end;j++)\n\t\t\t\t{\n\t\t\t\t\tperm[fold_start[i]] = index[j];\n\t\t\t\t\tfold_start[i]++;\n\t\t\t\t}\n\t\t\t}\n\t\tfold_start[0]=0;\n\t\tfor (i=1;i<=nr_fold;i++)\n\t\t\tfold_start[i] = fold_start[i-1]+fold_count[i-1];\n\t\tfree(start);\n\t\tfree(label);\n\t\tfree(count);\n\t\tfree(index);\n\t\tfree(fold_count);\n\t}\n\telse\n\t{\n\t\tfor(i=0;i<l;i++) perm[i]=i;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tint j = i+rand()%(l-i);\n\t\t\tswap(perm[i],perm[j]);\n\t\t}\n\t\tfor(i=0;i<=nr_fold;i++)\n\t\t\tfold_start[i]=i*l/nr_fold;\n\t}\n\n\tfor(i=0;i<nr_fold;i++)\n\t{\n\t\tint begin = fold_start[i];\n\t\tint end = fold_start[i+1];\n\t\tint j,k;\n\t\tstruct svm_problem subprob;\n\n\t\tsubprob.l = l-(end-begin);\n\t\tsubprob.x = Malloc(struct svm_node*,subprob.l);\n\t\tsubprob.y = Malloc(double,subprob.l);\n\t\t\t\n\t\tk=0;\n\t\tfor(j=0;j<begin;j++)\n\t\t{\n\t\t\tsubprob.x[k] = prob->x[perm[j]];\n\t\t\tsubprob.y[k] = prob->y[perm[j]];\n\t\t\t++k;\n\t\t}\n\t\tfor(j=end;j<l;j++)\n\t\t{\n\t\t\tsubprob.x[k] = prob->x[perm[j]];\n\t\t\tsubprob.y[k] = prob->y[perm[j]];\n\t\t\t++k;\n\t\t}\n\t\tstruct svm_model *submodel = svm_train(&subprob,param);\n\t\tif(param->probability && \n\t\t   (param->svm_type == C_SVC || param->svm_type == NU_SVC))\n\t\t{\n\t\t\tdouble *prob_estimates=Malloc(double,svm_get_nr_class(submodel));\n\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\ttarget[perm[j]] = svm_predict_probability(submodel,prob->x[perm[j]],prob_estimates);\n\t\t\tfree(prob_estimates);\n\t\t}\n\t\telse\n\t\t\tfor(j=begin;j<end;j++)\n\t\t\t\ttarget[perm[j]] = svm_predict(submodel,prob->x[perm[j]]);\n\t\tsvm_free_and_destroy_model(&submodel);\n\t\tfree(subprob.x);\n\t\tfree(subprob.y);\n\t}\t\t\n\tfree(fold_start);\n\tfree(perm);\n}\n\n\nint svm_get_svm_type(const svm_model *model)\n{\n\treturn model->param.svm_type;\n}\n\nint svm_get_nr_class(const svm_model *model)\n{\n\treturn model->nr_class;\n}\n\nvoid svm_get_labels(const svm_model *model, int* label)\n{\n\tif (model->label != NULL)\n\t\tfor(int i=0;i<model->nr_class;i++)\n\t\t\tlabel[i] = model->label[i];\n}\n\nvoid svm_get_sv_indices(const svm_model *model, int* indices)\n{\n\tif (model->sv_indices != NULL)\n\t\tfor(int i=0;i<model->l;i++)\n\t\t\tindices[i] = model->sv_indices[i];\n}\n\nint svm_get_nr_sv(const svm_model *model)\n{\n\treturn model->l;\n}\n\ndouble svm_get_svr_probability(const svm_model *model)\n{\n\tif ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) &&\n\t    model->probA!=NULL)\n\t\treturn model->probA[0];\n\telse\n\t{\n\t\tfprintf(stderr,\"Model doesn't contain information for SVR probability inference\\n\");\n\t\treturn 0;\n\t}\n}\n\ndouble svm_predict_values(const svm_model *model, const svm_node *x, double* dec_values)\n{\n\tint i;\n\tif(model->param.svm_type == ONE_CLASS ||\n\t   model->param.svm_type == EPSILON_SVR ||\n\t   model->param.svm_type == NU_SVR)\n\t{\n\t\tdouble *sv_coef = model->sv_coef[0];\n\t\tdouble sum = 0;\n\t\tfor(i=0;i<model->l;i++)\n\t\t\tsum += sv_coef[i] * Kernel::k_function(x,model->SV[i],model->param);\n\t\tsum -= model->rho[0];\n\t\t*dec_values = sum;\n\n\t\tif(model->param.svm_type == ONE_CLASS)\n\t\t\treturn (sum>0)?1:-1;\n\t\telse\n\t\t\treturn sum;\n\t}\n\telse\n\t{\n\t\tint nr_class = model->nr_class;\n\t\tint l = model->l;\n\t\t\n\t\tdouble *kvalue = Malloc(double,l);\n\t\tfor(i=0;i<l;i++)\n\t\t\tkvalue[i] = Kernel::k_function(x,model->SV[i],model->param);\n\n\t\tint *start = Malloc(int,nr_class);\n\t\tstart[0] = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tstart[i] = start[i-1]+model->nSV[i-1];\n\n\t\tint *vote = Malloc(int,nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tvote[i] = 0;\n\n\t\tint p=0;\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t{\n\t\t\t\tdouble sum = 0;\n\t\t\t\tint si = start[i];\n\t\t\t\tint sj = start[j];\n\t\t\t\tint ci = model->nSV[i];\n\t\t\t\tint cj = model->nSV[j];\n\t\t\t\t\n\t\t\t\tint k;\n\t\t\t\tdouble *coef1 = model->sv_coef[j-1];\n\t\t\t\tdouble *coef2 = model->sv_coef[i];\n\t\t\t\tfor(k=0;k<ci;k++)\n\t\t\t\t\tsum += coef1[si+k] * kvalue[si+k];\n\t\t\t\tfor(k=0;k<cj;k++)\n\t\t\t\t\tsum += coef2[sj+k] * kvalue[sj+k];\n\t\t\t\tsum -= model->rho[p];\n\t\t\t\tdec_values[p] = sum;\n\n\t\t\t\tif(dec_values[p] > 0)\n\t\t\t\t\t++vote[i];\n\t\t\t\telse\n\t\t\t\t\t++vote[j];\n\t\t\t\tp++;\n\t\t\t}\n\n\t\tint vote_max_idx = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tif(vote[i] > vote[vote_max_idx])\n\t\t\t\tvote_max_idx = i;\n\n\t\tfree(kvalue);\n\t\tfree(start);\n\t\tfree(vote);\n\t\treturn model->label[vote_max_idx];\n\t}\n}\n\ndouble svm_predict(const svm_model *model, const svm_node *x)\n{\n\tint nr_class = model->nr_class;\n\tdouble *dec_values;\n\tif(model->param.svm_type == ONE_CLASS ||\n\t   model->param.svm_type == EPSILON_SVR ||\n\t   model->param.svm_type == NU_SVR)\n\t\tdec_values = Malloc(double, 1);\n\telse \n\t\tdec_values = Malloc(double, nr_class*(nr_class-1)/2);\n\tdouble pred_result = svm_predict_values(model, x, dec_values);\n\tfree(dec_values);\n\treturn pred_result;\n}\n\ndouble svm_predict_probability(\n\tconst svm_model *model, const svm_node *x, double *prob_estimates)\n{\n\tif ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) &&\n\t    model->probA!=NULL && model->probB!=NULL)\n\t{\n\t\tint i;\n\t\tint nr_class = model->nr_class;\n\t\tdouble *dec_values = Malloc(double, nr_class*(nr_class-1)/2);\n\t\tsvm_predict_values(model, x, dec_values);\n\n\t\tdouble min_prob=1e-7;\n\t\tdouble **pairwise_prob=Malloc(double *,nr_class);\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tpairwise_prob[i]=Malloc(double,nr_class);\n\t\tint k=0;\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t{\n\t\t\t\tpairwise_prob[i][j]=min(max(sigmoid_predict(dec_values[k],model->probA[k],model->probB[k]),min_prob),1-min_prob);\n\t\t\t\tpairwise_prob[j][i]=1-pairwise_prob[i][j];\n\t\t\t\tk++;\n\t\t\t}\n\t\tmulticlass_probability(nr_class,pairwise_prob,prob_estimates);\n\n\t\tint prob_max_idx = 0;\n\t\tfor(i=1;i<nr_class;i++)\n\t\t\tif(prob_estimates[i] > prob_estimates[prob_max_idx])\n\t\t\t\tprob_max_idx = i;\n\t\tfor(i=0;i<nr_class;i++)\n\t\t\tfree(pairwise_prob[i]);\n\t\tfree(dec_values);\n\t\tfree(pairwise_prob);\n\t\treturn model->label[prob_max_idx];\n\t}\n\telse \n\t\treturn svm_predict(model, x);\n}\n\nstatic const char *svm_type_table[] =\n{\n\t\"c_svc\",\"nu_svc\",\"one_class\",\"epsilon_svr\",\"nu_svr\",NULL\n};\n\nstatic const char *kernel_type_table[]=\n{\n\t\"linear\",\"polynomial\",\"rbf\",\"sigmoid\",\"precomputed\",NULL\n};\n\nint svm_save_model(const char *model_file_name, const svm_model *model)\n{\n\tFILE *fp = fopen(model_file_name,\"w\");\n\tif(fp==NULL) return -1;\n\n\tchar *old_locale = strdup(setlocale(LC_ALL, NULL));\n\tsetlocale(LC_ALL, \"C\");\n\n\tconst svm_parameter& param = model->param;\n\n\tfprintf(fp,\"svm_type %s\\n\", svm_type_table[param.svm_type]);\n\tfprintf(fp,\"kernel_type %s\\n\", kernel_type_table[param.kernel_type]);\n\n\tif(param.kernel_type == POLY)\n\t\tfprintf(fp,\"degree %d\\n\", param.degree);\n\n\tif(param.kernel_type == POLY || param.kernel_type == RBF || param.kernel_type == SIGMOID)\n\t\tfprintf(fp,\"gamma %g\\n\", param.gamma);\n\n\tif(param.kernel_type == POLY || param.kernel_type == SIGMOID)\n\t\tfprintf(fp,\"coef0 %g\\n\", param.coef0);\n\n\tint nr_class = model->nr_class;\n\tint l = model->l;\n\tfprintf(fp, \"nr_class %d\\n\", nr_class);\n\tfprintf(fp, \"total_sv %d\\n\",l);\n\t\n\t{\n\t\tfprintf(fp, \"rho\");\n\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\tfprintf(fp,\" %g\",model->rho[i]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\t\n\tif(model->label)\n\t{\n\t\tfprintf(fp, \"label\");\n\t\tfor(int i=0;i<nr_class;i++)\n\t\t\tfprintf(fp,\" %d\",model->label[i]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\n\tif(model->probA) // regression has probA only\n\t{\n\t\tfprintf(fp, \"probA\");\n\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\tfprintf(fp,\" %g\",model->probA[i]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\tif(model->probB)\n\t{\n\t\tfprintf(fp, \"probB\");\n\t\tfor(int i=0;i<nr_class*(nr_class-1)/2;i++)\n\t\t\tfprintf(fp,\" %g\",model->probB[i]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\n\tif(model->nSV)\n\t{\n\t\tfprintf(fp, \"nr_sv\");\n\t\tfor(int i=0;i<nr_class;i++)\n\t\t\tfprintf(fp,\" %d\",model->nSV[i]);\n\t\tfprintf(fp, \"\\n\");\n\t}\n\n\tfprintf(fp, \"SV\\n\");\n\tconst double * const *sv_coef = model->sv_coef;\n\tconst svm_node * const *SV = model->SV;\n\n\tfor(int i=0;i<l;i++)\n\t{\n\t\tfor(int j=0;j<nr_class-1;j++)\n\t\t\tfprintf(fp, \"%.16g \",sv_coef[j][i]);\n\n\t\tconst svm_node *p = SV[i];\n\n\t\tif(param.kernel_type == PRECOMPUTED)\n\t\t\tfprintf(fp,\"0:%d \",(int)(p->value));\n\t\telse\n\t\t\twhile(p->index != -1)\n\t\t\t{\n\t\t\t\tfprintf(fp,\"%d:%.8g \",p->index,p->value);\n\t\t\t\tp++;\n\t\t\t}\n\t\tfprintf(fp, \"\\n\");\n\t}\n\n\tsetlocale(LC_ALL, old_locale);\n\tfree(old_locale);\n\n\tif (ferror(fp) != 0 || fclose(fp) != 0) return -1;\n\telse return 0;\n}\n\nstatic char *line = NULL;\nstatic int max_line_len;\n\nstatic char* readline(FILE *input)\n{\n\tint len;\n\n\tif(fgets(line,max_line_len,input) == NULL)\n\t\treturn NULL;\n\n\twhile(strrchr(line,'\\n') == NULL)\n\t{\n\t\tmax_line_len *= 2;\n\t\tline = (char *) realloc(line,max_line_len);\n\t\tlen = (int) strlen(line);\n\t\tif(fgets(line+len,max_line_len-len,input) == NULL)\n\t\t\tbreak;\n\t}\n\treturn line;\n}\n\n//\n// FSCANF helps to handle fscanf failures.\n// Its do-while block avoids the ambiguity when\n// if (...)\n//    FSCANF();\n// is used\n//\n#define FSCANF(_stream, _format, _var) do{ if (fscanf(_stream, _format, _var) != 1) return false; }while(0)\nbool read_model_header(FILE *fp, svm_model* model)\n{\n\tsvm_parameter& param = model->param;\n\tchar cmd[81];\n\twhile(1)\n\t{\n\t\tFSCANF(fp,\"%80s\",cmd);\n\n\t\tif(strcmp(cmd,\"svm_type\")==0)\n\t\t{\n\t\t\tFSCANF(fp,\"%80s\",cmd);\n\t\t\tint i;\n\t\t\tfor(i=0;svm_type_table[i];i++)\n\t\t\t{\n\t\t\t\tif(strcmp(svm_type_table[i],cmd)==0)\n\t\t\t\t{\n\t\t\t\t\tparam.svm_type=i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(svm_type_table[i] == NULL)\n\t\t\t{\n\t\t\t\tfprintf(stderr,\"unknown svm type.\\n\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse if(strcmp(cmd,\"kernel_type\")==0)\n\t\t{\t\t\n\t\t\tFSCANF(fp,\"%80s\",cmd);\n\t\t\tint i;\n\t\t\tfor(i=0;kernel_type_table[i];i++)\n\t\t\t{\n\t\t\t\tif(strcmp(kernel_type_table[i],cmd)==0)\n\t\t\t\t{\n\t\t\t\t\tparam.kernel_type=i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(kernel_type_table[i] == NULL)\n\t\t\t{\n\t\t\t\tfprintf(stderr,\"unknown kernel function.\\n\");\t\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse if(strcmp(cmd,\"degree\")==0)\n\t\t\tFSCANF(fp,\"%d\",&param.degree);\n\t\telse if(strcmp(cmd,\"gamma\")==0)\n\t\t\tFSCANF(fp,\"%lf\",&param.gamma);\n\t\telse if(strcmp(cmd,\"coef0\")==0)\n\t\t\tFSCANF(fp,\"%lf\",&param.coef0);\n\t\telse if(strcmp(cmd,\"nr_class\")==0)\n\t\t\tFSCANF(fp,\"%d\",&model->nr_class);\n\t\telse if(strcmp(cmd,\"total_sv\")==0)\n\t\t\tFSCANF(fp,\"%d\",&model->l);\n\t\telse if(strcmp(cmd,\"rho\")==0)\n\t\t{\n\t\t\tint n = model->nr_class * (model->nr_class-1)/2;\n\t\t\tmodel->rho = Malloc(double,n);\n\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\tFSCANF(fp,\"%lf\",&model->rho[i]);\n\t\t}\n\t\telse if(strcmp(cmd,\"label\")==0)\n\t\t{\n\t\t\tint n = model->nr_class;\n\t\t\tmodel->label = Malloc(int,n);\n\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\tFSCANF(fp,\"%d\",&model->label[i]);\n\t\t}\n\t\telse if(strcmp(cmd,\"probA\")==0)\n\t\t{\n\t\t\tint n = model->nr_class * (model->nr_class-1)/2;\n\t\t\tmodel->probA = Malloc(double,n);\n\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\tFSCANF(fp,\"%lf\",&model->probA[i]);\n\t\t}\n\t\telse if(strcmp(cmd,\"probB\")==0)\n\t\t{\n\t\t\tint n = model->nr_class * (model->nr_class-1)/2;\n\t\t\tmodel->probB = Malloc(double,n);\n\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\tFSCANF(fp,\"%lf\",&model->probB[i]);\n\t\t}\n\t\telse if(strcmp(cmd,\"nr_sv\")==0)\n\t\t{\n\t\t\tint n = model->nr_class;\n\t\t\tmodel->nSV = Malloc(int,n);\n\t\t\tfor(int i=0;i<n;i++)\n\t\t\t\tFSCANF(fp,\"%d\",&model->nSV[i]);\n\t\t}\n\t\telse if(strcmp(cmd,\"SV\")==0)\n\t\t{\n\t\t\twhile(1)\n\t\t\t{\n\t\t\t\tint c = getc(fp);\n\t\t\t\tif(c==EOF || c=='\\n') break;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfprintf(stderr,\"unknown text in model file: [%s]\\n\",cmd);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n\n}\n\nsvm_model *svm_load_model(const char *model_file_name)\n{\n\tFILE *fp = fopen(model_file_name,\"rb\");\n\tif(fp==NULL) return NULL;\n\n\tchar *old_locale = strdup(setlocale(LC_ALL, NULL));\n\tsetlocale(LC_ALL, \"C\");\n\n\t// read parameters\n\n\tsvm_model *model = Malloc(svm_model,1);\n\tmodel->rho = NULL;\n\tmodel->probA = NULL;\n\tmodel->probB = NULL;\n\tmodel->sv_indices = NULL;\n\tmodel->label = NULL;\n\tmodel->nSV = NULL;\n\t\n\t// read header\n\tif (!read_model_header(fp, model))\n\t{\n\t\tfprintf(stderr, \"ERROR: fscanf failed to read model\\n\");\n\t\tsetlocale(LC_ALL, old_locale);\n\t\tfree(old_locale);\n\t\tfree(model->rho);\n\t\tfree(model->label);\n\t\tfree(model->nSV);\n\t\tfree(model);\n\t\treturn NULL;\n\t}\n\t\n\t// read sv_coef and SV\n\n\tint elements = 0;\n\tlong pos = ftell(fp);\n\n\tmax_line_len = 1024;\n\tline = Malloc(char,max_line_len);\n\tchar *p,*endptr,*idx,*val;\n\n\twhile(readline(fp)!=NULL)\n\t{\n\t\tp = strtok(line,\":\");\n\t\twhile(1)\n\t\t{\n\t\t\tp = strtok(NULL,\":\");\n\t\t\tif(p == NULL)\n\t\t\t\tbreak;\n\t\t\t++elements;\n\t\t}\n\t}\n\telements += model->l;\n\n\tfseek(fp,pos,SEEK_SET);\n\n\tint m = model->nr_class - 1;\n\tint l = model->l;\n\tmodel->sv_coef = Malloc(double *,m);\n\tint i;\n\tfor(i=0;i<m;i++)\n\t\tmodel->sv_coef[i] = Malloc(double,l);\n\tmodel->SV = Malloc(svm_node*,l);\n\tsvm_node *x_space = NULL;\n\tif(l>0) x_space = Malloc(svm_node,elements);\n\n\tint j=0;\n\tfor(i=0;i<l;i++)\n\t{\n\t\treadline(fp);\n\t\tmodel->SV[i] = &x_space[j];\n\n\t\tp = strtok(line, \" \\t\");\n\t\tmodel->sv_coef[0][i] = strtod(p,&endptr);\n\t\tfor(int k=1;k<m;k++)\n\t\t{\n\t\t\tp = strtok(NULL, \" \\t\");\n\t\t\tmodel->sv_coef[k][i] = strtod(p,&endptr);\n\t\t}\n\n\t\twhile(1)\n\t\t{\n\t\t\tidx = strtok(NULL, \":\");\n\t\t\tval = strtok(NULL, \" \\t\");\n\n\t\t\tif(val == NULL)\n\t\t\t\tbreak;\n\t\t\tx_space[j].index = (int) strtol(idx,&endptr,10);\n\t\t\tx_space[j].value = strtod(val,&endptr);\n\n\t\t\t++j;\n\t\t}\n\t\tx_space[j++].index = -1;\n\t}\n\tfree(line);\n\n\tsetlocale(LC_ALL, old_locale);\n\tfree(old_locale);\n\n\tif (ferror(fp) != 0 || fclose(fp) != 0)\n\t\treturn NULL;\n\n\tmodel->free_sv = 1;\t// XXX\n\treturn model;\n}\n\nvoid svm_free_model_content(svm_model* model_ptr)\n{\n\tif(model_ptr->free_sv && model_ptr->l > 0 && model_ptr->SV != NULL)\n\t\tfree((void *)(model_ptr->SV[0]));\n\tif(model_ptr->sv_coef)\n\t{\n\t\tfor(int i=0;i<model_ptr->nr_class-1;i++)\n\t\t\tfree(model_ptr->sv_coef[i]);\n\t}\n\n\tfree(model_ptr->SV);\n\tmodel_ptr->SV = NULL;\n\n\tfree(model_ptr->sv_coef);\n\tmodel_ptr->sv_coef = NULL;\n\n\tfree(model_ptr->rho);\n\tmodel_ptr->rho = NULL;\n\n\tfree(model_ptr->label);\n\tmodel_ptr->label= NULL;\n\n\tfree(model_ptr->probA);\n\tmodel_ptr->probA = NULL;\n\n\tfree(model_ptr->probB);\n\tmodel_ptr->probB= NULL;\n\n\tfree(model_ptr->sv_indices);\n\tmodel_ptr->sv_indices = NULL;\n\n\tfree(model_ptr->nSV);\n\tmodel_ptr->nSV = NULL;\n}\n\nvoid svm_free_and_destroy_model(svm_model** model_ptr_ptr)\n{\n\tif(model_ptr_ptr != NULL && *model_ptr_ptr != NULL)\n\t{\n\t\tsvm_free_model_content(*model_ptr_ptr);\n\t\tfree(*model_ptr_ptr);\n\t\t*model_ptr_ptr = NULL;\n\t}\n}\n\nvoid svm_destroy_param(svm_parameter* param)\n{\n\tfree(param->weight_label);\n\tfree(param->weight);\n}\n\nconst char *svm_check_parameter(const svm_problem *prob, const svm_parameter *param)\n{\n\t// svm_type\n\n\tint svm_type = param->svm_type;\n\tif(svm_type != C_SVC &&\n\t   svm_type != NU_SVC &&\n\t   svm_type != ONE_CLASS &&\n\t   svm_type != EPSILON_SVR &&\n\t   svm_type != NU_SVR)\n\t\treturn \"unknown svm type\";\n\t\n\t// kernel_type, degree\n\t\n\tint kernel_type = param->kernel_type;\n\tif(kernel_type != LINEAR &&\n\t   kernel_type != POLY &&\n\t   kernel_type != RBF &&\n\t   kernel_type != SIGMOID &&\n\t   kernel_type != PRECOMPUTED)\n\t\treturn \"unknown kernel type\";\n\n\tif(param->gamma < 0)\n\t\treturn \"gamma < 0\";\n\n\tif(param->degree < 0)\n\t\treturn \"degree of polynomial kernel < 0\";\n\n\t// cache_size,eps,C,nu,p,shrinking\n\n\tif(param->cache_size <= 0)\n\t\treturn \"cache_size <= 0\";\n\n\tif(param->eps <= 0)\n\t\treturn \"eps <= 0\";\n\n\tif(svm_type == C_SVC ||\n\t   svm_type == EPSILON_SVR ||\n\t   svm_type == NU_SVR)\n\t\tif(param->C <= 0)\n\t\t\treturn \"C <= 0\";\n\n\tif(svm_type == NU_SVC ||\n\t   svm_type == ONE_CLASS ||\n\t   svm_type == NU_SVR)\n\t\tif(param->nu <= 0 || param->nu > 1)\n\t\t\treturn \"nu <= 0 or nu > 1\";\n\n\tif(svm_type == EPSILON_SVR)\n\t\tif(param->p < 0)\n\t\t\treturn \"p < 0\";\n\n\tif(param->shrinking != 0 &&\n\t   param->shrinking != 1)\n\t\treturn \"shrinking != 0 and shrinking != 1\";\n\n\tif(param->probability != 0 &&\n\t   param->probability != 1)\n\t\treturn \"probability != 0 and probability != 1\";\n\n\tif(param->probability == 1 &&\n\t   svm_type == ONE_CLASS)\n\t\treturn \"one-class SVM probability output not supported yet\";\n\n\n\t// check whether nu-svc is feasible\n\t\n\tif(svm_type == NU_SVC)\n\t{\n\t\tint l = prob->l;\n\t\tint max_nr_class = 16;\n\t\tint nr_class = 0;\n\t\tint *label = Malloc(int,max_nr_class);\n\t\tint *count = Malloc(int,max_nr_class);\n\n\t\tint i;\n\t\tfor(i=0;i<l;i++)\n\t\t{\n\t\t\tint this_label = (int)prob->y[i];\n\t\t\tint j;\n\t\t\tfor(j=0;j<nr_class;j++)\n\t\t\t\tif(this_label == label[j])\n\t\t\t\t{\n\t\t\t\t\t++count[j];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tif(j == nr_class)\n\t\t\t{\n\t\t\t\tif(nr_class == max_nr_class)\n\t\t\t\t{\n\t\t\t\t\tmax_nr_class *= 2;\n\t\t\t\t\tlabel = (int *)realloc(label,max_nr_class*sizeof(int));\n\t\t\t\t\tcount = (int *)realloc(count,max_nr_class*sizeof(int));\n\t\t\t\t}\n\t\t\t\tlabel[nr_class] = this_label;\n\t\t\t\tcount[nr_class] = 1;\n\t\t\t\t++nr_class;\n\t\t\t}\n\t\t}\n\t\n\t\tfor(i=0;i<nr_class;i++)\n\t\t{\n\t\t\tint n1 = count[i];\n\t\t\tfor(int j=i+1;j<nr_class;j++)\n\t\t\t{\n\t\t\t\tint n2 = count[j];\n\t\t\t\tif(param->nu*(n1+n2)/2 > min(n1,n2))\n\t\t\t\t{\n\t\t\t\t\tfree(label);\n\t\t\t\t\tfree(count);\n\t\t\t\t\treturn \"specified nu is infeasible\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfree(label);\n\t\tfree(count);\n\t}\n\n\treturn NULL;\n}\n\nint svm_check_probability_model(const svm_model *model)\n{\n\treturn ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) &&\n\t\tmodel->probA!=NULL && model->probB!=NULL) ||\n\t\t((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) &&\n\t\t model->probA!=NULL);\n}\n\nvoid svm_set_print_string_function(void (*print_func)(const char *))\n{\n\tif(print_func == NULL)\n\t\tsvm_print_string = &print_string_stdout;\n\telse\n\t\tsvm_print_string = print_func;\n}\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm.def",
    "content": "LIBRARY libsvm\nEXPORTS\n\tsvm_train\t@1\n\tsvm_cross_validation\t@2\n\tsvm_save_model\t@3\n\tsvm_load_model\t@4\n\tsvm_get_svm_type\t@5\n\tsvm_get_nr_class\t@6\n\tsvm_get_labels\t@7\n\tsvm_get_svr_probability\t@8\n\tsvm_predict_values\t@9\n\tsvm_predict\t@10\n\tsvm_predict_probability\t@11\n\tsvm_free_model_content\t@12\n\tsvm_free_and_destroy_model\t@13\n\tsvm_destroy_param\t@14\n\tsvm_check_parameter\t@15\n\tsvm_check_probability_model\t@16\n\tsvm_set_print_string_function\t@17\n\tsvm_get_sv_indices\t@18\n\tsvm_get_nr_sv\t@19\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm.h",
    "content": "#ifndef _LIBSVM_H\n#define _LIBSVM_H\n\n#define LIBSVM_VERSION 319\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern int libsvm_version;\n\nstruct svm_node\n{\n\tint index;\n\tdouble value;\n};\n\nstruct svm_problem\n{\n\tint l;\n\tdouble *y;\n\tstruct svm_node **x;\n};\n\nenum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR };\t/* svm_type */\nenum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */\n\nstruct svm_parameter\n{\n\tint svm_type;\n\tint kernel_type;\n\tint degree;\t/* for poly */\n\tdouble gamma;\t/* for poly/rbf/sigmoid */\n\tdouble coef0;\t/* for poly/sigmoid */\n\n\t/* these are for training only */\n\tdouble cache_size; /* in MB */\n\tdouble eps;\t/* stopping criteria */\n\tdouble C;\t/* for C_SVC, EPSILON_SVR and NU_SVR */\n\tint nr_weight;\t\t/* for C_SVC */\n\tint *weight_label;\t/* for C_SVC */\n\tdouble* weight;\t\t/* for C_SVC */\n\tdouble nu;\t/* for NU_SVC, ONE_CLASS, and NU_SVR */\n\tdouble p;\t/* for EPSILON_SVR */\n\tint shrinking;\t/* use the shrinking heuristics */\n\tint probability; /* do probability estimates */\n};\n\n//\n// svm_model\n// \nstruct svm_model\n{\n\tstruct svm_parameter param;\t/* parameter */\n\tint nr_class;\t\t/* number of classes, = 2 in regression/one class svm */\n\tint l;\t\t\t/* total #SV */\n\tstruct svm_node **SV;\t\t/* SVs (SV[l]) */\n\tdouble **sv_coef;\t/* coefficients for SVs in decision functions (sv_coef[k-1][l]) */\n\tdouble *rho;\t\t/* constants in decision functions (rho[k*(k-1)/2]) */\n\tdouble *probA;\t\t/* pariwise probability information */\n\tdouble *probB;\n\tint *sv_indices;        /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */\n\n\t/* for classification only */\n\n\tint *label;\t\t/* label of each class (label[k]) */\n\tint *nSV;\t\t/* number of SVs for each class (nSV[k]) */\n\t\t\t\t/* nSV[0] + nSV[1] + ... + nSV[k-1] = l */\n\t/* XXX */\n\tint free_sv;\t\t/* 1 if svm_model is created by svm_load_model*/\n\t\t\t\t/* 0 if svm_model is created by svm_train */\n};\n\nstruct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);\nvoid svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target);\n\nint svm_save_model(const char *model_file_name, const struct svm_model *model);\nstruct svm_model *svm_load_model(const char *model_file_name);\n\nint svm_get_svm_type(const struct svm_model *model);\nint svm_get_nr_class(const struct svm_model *model);\nvoid svm_get_labels(const struct svm_model *model, int *label);\nvoid svm_get_sv_indices(const struct svm_model *model, int *sv_indices);\nint svm_get_nr_sv(const struct svm_model *model);\ndouble svm_get_svr_probability(const struct svm_model *model);\n\ndouble svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values);\ndouble svm_predict(const struct svm_model *model, const struct svm_node *x);\ndouble svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates);\n\nvoid svm_free_model_content(struct svm_model *model_ptr);\nvoid svm_free_and_destroy_model(struct svm_model **model_ptr_ptr);\nvoid svm_destroy_param(struct svm_parameter *param);\n\nconst char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param);\nint svm_check_probability_model(const struct svm_model *model);\n\nvoid svm_set_print_string_function(void (*print_func)(const char *));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _LIBSVM_H */\n"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/README",
    "content": "This directory includes some useful codes:\n\n1. subset selection tools.\n2. parameter selection tools.\n3. LIBSVM format checking tools\n\nPart I: Subset selection tools\n\nIntroduction\n============\n\nTraining large data is time consuming. Sometimes one should work on a\nsmaller subset first. The python script subset.py randomly selects a\nspecified number of samples. For classification data, we provide a\nstratified selection to ensure the same class distribution in the\nsubset.\n\nUsage: subset.py [options] dataset number [output1] [output2]\n\nThis script selects a subset of the given data set.\n\noptions:\n-s method : method of selection (default 0)\n     0 -- stratified selection (classification only)\n     1 -- random selection\n\noutput1 : the subset (optional)\noutput2 : the rest of data (optional)\n\nIf output1 is omitted, the subset will be printed on the screen.\n\nExample\n=======\n\n> python subset.py heart_scale 100 file1 file2\n\nFrom heart_scale 100 samples are randomly selected and stored in\nfile1. All remaining instances are stored in file2.\n\n\nPart II: Parameter Selection Tools\n\nIntroduction\n============\n\ngrid.py is a parameter selection tool for C-SVM classification using\nthe RBF (radial basis function) kernel. It uses cross validation (CV)\ntechnique to estimate the accuracy of each parameter combination in\nthe specified range and helps you to decide the best parameters for\nyour problem.\n\ngrid.py directly executes libsvm binaries (so no python binding is needed)\nfor cross validation and then draw contour of CV accuracy using gnuplot.\nYou must have libsvm and gnuplot installed before using it. The package\ngnuplot is available at http://www.gnuplot.info/\n\nOn Mac OSX, the precompiled gnuplot file needs the library Aquarterm,\nwhich thus must be installed as well. In addition, this version of\ngnuplot does not support png, so you need to change \"set term png\ntransparent small\" and use other image formats. For example, you may\nhave \"set term pbm small color\".\n\nUsage: grid.py [grid_options] [svm_options] dataset\n\ngrid_options :\n-log2c {begin,end,step | \"null\"} : set the range of c (default -5,15,2)\n    begin,end,step -- c_range = 2^{begin,...,begin+k*step,...,end}\n    \"null\"         -- do not grid with c\n-log2g {begin,end,step | \"null\"} : set the range of g (default 3,-15,-2)\n    begin,end,step -- g_range = 2^{begin,...,begin+k*step,...,end}\n    \"null\"         -- do not grid with g\n-v n : n-fold cross validation (default 5)\n-svmtrain pathname : set svm executable path and name\n-gnuplot {pathname | \"null\"} :\n    pathname -- set gnuplot executable path and name\n    \"null\"   -- do not plot \n-out {pathname | \"null\"} : (default dataset.out)\n    pathname -- set output file path and name\n    \"null\"   -- do not output file\n-png pathname : set graphic output file path and name (default dataset.png)\n-resume [pathname] : resume the grid task using an existing output file (default pathname is dataset.out)\n    Use this option only if some parameters have been checked for the SAME data.\n\nsvm_options : additional options for svm-train\n\nThe program conducts v-fold cross validation using parameter C (and gamma)\n= 2^begin, 2^(begin+step), ..., 2^end.\n\nYou can specify where the libsvm executable and gnuplot are using the\n-svmtrain and -gnuplot parameters.\n\nFor windows users, please use pgnuplot.exe. If you are using gnuplot\n3.7.1, please upgrade to version 3.7.3 or higher. The version 3.7.1\nhas a bug. If you use cygwin on windows, please use gunplot-x11.\n\nIf the task is terminated accidentally or you would like to change the\nrange of parameters, you can apply '-resume' to save time by re-using\nprevious results.  You may specify the output file of a previous run\nor use the default (i.e., dataset.out) without giving a name. Please\nnote that the same condition must be used in two runs. For example,\nyou cannot use '-v 10' earlier and resume the task with '-v 5'.\n\nThe value of some options can be \"null.\" For example, `-log2c -1,0,1\n-log2 \"null\"' means that C=2^-1,2^0,2^1 and g=LIBSVM's default gamma\nvalue. That is, you do not conduct parameter selection on gamma.\n\nExample\n=======\n\n> python grid.py -log2c -5,5,1 -log2g -4,0,1 -v 5 -m 300 heart_scale\n\nUsers (in particular MS Windows users) may need to specify the path of\nexecutable files. You can either change paths in the beginning of\ngrid.py or specify them in the command line. For example,\n\n> grid.py -log2c -5,5,1 -svmtrain \"c:\\Program Files\\libsvm\\windows\\svm-train.exe\" -gnuplot c:\\tmp\\gnuplot\\binary\\pgnuplot.exe -v 10 heart_scale\n\nOutput: two files\ndataset.png: the CV accuracy contour plot generated by gnuplot\ndataset.out: the CV accuracy at each (log2(C),log2(gamma))\n\nThe following example saves running time by loading the output file of a previous run.\n\n> python grid.py -log2c -7,7,1 -log2g -5,2,1 -v 5 -resume heart_scale.out heart_scale\n\nParallel grid search\n====================\n\nYou can conduct a parallel grid search by dispatching jobs to a\ncluster of computers which share the same file system. First, you add\nmachine names in grid.py:\n\nssh_workers = [\"linux1\", \"linux5\", \"linux5\"]\n\nand then setup your ssh so that the authentication works without\nasking a password.\n\nThe same machine (e.g., linux5 here) can be listed more than once if\nit has multiple CPUs or has more RAM. If the local machine is the\nbest, you can also enlarge the nr_local_worker. For example:\n\nnr_local_worker = 2\n\nExample:\n\n> python grid.py heart_scale\n[local] -1 -1 78.8889  (best c=0.5, g=0.5, rate=78.8889)\n[linux5] -1 -7 83.3333  (best c=0.5, g=0.0078125, rate=83.3333)\n[linux5] 5 -1 77.037  (best c=0.5, g=0.0078125, rate=83.3333)\n[linux1] 5 -7 83.3333  (best c=0.5, g=0.0078125, rate=83.3333)\n.\n.\n.\n\nIf -log2c, -log2g, or -v is not specified, default values are used.\n\nIf your system uses telnet instead of ssh, you list the computer names\nin telnet_workers.\n\nCalling grid in Python\n======================\n\nIn addition to using grid.py as a command-line tool, you can use it as a\nPython module. \n\n>>> rate, param = find_parameters(dataset, options)\n\nYou need to specify `dataset' and `options' (default ''). See the following example.\n\n> python\n\n>>> from grid import *\n>>> rate, param = find_parameters('../heart_scale', '-log2c -1,1,1 -log2g -1,1,1')\n[local] 0.0 0.0 rate=74.8148 (best c=1.0, g=1.0, rate=74.8148)\n[local] 0.0 -1.0 rate=77.037 (best c=1.0, g=0.5, rate=77.037)\n.\n.\n[local] -1.0 -1.0 rate=78.8889 (best c=0.5, g=0.5, rate=78.8889)\n.\n.\n>>> rate\n78.8889\n>>> param\n{'c': 0.5, 'g': 0.5}\n\n\nPart III: LIBSVM format checking tools\n\nIntroduction\n============\n\n`svm-train' conducts only a simple check of the input data. To do a\ndetailed check, we provide a python script `checkdata.py.'\n\nUsage: checkdata.py dataset\n\nExit status (returned value): 1 if there are errors, 0 otherwise.\n\nThis tool is written by Rong-En Fan at National Taiwan University.\n\nExample\n=======\n\n> cat bad_data\n1 3:1 2:4\n> python checkdata.py bad_data\nline 1: feature indices must be in an ascending order, previous/current features 3:1 2:4\nFound 1 lines with error.\n\n\n"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/checkdata.py",
    "content": "#!/usr/bin/env python\n\n#\n# A format checker for LIBSVM\n#\n\n#\n# Copyright (c) 2007, Rong-En Fan\n#\n# All rights reserved.\n#\n# This program is distributed under the same license of the LIBSVM package.\n# \n\nfrom sys import argv, exit\nimport os.path\n\ndef err(line_no, msg):\n\tprint(\"line {0}: {1}\".format(line_no, msg))\n\n# works like float() but does not accept nan and inf\ndef my_float(x):\n\tif x.lower().find(\"nan\") != -1 or x.lower().find(\"inf\") != -1:\n\t\traise ValueError\n\n\treturn float(x)\n\ndef main():\n\tif len(argv) != 2:\n\t\tprint(\"Usage: {0} dataset\".format(argv[0]))\n\t\texit(1)\n\n\tdataset = argv[1]\n\n\tif not os.path.exists(dataset):\n\t\tprint(\"dataset {0} not found\".format(dataset))\n\t\texit(1)\n\n\tline_no = 1\n\terror_line_count = 0\n\tfor line in open(dataset, 'r'):\n\t\tline_error = False\n\n\t\t# each line must end with a newline character\n\t\tif line[-1] != '\\n':\n\t\t\terr(line_no, \"missing a newline character in the end\")\n\t\t\tline_error = True\n\n\t\tnodes = line.split()\n\n\t\t# check label\n\t\ttry:\n\t\t\tlabel = nodes.pop(0)\n\t\t\t\n\t\t\tif label.find(',') != -1:\n\t\t\t\t# multi-label format\n\t\t\t\ttry:\n\t\t\t\t\tfor l in label.split(','):\n\t\t\t\t\t\tl = my_float(l)\n\t\t\t\texcept:\n\t\t\t\t\terr(line_no, \"label {0} is not a valid multi-label form\".format(label))\n\t\t\t\t\tline_error = True\n\t\t\telse:\n\t\t\t\ttry:\n\t\t\t\t\tlabel = my_float(label)\n\t\t\t\texcept:\n\t\t\t\t\terr(line_no, \"label {0} is not a number\".format(label))\n\t\t\t\t\tline_error = True\n\t\texcept:\n\t\t\terr(line_no, \"missing label, perhaps an empty line?\")\n\t\t\tline_error = True\n\n\t\t# check features\n\t\tprev_index = -1\n\t\tfor i in range(len(nodes)):\n\t\t\ttry:\n\t\t\t\t(index, value) =  nodes[i].split(':')\n\n\t\t\t\tindex = int(index)\n\t\t\t\tvalue = my_float(value)\n\n\t\t\t\t# precomputed kernel's index starts from 0 and LIBSVM\n\t\t\t\t# checks it. Hence, don't treat index 0 as an error.\n\t\t\t\tif index < 0:\n\t\t\t\t\terr(line_no, \"feature index must be positive; wrong feature {0}\".format(nodes[i]))\n\t\t\t\t\tline_error = True\n\t\t\t\telif index <= prev_index:\n\t\t\t\t\terr(line_no, \"feature indices must be in an ascending order, previous/current features {0} {1}\".format(nodes[i-1], nodes[i]))\n\t\t\t\t\tline_error = True\n\t\t\t\tprev_index = index\n\t\t\texcept:\n\t\t\t\terr(line_no, \"feature '{0}' not an <index>:<value> pair, <index> integer, <value> real number \".format(nodes[i]))\n\t\t\t\tline_error = True\n\n\t\tline_no += 1\n\n\t\tif line_error:\n\t\t\terror_line_count += 1\n\t\n\tif error_line_count > 0:\n\t\tprint(\"Found {0} lines with error.\".format(error_line_count))\n\t\treturn 1\n\telse:\n\t\tprint(\"No error.\")\n\t\treturn 0\n\nif __name__ == \"__main__\":\n\texit(main())\n"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/easy.py",
    "content": "#!/usr/bin/env python\n\nimport sys\nimport os\nfrom subprocess import *\n\nif len(sys.argv) <= 1:\n\tprint('Usage: {0} training_file [testing_file]'.format(sys.argv[0]))\n\traise SystemExit\n\n# svm, grid, and gnuplot executable files\n\nis_win32 = (sys.platform == 'win32')\nif not is_win32:\n\tsvmscale_exe = \"../svm-scale\"\n\tsvmtrain_exe = \"../svm-train\"\n\tsvmpredict_exe = \"../svm-predict\"\n\tgrid_py = \"./grid.py\"\n\tgnuplot_exe = \"/usr/bin/gnuplot\"\nelse:\n        # example for windows\n\tsvmscale_exe = r\"..\\windows\\svm-scale.exe\"\n\tsvmtrain_exe = r\"..\\windows\\svm-train.exe\"\n\tsvmpredict_exe = r\"..\\windows\\svm-predict.exe\"\n\tgnuplot_exe = r\"c:\\tmp\\gnuplot\\binary\\pgnuplot.exe\"\n\tgrid_py = r\".\\grid.py\"\n\nassert os.path.exists(svmscale_exe),\"svm-scale executable not found\"\nassert os.path.exists(svmtrain_exe),\"svm-train executable not found\"\nassert os.path.exists(svmpredict_exe),\"svm-predict executable not found\"\nassert os.path.exists(gnuplot_exe),\"gnuplot executable not found\"\nassert os.path.exists(grid_py),\"grid.py not found\"\n\ntrain_pathname = sys.argv[1]\nassert os.path.exists(train_pathname),\"training file not found\"\nfile_name = os.path.split(train_pathname)[1]\nscaled_file = file_name + \".scale\"\nmodel_file = file_name + \".model\"\nrange_file = file_name + \".range\"\n\nif len(sys.argv) > 2:\n\ttest_pathname = sys.argv[2]\n\tfile_name = os.path.split(test_pathname)[1]\n\tassert os.path.exists(test_pathname),\"testing file not found\"\n\tscaled_test_file = file_name + \".scale\"\n\tpredict_test_file = file_name + \".predict\"\n\ncmd = '{0} -s \"{1}\" \"{2}\" > \"{3}\"'.format(svmscale_exe, range_file, train_pathname, scaled_file)\nprint('Scaling training data...')\nPopen(cmd, shell = True, stdout = PIPE).communicate()\t\n\ncmd = '{0} -svmtrain \"{1}\" -gnuplot \"{2}\" \"{3}\"'.format(grid_py, svmtrain_exe, gnuplot_exe, scaled_file)\nprint('Cross validation...')\nf = Popen(cmd, shell = True, stdout = PIPE).stdout\n\nline = ''\nwhile True:\n\tlast_line = line\n\tline = f.readline()\n\tif not line: break\nc,g,rate = map(float,last_line.split())\n\nprint('Best c={0}, g={1} CV rate={2}'.format(c,g,rate))\n\ncmd = '{0} -c {1} -g {2} \"{3}\" \"{4}\"'.format(svmtrain_exe,c,g,scaled_file,model_file)\nprint('Training...')\nPopen(cmd, shell = True, stdout = PIPE).communicate()\n\nprint('Output model: {0}'.format(model_file))\nif len(sys.argv) > 2:\n\tcmd = '{0} -r \"{1}\" \"{2}\" > \"{3}\"'.format(svmscale_exe, range_file, test_pathname, scaled_test_file)\n\tprint('Scaling testing data...')\n\tPopen(cmd, shell = True, stdout = PIPE).communicate()\t\n\n\tcmd = '{0} \"{1}\" \"{2}\" \"{3}\"'.format(svmpredict_exe, scaled_test_file, model_file, predict_test_file)\n\tprint('Testing...')\n\tPopen(cmd, shell = True).communicate()\t\n\n\tprint('Output prediction: {0}'.format(predict_test_file))\n"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/grid.py",
    "content": "#!/usr/bin/env python\n__all__ = ['find_parameters']\n\nimport os, sys, traceback, getpass, time, re\nfrom threading import Thread\nfrom subprocess import *\n\nif sys.version_info[0] < 3:\n\tfrom Queue import Queue\nelse:\n\tfrom queue import Queue\n\ntelnet_workers = []\nssh_workers = []\nnr_local_worker = 1\n\nclass GridOption:\n\tdef __init__(self, dataset_pathname, options):\n\t\tdirname = os.path.dirname(__file__)\n\t\tif sys.platform != 'win32':\n\t\t\tself.svmtrain_pathname = os.path.join(dirname, '../svm-train')\n\t\t\tself.gnuplot_pathname = '/usr/bin/gnuplot'\n\t\telse:\n\t\t\t# example for windows\n\t\t\tself.svmtrain_pathname = os.path.join(dirname, r'..\\windows\\svm-train.exe')\n\t\t\t# svmtrain_pathname = r'c:\\Program Files\\libsvm\\windows\\svm-train.exe'\n\t\t\tself.gnuplot_pathname = r'c:\\tmp\\gnuplot\\binary\\pgnuplot.exe'\n\t\tself.fold = 5\n\t\tself.c_begin, self.c_end, self.c_step = -5,  15,  2\n\t\tself.g_begin, self.g_end, self.g_step =  3, -15, -2\n\t\tself.grid_with_c, self.grid_with_g = True, True\n\t\tself.dataset_pathname = dataset_pathname\n\t\tself.dataset_title = os.path.split(dataset_pathname)[1]\n\t\tself.out_pathname = '{0}.out'.format(self.dataset_title)\n\t\tself.png_pathname = '{0}.png'.format(self.dataset_title)\n\t\tself.pass_through_string = ' '\n\t\tself.resume_pathname = None\n\t\tself.parse_options(options)\n\n\tdef parse_options(self, options):\n\t\tif type(options) == str:\n\t\t\toptions = options.split()\n\t\ti = 0\n\t\tpass_through_options = []\n\t\t\n\t\twhile i < len(options):\n\t\t\tif options[i] == '-log2c':\n\t\t\t\ti = i + 1\n\t\t\t\tif options[i] == 'null':\n\t\t\t\t\tself.grid_with_c = False\n\t\t\t\telse:\n\t\t\t\t\tself.c_begin, self.c_end, self.c_step = map(float,options[i].split(','))\n\t\t\telif options[i] == '-log2g':\n\t\t\t\ti = i + 1\n\t\t\t\tif options[i] == 'null':\n\t\t\t\t\tself.grid_with_g = False\n\t\t\t\telse:\n\t\t\t\t\tself.g_begin, self.g_end, self.g_step = map(float,options[i].split(','))\n\t\t\telif options[i] == '-v':\n\t\t\t\ti = i + 1\n\t\t\t\tself.fold = options[i]\n\t\t\telif options[i] in ('-c','-g'):\n\t\t\t\traise ValueError('Use -log2c and -log2g.')\n\t\t\telif options[i] == '-svmtrain':\n\t\t\t\ti = i + 1\n\t\t\t\tself.svmtrain_pathname = options[i]\n\t\t\telif options[i] == '-gnuplot':\n\t\t\t\ti = i + 1\n\t\t\t\tif options[i] == 'null':\n\t\t\t\t\tself.gnuplot_pathname = None\n\t\t\t\telse:\t\n\t\t\t\t\tself.gnuplot_pathname = options[i]\n\t\t\telif options[i] == '-out':\n\t\t\t\ti = i + 1\n\t\t\t\tif options[i] == 'null':\n\t\t\t\t\tself.out_pathname = None\n\t\t\t\telse:\n\t\t\t\t\tself.out_pathname = options[i]\n\t\t\telif options[i] == '-png':\n\t\t\t\ti = i + 1\n\t\t\t\tself.png_pathname = options[i]\n\t\t\telif options[i] == '-resume':\n\t\t\t\tif i == (len(options)-1) or options[i+1].startswith('-'):\n\t\t\t\t\tself.resume_pathname = self.dataset_title + '.out'\n\t\t\t\telse:\n\t\t\t\t\ti = i + 1\n\t\t\t\t\tself.resume_pathname = options[i]\n\t\t\telse:\n\t\t\t\tpass_through_options.append(options[i])\n\t\t\ti = i + 1\n\n\t\tself.pass_through_string = ' '.join(pass_through_options)\n\t\tif not os.path.exists(self.svmtrain_pathname):\n\t\t\traise IOError('svm-train executable not found')\n\t\tif not os.path.exists(self.dataset_pathname):\n\t\t\traise IOError('dataset not found')\n\t\tif self.resume_pathname and not os.path.exists(self.resume_pathname):\n\t\t\traise IOError('file for resumption not found')\n\t\tif not self.grid_with_c and not self.grid_with_g:\n\t\t\traise ValueError('-log2c and -log2g should not be null simultaneously')\n\t\tif self.gnuplot_pathname and not os.path.exists(self.gnuplot_pathname):\n\t\t\tsys.stderr.write('gnuplot executable not found\\n')\n\t\t\tself.gnuplot_pathname = None\n\ndef redraw(db,best_param,gnuplot,options,tofile=False):\n\tif len(db) == 0: return\n\tbegin_level = round(max(x[2] for x in db)) - 3\n\tstep_size = 0.5\n\n\tbest_log2c,best_log2g,best_rate = best_param\n\n\t# if newly obtained c, g, or cv values are the same,\n\t# then stop redrawing the contour.\n\tif all(x[0] == db[0][0]  for x in db): return\n\tif all(x[1] == db[0][1]  for x in db): return\n\tif all(x[2] == db[0][2]  for x in db): return\n\n\tif tofile:\n\t\tgnuplot.write(b\"set term png transparent small linewidth 2 medium enhanced\\n\")\n\t\tgnuplot.write(\"set output \\\"{0}\\\"\\n\".format(options.png_pathname.replace('\\\\','\\\\\\\\')).encode())\n\t\t#gnuplot.write(b\"set term postscript color solid\\n\")\n\t\t#gnuplot.write(\"set output \\\"{0}.ps\\\"\\n\".format(options.dataset_title).encode().encode())\n\telif sys.platform == 'win32':\n\t\tgnuplot.write(b\"set term windows\\n\")\n\telse:\n\t\tgnuplot.write( b\"set term x11\\n\")\n\tgnuplot.write(b\"set xlabel \\\"log2(C)\\\"\\n\")\n\tgnuplot.write(b\"set ylabel \\\"log2(gamma)\\\"\\n\")\n\tgnuplot.write(\"set xrange [{0}:{1}]\\n\".format(options.c_begin,options.c_end).encode())\n\tgnuplot.write(\"set yrange [{0}:{1}]\\n\".format(options.g_begin,options.g_end).encode())\n\tgnuplot.write(b\"set contour\\n\")\n\tgnuplot.write(\"set cntrparam levels incremental {0},{1},100\\n\".format(begin_level,step_size).encode())\n\tgnuplot.write(b\"unset surface\\n\")\n\tgnuplot.write(b\"unset ztics\\n\")\n\tgnuplot.write(b\"set view 0,0\\n\")\n\tgnuplot.write(\"set title \\\"{0}\\\"\\n\".format(options.dataset_title).encode())\n\tgnuplot.write(b\"unset label\\n\")\n\tgnuplot.write(\"set label \\\"Best log2(C) = {0}  log2(gamma) = {1}  accuracy = {2}%\\\" \\\n\t\t\t\t  at screen 0.5,0.85 center\\n\". \\\n\t\t\t\t  format(best_log2c, best_log2g, best_rate).encode())\n\tgnuplot.write(\"set label \\\"C = {0}  gamma = {1}\\\"\"\n\t\t\t\t  \" at screen 0.5,0.8 center\\n\".format(2**best_log2c, 2**best_log2g).encode())\n\tgnuplot.write(b\"set key at screen 0.9,0.9\\n\")\n\tgnuplot.write(b\"splot \\\"-\\\" with lines\\n\")\n\t\n\tdb.sort(key = lambda x:(x[0], -x[1]))\n\n\tprevc = db[0][0]\n\tfor line in db:\n\t\tif prevc != line[0]:\n\t\t\tgnuplot.write(b\"\\n\")\n\t\t\tprevc = line[0]\n\t\tgnuplot.write(\"{0[0]} {0[1]} {0[2]}\\n\".format(line).encode())\n\tgnuplot.write(b\"e\\n\")\n\tgnuplot.write(b\"\\n\") # force gnuplot back to prompt when term set failure\n\tgnuplot.flush()\n\n\ndef calculate_jobs(options):\n\t\n\tdef range_f(begin,end,step):\n\t\t# like range, but works on non-integer too\n\t\tseq = []\n\t\twhile True:\n\t\t\tif step > 0 and begin > end: break\n\t\t\tif step < 0 and begin < end: break\n\t\t\tseq.append(begin)\n\t\t\tbegin = begin + step\n\t\treturn seq\n\t\n\tdef permute_sequence(seq):\n\t\tn = len(seq)\n\t\tif n <= 1: return seq\n\t\n\t\tmid = int(n/2)\n\t\tleft = permute_sequence(seq[:mid])\n\t\tright = permute_sequence(seq[mid+1:])\n\t\n\t\tret = [seq[mid]]\n\t\twhile left or right:\n\t\t\tif left: ret.append(left.pop(0))\n\t\t\tif right: ret.append(right.pop(0))\n\t\t\t\n\t\treturn ret\t\n\n\t\n\tc_seq = permute_sequence(range_f(options.c_begin,options.c_end,options.c_step))\n\tg_seq = permute_sequence(range_f(options.g_begin,options.g_end,options.g_step))\n\n\tif not options.grid_with_c:\n\t\tc_seq = [None]\n\tif not options.grid_with_g:\n\t\tg_seq = [None] \n\t\n\tnr_c = float(len(c_seq))\n\tnr_g = float(len(g_seq))\n\ti, j = 0, 0\n\tjobs = []\n\n\twhile i < nr_c or j < nr_g:\n\t\tif i/nr_c < j/nr_g:\n\t\t\t# increase C resolution\n\t\t\tline = []\n\t\t\tfor k in range(0,j):\n\t\t\t\tline.append((c_seq[i],g_seq[k]))\n\t\t\ti = i + 1\n\t\t\tjobs.append(line)\n\t\telse:\n\t\t\t# increase g resolution\n\t\t\tline = []\n\t\t\tfor k in range(0,i):\n\t\t\t\tline.append((c_seq[k],g_seq[j]))\n\t\t\tj = j + 1\n\t\t\tjobs.append(line)\n\n\tresumed_jobs = {}\n\t\n\tif options.resume_pathname is None:\n\t\treturn jobs, resumed_jobs\n\n\tfor line in open(options.resume_pathname, 'r'):\n\t\tline = line.strip()\n\t\trst = re.findall(r'rate=([0-9.]+)',line)\n\t\tif not rst: \n\t\t\tcontinue\n\t\trate = float(rst[0])\n\n\t\tc, g = None, None \n\t\trst = re.findall(r'log2c=([0-9.-]+)',line)\n\t\tif rst: \n\t\t\tc = float(rst[0])\n\t\trst = re.findall(r'log2g=([0-9.-]+)',line)\n\t\tif rst: \n\t\t\tg = float(rst[0])\n\n\t\tresumed_jobs[(c,g)] = rate\n\n\treturn jobs, resumed_jobs\n\n\t\nclass WorkerStopToken:  # used to notify the worker to stop or if a worker is dead\n\tpass\n\nclass Worker(Thread):\n\tdef __init__(self,name,job_queue,result_queue,options):\n\t\tThread.__init__(self)\n\t\tself.name = name\n\t\tself.job_queue = job_queue\n\t\tself.result_queue = result_queue\n\t\tself.options = options\n\t\t\n\tdef run(self):\n\t\twhile True:\n\t\t\t(cexp,gexp) = self.job_queue.get()\n\t\t\tif cexp is WorkerStopToken:\n\t\t\t\tself.job_queue.put((cexp,gexp))\n\t\t\t\t# print('worker {0} stop.'.format(self.name))\n\t\t\t\tbreak\n\t\t\ttry:\n\t\t\t\tc, g = None, None\n\t\t\t\tif cexp != None:\n\t\t\t\t\tc = 2.0**cexp\n\t\t\t\tif gexp != None:\n\t\t\t\t\tg = 2.0**gexp\n\t\t\t\trate = self.run_one(c,g)\n\t\t\t\tif rate is None: raise RuntimeError('get no rate')\n\t\t\texcept:\n\t\t\t\t# we failed, let others do that and we just quit\n\t\t\t\n\t\t\t\ttraceback.print_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])\n\t\t\t\t\n\t\t\t\tself.job_queue.put((cexp,gexp))\n\t\t\t\tsys.stderr.write('worker {0} quit.\\n'.format(self.name))\n\t\t\t\tbreak\n\t\t\telse:\n\t\t\t\tself.result_queue.put((self.name,cexp,gexp,rate))\n\n\tdef get_cmd(self,c,g):\n\t\toptions=self.options\n\t\tcmdline = '\"' + options.svmtrain_pathname + '\"'\n\t\tif options.grid_with_c: \n\t\t\tcmdline += ' -c {0} '.format(c)\n\t\tif options.grid_with_g: \n\t\t\tcmdline += ' -g {0} '.format(g)\n\t\tcmdline += ' -v {0} {1} {2} '.format\\\n\t\t\t(options.fold,options.pass_through_string,options.dataset_pathname)\n\t\treturn cmdline\n\t\t\nclass LocalWorker(Worker):\n\tdef run_one(self,c,g):\n\t\tcmdline = self.get_cmd(c,g)\n\t\tresult = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout\n\t\tfor line in result.readlines():\n\t\t\tif str(line).find('Cross') != -1:\n\t\t\t\treturn float(line.split()[-1][0:-1])\n\nclass SSHWorker(Worker):\n\tdef __init__(self,name,job_queue,result_queue,host,options):\n\t\tWorker.__init__(self,name,job_queue,result_queue,options)\n\t\tself.host = host\n\t\tself.cwd = os.getcwd()\n\tdef run_one(self,c,g):\n\t\tcmdline = 'ssh -x -t -t {0} \"cd {1}; {2}\"'.format\\\n\t\t\t(self.host,self.cwd,self.get_cmd(c,g))\n\t\tresult = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout\n\t\tfor line in result.readlines():\n\t\t\tif str(line).find('Cross') != -1:\n\t\t\t\treturn float(line.split()[-1][0:-1])\n\nclass TelnetWorker(Worker):\n\tdef __init__(self,name,job_queue,result_queue,host,username,password,options):\n\t\tWorker.__init__(self,name,job_queue,result_queue,options)\n\t\tself.host = host\n\t\tself.username = username\n\t\tself.password = password\t\t\n\tdef run(self):\n\t\timport telnetlib\n\t\tself.tn = tn = telnetlib.Telnet(self.host)\n\t\ttn.read_until('login: ')\n\t\ttn.write(self.username + '\\n')\n\t\ttn.read_until('Password: ')\n\t\ttn.write(self.password + '\\n')\n\n\t\t# XXX: how to know whether login is successful?\n\t\ttn.read_until(self.username)\n\t\t# \n\t\tprint('login ok', self.host)\n\t\ttn.write('cd '+os.getcwd()+'\\n')\n\t\tWorker.run(self)\n\t\ttn.write('exit\\n')\t\t\t   \n\tdef run_one(self,c,g):\n\t\tcmdline = self.get_cmd(c,g)\n\t\tresult = self.tn.write(cmdline+'\\n')\n\t\t(idx,matchm,output) = self.tn.expect(['Cross.*\\n'])\n\t\tfor line in output.split('\\n'):\n\t\t\tif str(line).find('Cross') != -1:\n\t\t\t\treturn float(line.split()[-1][0:-1])\n\t\t\t\ndef find_parameters(dataset_pathname, options=''):\n\t\n\tdef update_param(c,g,rate,best_c,best_g,best_rate,worker,resumed):\n\t\tif (rate > best_rate) or (rate==best_rate and g==best_g and c<best_c):\n\t\t\tbest_rate,best_c,best_g = rate,c,g\n\t\tstdout_str = '[{0}] {1} {2} (best '.format\\\n\t\t\t(worker,' '.join(str(x) for x in [c,g] if x is not None),rate)\n\t\toutput_str = ''\n\t\tif c != None:\n\t\t\tstdout_str += 'c={0}, '.format(2.0**best_c)\n\t\t\toutput_str += 'log2c={0} '.format(c)\n\t\tif g != None:\n\t\t\tstdout_str += 'g={0}, '.format(2.0**best_g)\n\t\t\toutput_str += 'log2g={0} '.format(g)\n\t\tstdout_str += 'rate={0})'.format(best_rate)\n\t\tprint(stdout_str)\n\t\tif options.out_pathname and not resumed:\n\t\t\toutput_str += 'rate={0}\\n'.format(rate)\n\t\t\tresult_file.write(output_str)\n\t\t\tresult_file.flush()\n\t\t\n\t\treturn best_c,best_g,best_rate\n\t\t\n\toptions = GridOption(dataset_pathname, options);\n\n\tif options.gnuplot_pathname:\n\t\tgnuplot = Popen(options.gnuplot_pathname,stdin = PIPE,stdout=PIPE,stderr=PIPE).stdin\n\telse:\n\t\tgnuplot = None\n\t\t\n\t# put jobs in queue\n\n\tjobs,resumed_jobs = calculate_jobs(options)\n\tjob_queue = Queue(0)\n\tresult_queue = Queue(0)\n\n\tfor (c,g) in resumed_jobs:\n\t\tresult_queue.put(('resumed',c,g,resumed_jobs[(c,g)]))\n\n\tfor line in jobs:\n\t\tfor (c,g) in line:\n\t\t\tif (c,g) not in resumed_jobs:\n\t\t\t\tjob_queue.put((c,g))\n\n\t# hack the queue to become a stack --\n\t# this is important when some thread\n\t# failed and re-put a job. It we still\n\t# use FIFO, the job will be put\n\t# into the end of the queue, and the graph\n\t# will only be updated in the end\n \n\tjob_queue._put = job_queue.queue.appendleft\n\n\t# fire telnet workers\n\n\tif telnet_workers:\n\t\tnr_telnet_worker = len(telnet_workers)\n\t\tusername = getpass.getuser()\n\t\tpassword = getpass.getpass()\n\t\tfor host in telnet_workers:\n\t\t\tworker = TelnetWorker(host,job_queue,result_queue,\n\t\t\t\t\t host,username,password,options)\n\t\t\tworker.start()\n\n\t# fire ssh workers\n\n\tif ssh_workers:\n\t\tfor host in ssh_workers:\n\t\t\tworker = SSHWorker(host,job_queue,result_queue,host,options)\n\t\t\tworker.start()\n\n\t# fire local workers\n\n\tfor i in range(nr_local_worker):\n\t\tworker = LocalWorker('local',job_queue,result_queue,options)\n\t\tworker.start()\n\n\t# gather results\n\n\tdone_jobs = {}\n\n\tif options.out_pathname:\n\t\tif options.resume_pathname:\n\t\t\tresult_file = open(options.out_pathname, 'a')\n\t\telse:\n\t\t\tresult_file = open(options.out_pathname, 'w')\n\n\n\tdb = []\n\tbest_rate = -1\n\tbest_c,best_g = None,None  \n\n\tfor (c,g) in resumed_jobs:\n\t\trate = resumed_jobs[(c,g)]\n\t\tbest_c,best_g,best_rate = update_param(c,g,rate,best_c,best_g,best_rate,'resumed',True)\n\n\tfor line in jobs:\n\t\tfor (c,g) in line:\n\t\t\twhile (c,g) not in done_jobs:\n\t\t\t\t(worker,c1,g1,rate1) = result_queue.get()\n\t\t\t\tdone_jobs[(c1,g1)] = rate1\n\t\t\t\tif (c1,g1) not in resumed_jobs:\n\t\t\t\t\tbest_c,best_g,best_rate = update_param(c1,g1,rate1,best_c,best_g,best_rate,worker,False)\n\t\t\tdb.append((c,g,done_jobs[(c,g)]))\n\t\tif gnuplot and options.grid_with_c and options.grid_with_g:\n\t\t\tredraw(db,[best_c, best_g, best_rate],gnuplot,options)\n\t\t\tredraw(db,[best_c, best_g, best_rate],gnuplot,options,True)\n\n\n\tif options.out_pathname:\n\t\tresult_file.close()\n\tjob_queue.put((WorkerStopToken,None))\n\tbest_param, best_cg  = {}, []\n\tif best_c != None:\n\t\tbest_param['c'] = 2.0**best_c\n\t\tbest_cg += [2.0**best_c]\n\tif best_g != None:\n\t\tbest_param['g'] = 2.0**best_g\n\t\tbest_cg += [2.0**best_g]\n\tprint('{0} {1}'.format(' '.join(map(str,best_cg)), best_rate))\n\n\treturn best_rate, best_param\n\n\nif __name__ == '__main__':\n\n\tdef exit_with_help():\n\t\tprint(\"\"\"\\\nUsage: grid.py [grid_options] [svm_options] dataset\n\ngrid_options :\n-log2c {begin,end,step | \"null\"} : set the range of c (default -5,15,2)\n    begin,end,step -- c_range = 2^{begin,...,begin+k*step,...,end}\n    \"null\"         -- do not grid with c\n-log2g {begin,end,step | \"null\"} : set the range of g (default 3,-15,-2)\n    begin,end,step -- g_range = 2^{begin,...,begin+k*step,...,end}\n    \"null\"         -- do not grid with g\n-v n : n-fold cross validation (default 5)\n-svmtrain pathname : set svm executable path and name\n-gnuplot {pathname | \"null\"} :\n    pathname -- set gnuplot executable path and name\n    \"null\"   -- do not plot \n-out {pathname | \"null\"} : (default dataset.out)\n    pathname -- set output file path and name\n    \"null\"   -- do not output file\n-png pathname : set graphic output file path and name (default dataset.png)\n-resume [pathname] : resume the grid task using an existing output file (default pathname is dataset.out)\n    This is experimental. Try this option only if some parameters have been checked for the SAME data.\n\nsvm_options : additional options for svm-train\"\"\")\n\t\tsys.exit(1)\n\t\n\tif len(sys.argv) < 2:\n\t\texit_with_help()\n\tdataset_pathname = sys.argv[-1]\n\toptions = sys.argv[1:-1]\n\ttry:\n\t\tfind_parameters(dataset_pathname, options)\n\texcept (IOError,ValueError) as e:\n\t\tsys.stderr.write(str(e) + '\\n')\n\t\tsys.stderr.write('Try \"grid.py\" for more information.\\n')\n\t\tsys.exit(1)\n"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/subset.py",
    "content": "#!/usr/bin/env python\n\nimport os, sys, math, random\nfrom collections import defaultdict\n\nif sys.version_info[0] >= 3:\n\txrange = range\n\ndef exit_with_help(argv):\n\tprint(\"\"\"\\\nUsage: {0} [options] dataset subset_size [output1] [output2]\n\nThis script randomly selects a subset of the dataset.\n\noptions:\n-s method : method of selection (default 0)\n     0 -- stratified selection (classification only)\n     1 -- random selection\n\noutput1 : the subset (optional)\noutput2 : rest of the data (optional)\nIf output1 is omitted, the subset will be printed on the screen.\"\"\".format(argv[0]))\n\texit(1)\n\ndef process_options(argv):\n\targc = len(argv)\n\tif argc < 3:\n\t\texit_with_help(argv)\n\n\t# default method is stratified selection\n\tmethod = 0  \n\tsubset_file = sys.stdout\n\trest_file = None\n\n\ti = 1\n\twhile i < argc:\n\t\tif argv[i][0] != \"-\":\n\t\t\tbreak\n\t\tif argv[i] == \"-s\":\n\t\t\ti = i + 1\n\t\t\tmethod = int(argv[i])\n\t\t\tif method not in [0,1]:\n\t\t\t\tprint(\"Unknown selection method {0}\".format(method))\n\t\t\t\texit_with_help(argv)\n\t\ti = i + 1\n\n\tdataset = argv[i]\n\tsubset_size = int(argv[i+1])\n\tif i+2 < argc:\n\t\tsubset_file = open(argv[i+2],'w')\n\tif i+3 < argc:\n\t\trest_file = open(argv[i+3],'w')\n\n\treturn dataset, subset_size, method, subset_file, rest_file\n\ndef random_selection(dataset, subset_size):\n\tl = sum(1 for line in open(dataset,'r'))\n\treturn sorted(random.sample(xrange(l), subset_size))\n\ndef stratified_selection(dataset, subset_size):\n\tlabels = [line.split(None,1)[0] for line in open(dataset)]\n\tlabel_linenums = defaultdict(list)\n\tfor i, label in enumerate(labels):\n\t\tlabel_linenums[label] += [i]\n\n\tl = len(labels)\n\tremaining = subset_size\n\tret = []\n\n\t# classes with fewer data are sampled first; otherwise\n\t# some rare classes may not be selected\n\tfor label in sorted(label_linenums, key=lambda x: len(label_linenums[x])):\n\t\tlinenums = label_linenums[label]\n\t\tlabel_size = len(linenums) \n\t\t# at least one instance per class\n\t\ts = int(min(remaining, max(1, math.ceil(label_size*(float(subset_size)/l)))))\n\t\tif s == 0:\n\t\t\tsys.stderr.write('''\\\nError: failed to have at least one instance per class\n    1. You may have regression data.\n    2. Your classification data is unbalanced or too small.\nPlease use -s 1.\n''')\n\t\t\tsys.exit(-1)\n\t\tremaining -= s\n\t\tret += [linenums[i] for i in random.sample(xrange(label_size), s)]\n\treturn sorted(ret)\n\ndef main(argv=sys.argv):\n\tdataset, subset_size, method, subset_file, rest_file = process_options(argv)\n\t#uncomment the following line to fix the random seed \n\t#random.seed(0)\n\tselected_lines = []\n\n\tif method == 0:\n\t\tselected_lines = stratified_selection(dataset, subset_size)\n\telif method == 1:\n\t\tselected_lines = random_selection(dataset, subset_size)\n\n\t#select instances based on selected_lines\n\tdataset = open(dataset,'r')\n\tprev_selected_linenum = -1\n\tfor i in xrange(len(selected_lines)):\n\t\tfor cnt in xrange(selected_lines[i]-prev_selected_linenum-1):\n\t\t\tline = dataset.readline()\n\t\t\tif rest_file: \n\t\t\t\trest_file.write(line)\n\t\tsubset_file.write(dataset.readline())\n\t\tprev_selected_linenum = selected_lines[i]\n\tsubset_file.close()\n\n\tif rest_file:\n\t\tfor line in dataset: \n\t\t\trest_file.write(line)\n\t\trest_file.close()\n\tdataset.close()\n\nif __name__ == '__main__':\n\tmain(sys.argv)\n\n"
  },
  {
    "path": "README.md",
    "content": "# Face_Liveness_Detection\n\n## Matlab\n\nNUAA database is included in Matlab folder. PRINT-ATTACK database can be downloaded at http://www.idiap.ch/dataset/printattack. CASIA database can be downloaded at http://www.cbsr.ia.ac.cn/english/FaceAntiSpoofDatabases.asp. \n\nLibSVM, LBP and HOOF toolboxes are included in Matlab folder. \n\nAll *Train.m files are used for training and all *Test.m files are used for testing. Models are not uploaded. \n\n## C++\n\nLBP toolbox is included\n\nSVM model for NUAA dataset is included\n"
  }
]