master 9e92d3353e8a cached
178 files
35.0 MB
679.6k tokens
599 symbols
1 requests
Download .txt
Showing preview only (1,660K chars total). Download the full file or copy to clipboard to get everything.
Repository: allenyangyl/Face_Liveness_Detection
Branch: master
Commit: 9e92d3353e8a
Files: 178
Total size: 35.0 MB

Directory structure:
gitextract_0t6fbsbr/

├── C++/
│   ├── README.txt
│   ├── lbp/
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE
│   │   ├── histogram.cpp
│   │   ├── histogram.hpp
│   │   ├── lbp.cpp
│   │   ├── lbp.hpp
│   │   ├── main.cpp
│   │   ├── mapping_n16.txt
│   │   └── mapping_n8.txt
│   ├── liveness.cpp
│   ├── liveness.h
│   ├── svm_minmax_NUAA.txt
│   ├── svm_model_NUAA
│   └── test.cpp
├── Matlab/
│   ├── DoG.m
│   ├── DoGLBP_Test.m
│   ├── DoG_CASIA_Test.m
│   ├── DoG_CASIA_Train.m
│   ├── DoG_LBP_All_Train.m
│   ├── DoG_LBP_CASIA_Test.m
│   ├── DoG_LBP_CASIA_Train.m
│   ├── DoG_LBP_NUAA_Test.m
│   ├── DoG_LBP_NUAA_Train.m
│   ├── DoG_LBP_PRINT_ATTACK_Test.m
│   ├── DoG_LBP_PRINT_ATTACK_Train.m
│   ├── DoG_NUAA_Test.m
│   ├── DoG_NUAA_Train.m
│   ├── DoG_PRINT_ATTACK_Test.m
│   ├── DoG_PRINT_ATTACK_Train.m
│   ├── HFD.m
│   ├── HFDTest.m
│   ├── HFDTrain.m
│   ├── HOOF/
│   │   ├── README
│   │   ├── README~
│   │   ├── chiSquareDist.m
│   │   ├── computeDistanceModularHistogram.m
│   │   ├── computeDistanceOrdinalHistogram.m
│   │   ├── computeDistancesBetweenKPCASystems.m
│   │   ├── findSubspaceAnglesBetweenKPCASystems.m
│   │   ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv
│   │   ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.m
│   │   ├── gradientHistogram.m
│   │   ├── histogramKernel.m
│   │   ├── identifySystemUsingKPCA.m
│   │   ├── traceKernelKPCASystems.m
│   │   └── traceKernelKPCASystemsSqrtHist.m
│   ├── HOOF.m
│   ├── HSoptflow.m
│   ├── LBP_CASIA_Test.m
│   ├── LBP_CASIA_Train.m
│   ├── LBP_NUAA_Test.m
│   ├── LBP_NUAA_Train.m
│   ├── LBP_PRINT_ATTACK_Test.m
│   ├── LBP_PRINT_ATTACK_Train.m
│   ├── LBP_feature.m
│   ├── NUAA/
│   │   ├── client_test_normalized.txt
│   │   ├── client_train_normalized.txt
│   │   ├── imposter_test_normalized.txt
│   │   ├── imposter_train_normalized.txt
│   │   └── readme.txt
│   ├── OF_All_Train.m
│   ├── OF_CASIA_Test.m
│   ├── OF_CASIA_Train.m
│   ├── OF_PRINT_ATTACK_Test.m
│   ├── OF_PRINT_ATTACK_Train.m
│   ├── RealTime_DoGLBP.m
│   ├── RealTime_OF.m
│   ├── Save_CASIA_Test.m
│   ├── Save_CASIA_Train.m
│   ├── Save_NUAA.m
│   ├── Save_PRINT_ATTACK_Test.m
│   ├── Save_PRINT_ATTACK_Train.m
│   ├── lbp-0.3.3/
│   │   ├── getmapping.m
│   │   └── lbp.m
│   ├── liblinear-1.96/
│   │   ├── COPYRIGHT
│   │   ├── Makefile
│   │   ├── Makefile.win
│   │   ├── README
│   │   ├── blas/
│   │   │   ├── Makefile
│   │   │   ├── blas.h
│   │   │   ├── blasp.h
│   │   │   ├── daxpy.c
│   │   │   ├── ddot.c
│   │   │   ├── dnrm2.c
│   │   │   └── dscal.c
│   │   ├── heart_scale
│   │   ├── linear.cpp
│   │   ├── linear.def
│   │   ├── linear.h
│   │   ├── matlab/
│   │   │   ├── Makefile
│   │   │   ├── README
│   │   │   ├── libsvmread.c
│   │   │   ├── libsvmread.mexw64
│   │   │   ├── libsvmwrite.c
│   │   │   ├── libsvmwrite.mexw64
│   │   │   ├── linear_model_matlab.c
│   │   │   ├── linear_model_matlab.h
│   │   │   ├── make.m
│   │   │   ├── predict.c
│   │   │   ├── predict.mexw64
│   │   │   ├── train.c
│   │   │   └── train.mexw64
│   │   ├── predict.c
│   │   ├── python/
│   │   │   ├── Makefile
│   │   │   ├── README
│   │   │   ├── liblinear.py
│   │   │   └── liblinearutil.py
│   │   ├── train.c
│   │   ├── tron.cpp
│   │   ├── tron.h
│   │   └── windows/
│   │       ├── libsvmread.mexw64
│   │       ├── libsvmwrite.mexw64
│   │       ├── predict.mexw64
│   │       └── train.mexw64
│   └── libsvm-3.19/
│       ├── COPYRIGHT
│       ├── FAQ.html
│       ├── Makefile
│       ├── Makefile.win
│       ├── README
│       ├── heart_scale
│       ├── java/
│       │   ├── Makefile
│       │   ├── libsvm/
│       │   │   ├── svm.java
│       │   │   ├── svm.m4
│       │   │   ├── svm_model.java
│       │   │   ├── svm_node.java
│       │   │   ├── svm_parameter.java
│       │   │   ├── svm_print_interface.java
│       │   │   └── svm_problem.java
│       │   ├── libsvm.jar
│       │   ├── svm_predict.java
│       │   ├── svm_scale.java
│       │   ├── svm_toy.java
│       │   ├── svm_train.java
│       │   └── test_applet.html
│       ├── matlab/
│       │   ├── Makefile
│       │   ├── README
│       │   ├── libsvmread.c
│       │   ├── libsvmread.mexw64
│       │   ├── libsvmwrite.c
│       │   ├── libsvmwrite.mexw64
│       │   ├── make.m
│       │   ├── svm_model_matlab.c
│       │   ├── svm_model_matlab.h
│       │   ├── svmpredict.c
│       │   ├── svmpredict.mexw64
│       │   ├── svmtrain.c
│       │   └── svmtrain.mexw64
│       ├── python/
│       │   ├── Makefile
│       │   ├── README
│       │   ├── svm.py
│       │   └── svmutil.py
│       ├── svm-predict.c
│       ├── svm-scale.c
│       ├── svm-toy/
│       │   ├── gtk/
│       │   │   ├── Makefile
│       │   │   ├── callbacks.cpp
│       │   │   ├── callbacks.h
│       │   │   ├── interface.c
│       │   │   ├── interface.h
│       │   │   ├── main.c
│       │   │   └── svm-toy.glade
│       │   ├── qt/
│       │   │   ├── Makefile
│       │   │   └── svm-toy.cpp
│       │   └── windows/
│       │       └── svm-toy.cpp
│       ├── svm-train.c
│       ├── svm.cpp
│       ├── svm.def
│       ├── svm.h
│       ├── tools/
│       │   ├── README
│       │   ├── checkdata.py
│       │   ├── easy.py
│       │   ├── grid.py
│       │   └── subset.py
│       └── windows/
│           ├── libsvmread.mexw64
│           ├── libsvmwrite.mexw64
│           ├── svmpredict.mexw64
│           └── svmtrain.mexw64
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: C++/README.txt
================================================
ļ嵥
liveness.cpp
liveness.hͷļ
svm_modelѵsvmģ
svm_minmaxʱһIJ
./lbpLBPȡ
./libsvm-3.19LibSVM

ҪĿcppļ
liveness.cpp
./lbp/lbp.cpp
./lbp/histogram.cpp
./libsvm-3.19/svm.cpp
õͷļΪ
#include"liveness.h"

ʹõOpenCV汾Ϊ3.0.0-RC1

ʹõݿNUAA, PRINT-ATTACK, CASIA
Щⲻճ


class ThuVisionFaceLiveCheck{
public:
	// Initialization: successful - true; failed - false
	bool Init();
	// Liveness Predict: input image path or Mat. 
	// If it is a real face, return true; otherwise, return false
	bool Check(std::string imgPath);
	bool Check(cv::Mat img);
private:
	int img_size;
	int LBP_size;
	svm_model* model;
	double* Feature_Max;
	double* Feature_Min;
	vector<int> mapping_r8;
	vector<int> mapping_r16;
};

================================================
FILE: C++/lbp/CMakeLists.txt
================================================
PROJECT(githublbp)
SET(CMAKE_BUILD_TYPE Release)
CMAKE_MINIMUM_REQUIRED( VERSION 2.6 )
FIND_PACKAGE( OpenCV REQUIRED )
ADD_EXECUTABLE(lbp main.cpp lbp.cpp histogram.cpp)
TARGET_LINK_LIBRARIES(lbp ${OpenCV_LIBS})


================================================
FILE: C++/lbp/LICENSE
================================================
Copyright (c) 2011, philipp <bytefish[at]gmx.de>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the organization nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.



================================================
FILE: C++/lbp/histogram.cpp
================================================
#include "histogram.hpp"
#include <vector>

template <typename _Tp>
void lbp::histogram_(const Mat& src, Mat& hist, int numPatterns) {
	hist = Mat::zeros(1, numPatterns, CV_32SC1);
	for(int i = 0; i < src.rows; i++) {
		for(int j = 0; j < src.cols; j++) {
			int bin = src.at<_Tp>(i,j);
			hist.at<int>(0,bin) += 1;
		}
	}
}

template <typename _Tp>
double lbp::chi_square_(const Mat& histogram0, const Mat& histogram1) {
	if(histogram0.type() != histogram1.type())
			CV_Error(CV_StsBadArg, "Histograms must be of equal type.");
	if(histogram0.rows != 1 || histogram0.rows != histogram1.rows || histogram0.cols != histogram1.cols)
			CV_Error(CV_StsBadArg, "Histograms must be of equal dimension.");
	double result = 0.0;
	for(int i=0; i < histogram0.cols; i++) {
		double a = histogram0.at<_Tp>(0,i) - histogram1.at<_Tp>(0,i);
		double b = histogram0.at<_Tp>(0,i) + histogram1.at<_Tp>(0,i);
		if(abs(b) > numeric_limits<double>::epsilon()) {
			result+=(a*a)/b;
		}
	}
	return result;
}


void lbp::spatial_histogram(const Mat& src, Mat& hist, int numPatterns, const Size& window, int overlap) {
	int width = src.cols;
	int height = src.rows;
	vector<Mat> histograms;
	for(int x=0; x < width - window.width + 1; x+=(window.width-overlap)) {
		for(int y=0; y < height-window.height + 1; y+=(window.height-overlap)) {
			Mat cell = Mat(src, Rect(x,y,window.width, window.height));
			histograms.push_back(histogram(cell, numPatterns));
		}
	}
	hist.create(1, histograms.size()*numPatterns, CV_32SC1);
	// i know this is a bit lame now... feel free to make this a bit more efficient...
	for(int histIdx=0; histIdx < histograms.size(); histIdx++) {
		for(int valIdx = 0; valIdx < numPatterns; valIdx++) {
			int y = histIdx*numPatterns+valIdx;
			hist.at<int>(0,y) = histograms[histIdx].at<int>(valIdx);
		}
	}
}

// wrappers
void lbp::histogram(const Mat& src, Mat& hist, int numPatterns) {
	switch(src.type()) {
		case CV_8SC1: histogram_<char>(src, hist, numPatterns); break;
		case CV_8UC1: histogram_<unsigned char>(src, hist, numPatterns); break;
		case CV_16SC1: histogram_<short>(src, hist, numPatterns); break;
		case CV_16UC1: histogram_<unsigned short>(src, hist, numPatterns); break;
		case CV_32SC1: histogram_<int>(src, hist, numPatterns); break;
	}
}

double lbp::chi_square(const Mat& histogram0, const Mat& histogram1) {
	switch(histogram0.type()) {
		case CV_8SC1: return chi_square_<char>(histogram0,histogram1); break;
		case CV_8UC1: return chi_square_<unsigned char>(histogram0,histogram1); break;
		case CV_16SC1: return chi_square_<short>(histogram0, histogram1); break;
		case CV_16UC1: return chi_square_<unsigned short>(histogram0,histogram1); break;
		case CV_32SC1: return chi_square_<int>(histogram0,histogram1); break;
	}
}

void lbp::spatial_histogram(const Mat& src, Mat& dst, int numPatterns, int gridx, int gridy, int overlap) {
	int width = static_cast<int>(floor(src.cols / gridx));
	int height = static_cast<int>(floor(src.rows / gridy));
	spatial_histogram(src, dst, numPatterns, Size_<int>(width, height), overlap);
}

// Mat return type functions
Mat lbp::histogram(const Mat& src, int numPatterns) {
	Mat hist;
	histogram(src, hist, numPatterns);
	return hist;
}


Mat lbp::spatial_histogram(const Mat& src, int numPatterns, const Size& window, int overlap) {
	Mat hist;
	spatial_histogram(src, hist, numPatterns, window, overlap);
	return hist;
}


Mat lbp::spatial_histogram(const Mat& src, int numPatterns, int gridx, int gridy, int overlap) {
	Mat hist;
	spatial_histogram(src, hist, numPatterns, gridx, gridy, overlap);
	return hist;
}


================================================
FILE: C++/lbp/histogram.hpp
================================================
#ifndef HISTOGRAM_HPP_
#define HISTOGRAM_HPP_

//! \author philipp <bytefish[at]gmx[dot]de>
//! \copyright BSD, see LICENSE.

#include <cv.h>
#include <limits>

using namespace cv;
using namespace std;

namespace lbp {

// templated functions
template <typename _Tp>
void histogram_(const Mat& src, Mat& hist, int numPatterns);

template <typename _Tp>
double chi_square_(const Mat& histogram0, const Mat& histogram1);

// non-templated functions
void spatial_histogram(const Mat& src, Mat& spatialhist, int numPatterns, const Size& window, int overlap=0);

// wrapper functions
void spatial_histogram(const Mat& src, Mat& spatialhist, int numPatterns, int gridx=8, int gridy=8, int overlap=0);
void histogram(const Mat& src, Mat& hist, int numPatterns);
double chi_square(const Mat& histogram0, const Mat& histogram1);

// Mat return type functions
Mat histogram(const Mat& src, int numPatterns);
Mat spatial_histogram(const Mat& src, int numPatterns, const Size& window, int overlap=0);
Mat spatial_histogram(const Mat& src, int numPatterns, int gridx=8, int gridy=8, int overlap=0);
}
#endif


================================================
FILE: C++/lbp/lbp.cpp
================================================
#include "lbp.hpp"
#define M_PI 3.14159265358979323846

using namespace cv;

template <typename _Tp>
void lbp::OLBP_(const Mat& src, Mat& dst) {
	dst = Mat::zeros(src.rows-2, src.cols-2, CV_8UC1);
	for(int i=1;i<src.rows-1;i++) {
		for(int j=1;j<src.cols-1;j++) {
			_Tp center = src.at<_Tp>(i,j);
			unsigned char code = 0;
			code |= (src.at<_Tp>(i-1,j-1) > center) << 7;
			code |= (src.at<_Tp>(i-1,j) > center) << 6;
			code |= (src.at<_Tp>(i-1,j+1) > center) << 5;
			code |= (src.at<_Tp>(i,j+1) > center) << 4;
			code |= (src.at<_Tp>(i+1,j+1) > center) << 3;
			code |= (src.at<_Tp>(i+1,j) > center) << 2;
			code |= (src.at<_Tp>(i+1,j-1) > center) << 1;
			code |= (src.at<_Tp>(i,j-1) > center) << 0;
			dst.at<unsigned char>(i-1,j-1) = code;
		}
	}
}

template <typename _Tp>
void lbp::ELBP_(const Mat& src, Mat& dst, int radius, int neighbors) {
	neighbors = max(min(neighbors,31),1); // set bounds...
	// Note: alternatively you can switch to the new OpenCV Mat_
	// type system to define an unsigned int matrix... I am probably
	// mistaken here, but I didn't see an unsigned int representation
	// in OpenCV's classic typesystem...
	dst = Mat::zeros(src.rows-2*radius, src.cols-2*radius, CV_32SC1);
	for(int n=0; n<neighbors; n++) {
		// sample points
		float x = static_cast<float>(radius) * cos(2.0*M_PI*n/static_cast<float>(neighbors));
		float y = static_cast<float>(radius) * -sin(2.0*M_PI*n/static_cast<float>(neighbors));
		// relative indices
		int fx = static_cast<int>(floor(x));
		int fy = static_cast<int>(floor(y));
		int cx = static_cast<int>(ceil(x));
		int cy = static_cast<int>(ceil(y));
		// fractional part
		float ty = y - fy;
		float tx = x - fx;
		// set interpolation weights
		float w1 = (1 - tx) * (1 - ty);
		float w2 =      tx  * (1 - ty);
		float w3 = (1 - tx) *      ty;
		float w4 =      tx  *      ty;
		// iterate through your data
		for(int i=radius; i < src.rows-radius;i++) {
			for(int j=radius;j < src.cols-radius;j++) {
				float 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);
				// we are dealing with floating point precision, so add some little tolerance
				dst.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;
			}
		}
	}
}

template <typename _Tp>
void lbp::VARLBP_(const Mat& src, Mat& dst, int radius, int neighbors) {
	max(min(neighbors,31),1); // set bounds
	dst = Mat::zeros(src.rows-2*radius, src.cols-2*radius, CV_32FC1); //! result
	// allocate some memory for temporary on-line variance calculations
	Mat _mean = Mat::zeros(src.rows, src.cols, CV_32FC1);
	Mat _delta = Mat::zeros(src.rows, src.cols, CV_32FC1);
	Mat _m2 = Mat::zeros(src.rows, src.cols, CV_32FC1);
	for(int n=0; n<neighbors; n++) {
		// sample points
		float x = static_cast<float>(radius) * cos(2.0*M_PI*n/static_cast<float>(neighbors));
		float y = static_cast<float>(radius) * -sin(2.0*M_PI*n/static_cast<float>(neighbors));
		// relative indices
		int fx = static_cast<int>(floor(x));
		int fy = static_cast<int>(floor(y));
		int cx = static_cast<int>(ceil(x));
		int cy = static_cast<int>(ceil(y));
		// fractional part
		float ty = y - fy;
		float tx = x - fx;
		// set interpolation weights
		float w1 = (1 - tx) * (1 - ty);
		float w2 =      tx  * (1 - ty);
		float w3 = (1 - tx) *      ty;
		float w4 =      tx  *      ty;
		// iterate through your data
		for(int i=radius; i < src.rows-radius;i++) {
			for(int j=radius;j < src.cols-radius;j++) {
				float 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);
				_delta.at<float>(i,j) = t - _mean.at<float>(i,j);
				_mean.at<float>(i,j) = (_mean.at<float>(i,j) + (_delta.at<float>(i,j) / (1.0*(n+1)))); // i am a bit paranoid
				_m2.at<float>(i,j) = _m2.at<float>(i,j) + _delta.at<float>(i,j) * (t - _mean.at<float>(i,j));
			}
		}
	}
	// calculate result
	for(int i = radius; i < src.rows-radius; i++) {
		for(int j = radius; j < src.cols-radius; j++) {
			dst.at<float>(i-radius, j-radius) = _m2.at<float>(i,j) / (1.0*(neighbors-1));
		}
	}
}

// now the wrapper functions
void lbp::OLBP(const Mat& src, Mat& dst) {
	switch(src.type()) {
		case CV_8SC1: OLBP_<char>(src, dst); break;
		case CV_8UC1: OLBP_<unsigned char>(src, dst); break;
		case CV_16SC1: OLBP_<short>(src, dst); break;
		case CV_16UC1: OLBP_<unsigned short>(src, dst); break;
		case CV_32SC1: OLBP_<int>(src, dst); break;
		case CV_32FC1: OLBP_<float>(src, dst); break;
		case CV_64FC1: OLBP_<double>(src, dst); break;
	}
}

void lbp::ELBP(const Mat& src, Mat& dst, int radius, int neighbors) {
	switch(src.type()) {
		case CV_8SC1: ELBP_<char>(src, dst, radius, neighbors); break;
		case CV_8UC1: ELBP_<unsigned char>(src, dst, radius, neighbors); break;
		case CV_16SC1: ELBP_<short>(src, dst, radius, neighbors); break;
		case CV_16UC1: ELBP_<unsigned short>(src, dst, radius, neighbors); break;
		case CV_32SC1: ELBP_<int>(src, dst, radius, neighbors); break;
		case CV_32FC1: ELBP_<float>(src, dst, radius, neighbors); break;
		case CV_64FC1: ELBP_<double>(src, dst, radius, neighbors); break;
	}
}

void lbp::VARLBP(const Mat& src, Mat& dst, int radius, int neighbors) {
	switch(src.type()) {
		case CV_8SC1: VARLBP_<char>(src, dst, radius, neighbors); break;
		case CV_8UC1: VARLBP_<unsigned char>(src, dst, radius, neighbors); break;
		case CV_16SC1: VARLBP_<short>(src, dst, radius, neighbors); break;
		case CV_16UC1: VARLBP_<unsigned short>(src, dst, radius, neighbors); break;
		case CV_32SC1: VARLBP_<int>(src, dst, radius, neighbors); break;
		case CV_32FC1: VARLBP_<float>(src, dst, radius, neighbors); break;
		case CV_64FC1: VARLBP_<double>(src, dst, radius, neighbors); break;
	}
}

// now the Mat return functions
Mat lbp::OLBP(const Mat& src) { Mat dst; OLBP(src, dst); return dst; }
Mat lbp::ELBP(const Mat& src, int radius, int neighbors) { Mat dst; ELBP(src, dst, radius, neighbors); return dst; }
Mat lbp::VARLBP(const Mat& src, int radius, int neighbors) { Mat dst; VARLBP(src, dst, radius, neighbors); return dst; }






================================================
FILE: C++/lbp/lbp.hpp
================================================
#ifndef LBP_HPP_
#define LBP_HPP_

//! \author philipp <bytefish[at]gmx[dot]de>
//! \copyright BSD, see LICENSE.

#include <cv.h>
#include <limits>

using namespace cv;
using namespace std;

namespace lbp {

// templated functions
template <typename _Tp>
void OLBP_(const cv::Mat& src, cv::Mat& dst);

template <typename _Tp>
void ELBP_(const cv::Mat& src, cv::Mat& dst, int radius = 1, int neighbors = 8);

template <typename _Tp>
void VARLBP_(const cv::Mat& src, cv::Mat& dst, int radius = 1, int neighbors = 8);

// wrapper functions
void OLBP(const Mat& src, Mat& dst);
void ELBP(const Mat& src, Mat& dst, int radius = 1, int neighbors = 8);
void VARLBP(const Mat& src, Mat& dst, int radius = 1, int neighbors = 8);

// Mat return type functions
Mat OLBP(const Mat& src);
Mat ELBP(const Mat& src, int radius = 1, int neighbors = 8);
Mat VARLBP(const Mat& src, int radius = 1, int neighbors = 8);

}
#endif


================================================
FILE: C++/lbp/main.cpp
================================================
#include <cv.h>
#include <highgui.h>
#include "lbp.hpp"
#include "histogram.hpp"

using namespace cv;

int main(int argc, const char *argv[]) {
	int deviceId = 0;
	if(argc > 1)
		deviceId = atoi(argv[1]);

	VideoCapture cap(deviceId);

	if(!cap.isOpened()) {
    	cerr << "Capture Device ID " << deviceId << "cannot be opened." << endl;
    	return -1;
    }

	// initial values
    int radius = 1;
    int neighbors = 8;

    // windows
    namedWindow("original",CV_WINDOW_AUTOSIZE);
    namedWindow("lbp",CV_WINDOW_AUTOSIZE);

    // matrices used
    Mat frame; // always references the last frame
    Mat dst; // image after preprocessing
    Mat lbp; // lbp image

    // just to switch between possible lbp operators
    vector<string> lbp_names;
    lbp_names.push_back("Extended LBP"); // 0
    lbp_names.push_back("Fixed Sampling LBP"); // 1
    lbp_names.push_back("Variance-based LBP"); // 2
    int lbp_operator=0;

    bool running=true;
    while(running) {
    	cap >> frame;
    	cvtColor(frame, dst, CV_BGR2GRAY);
    	GaussianBlur(dst, dst, Size(7,7), 5, 3, BORDER_CONSTANT); // tiny bit of smoothing is always a good idea
    	// comment the following lines for original size
    	resize(frame, frame, Size(), 0.5, 0.5);
    	resize(dst,dst,Size(), 0.5, 0.5);
    	//
    	switch(lbp_operator) {
    	case 0:
    		lbp::ELBP(dst, lbp, radius, neighbors); // use the extended operator
    		break;
    	case 1:
    		lbp::OLBP(dst, lbp); // use the original operator
    		break;
    	case 2:
    		lbp::VARLBP(dst, lbp, radius, neighbors);
    		break;
    	}
    	// now to show the patterns a normalization is necessary
    	// a simple min-max norm will do the job...
    	normalize(lbp, lbp, 0, 255, NORM_MINMAX, CV_8UC1);

    	imshow("original", frame);
    	imshow("lbp", lbp);

    	char key = (char) waitKey(20);

    	// exit on escape
    	if(key == 27)
    		running=false;

    	// to make it a bit interactive, you can increase and decrease the parameters
    	switch(key) {
    	case 'q': case 'Q':
    		running=false;
    		break;
    	// lower case r decreases the radius (min 1)
    	case 'r':
    		radius-=1;
    		radius = std::max(radius,1);
    		cout << "radius=" << radius << endl;
    		break;
    	// upper case r increases the radius (there's no real upper bound)
    	case 'R':
    		radius+=1;
    		radius = std::min(radius,32);
    		cout << "radius=" << radius << endl;
    		break;
    	// lower case p decreases the number of sampling points (min 1)
    	case 'p':
    		neighbors-=1;
    		neighbors = std::max(neighbors,1);
    		cout << "sampling points=" << neighbors << endl;
    		break;
    	// upper case p increases the number of sampling points (max 31)
    	case 'P':
    		neighbors+=1;
    		neighbors = std::min(neighbors,31);
    		cout << "sampling points=" << neighbors << endl;
    		break;
    	// switch between operators
    	case 'o': case 'O':
    		lbp_operator = (lbp_operator + 1) % 3;
    		cout << "Switched to operator " << lbp_names[lbp_operator] << endl;
    		break;
    	case 's': case 'S':
    		imwrite("original.jpg", frame);
    		imwrite("lbp.jpg", lbp);
    		cout << "Screenshot (operator=" << lbp_names[lbp_operator] << ",radius=" << radius <<",points=" << neighbors << ")" << endl;
    		break;
    	default:
    		break;
    	}

    }
    	return 0; // success
}


================================================
FILE: C++/lbp/mapping_n16.txt
================================================
0	1	2	3	4	242	5	6	7	242	242	242	8	242	9	10	11	242	242	242	242	242	242	242	12	242	242	242	13	242	14	15	16	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	17	242	242	242	242	242	242	242	18	242	242	242	19	242	20	21	22	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	23	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	24	242	242	242	242	242	242	242	25	242	242	242	26	242	27	28	29	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	30	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	31	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	32	242	242	242	242	242	242	242	33	242	242	242	34	242	35	36	37	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	38	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	39	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	40	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	41	242	242	242	242	242	242	242	42	242	242	242	43	242	44	45	46	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	47	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	48	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	49	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	50	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	51	242	242	242	242	242	242	242	52	242	242	242	53	242	54	55	56	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	57	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	58	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	59	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	60	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	61	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	62	242	242	242	242	242	242	242	63	242	242	242	64	242	65	66	67	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	68	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	69	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	70	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	71	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	72	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	73	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	74	242	242	242	242	242	242	242	75	242	242	242	76	242	77	78	79	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	80	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	81	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	82	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	83	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	84	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	85	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	86	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	87	242	242	242	242	242	242	242	88	242	242	242	89	242	90	91	92	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	93	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	94	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	95	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	96	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	97	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	98	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	99	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	100	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	101	242	242	242	242	242	242	242	102	242	242	242	103	242	104	105	106	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	107	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	108	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	109	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	110	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	111	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	112	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	113	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	114	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	115	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	116	242	242	242	242	242	242	242	117	242	242	242	118	242	119	120	121	122	242	123	242	242	242	124	242	242	242	242	242	242	242	125	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	126	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	127	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	128	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	129	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	130	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	131	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	132	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	133	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	134	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	242	24
Download .txt
gitextract_0t6fbsbr/

├── C++/
│   ├── README.txt
│   ├── lbp/
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE
│   │   ├── histogram.cpp
│   │   ├── histogram.hpp
│   │   ├── lbp.cpp
│   │   ├── lbp.hpp
│   │   ├── main.cpp
│   │   ├── mapping_n16.txt
│   │   └── mapping_n8.txt
│   ├── liveness.cpp
│   ├── liveness.h
│   ├── svm_minmax_NUAA.txt
│   ├── svm_model_NUAA
│   └── test.cpp
├── Matlab/
│   ├── DoG.m
│   ├── DoGLBP_Test.m
│   ├── DoG_CASIA_Test.m
│   ├── DoG_CASIA_Train.m
│   ├── DoG_LBP_All_Train.m
│   ├── DoG_LBP_CASIA_Test.m
│   ├── DoG_LBP_CASIA_Train.m
│   ├── DoG_LBP_NUAA_Test.m
│   ├── DoG_LBP_NUAA_Train.m
│   ├── DoG_LBP_PRINT_ATTACK_Test.m
│   ├── DoG_LBP_PRINT_ATTACK_Train.m
│   ├── DoG_NUAA_Test.m
│   ├── DoG_NUAA_Train.m
│   ├── DoG_PRINT_ATTACK_Test.m
│   ├── DoG_PRINT_ATTACK_Train.m
│   ├── HFD.m
│   ├── HFDTest.m
│   ├── HFDTrain.m
│   ├── HOOF/
│   │   ├── README
│   │   ├── README~
│   │   ├── chiSquareDist.m
│   │   ├── computeDistanceModularHistogram.m
│   │   ├── computeDistanceOrdinalHistogram.m
│   │   ├── computeDistancesBetweenKPCASystems.m
│   │   ├── findSubspaceAnglesBetweenKPCASystems.m
│   │   ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv
│   │   ├── findSubspaceAnglesBetweenKPCASystemsSqrtHist.m
│   │   ├── gradientHistogram.m
│   │   ├── histogramKernel.m
│   │   ├── identifySystemUsingKPCA.m
│   │   ├── traceKernelKPCASystems.m
│   │   └── traceKernelKPCASystemsSqrtHist.m
│   ├── HOOF.m
│   ├── HSoptflow.m
│   ├── LBP_CASIA_Test.m
│   ├── LBP_CASIA_Train.m
│   ├── LBP_NUAA_Test.m
│   ├── LBP_NUAA_Train.m
│   ├── LBP_PRINT_ATTACK_Test.m
│   ├── LBP_PRINT_ATTACK_Train.m
│   ├── LBP_feature.m
│   ├── NUAA/
│   │   ├── client_test_normalized.txt
│   │   ├── client_train_normalized.txt
│   │   ├── imposter_test_normalized.txt
│   │   ├── imposter_train_normalized.txt
│   │   └── readme.txt
│   ├── OF_All_Train.m
│   ├── OF_CASIA_Test.m
│   ├── OF_CASIA_Train.m
│   ├── OF_PRINT_ATTACK_Test.m
│   ├── OF_PRINT_ATTACK_Train.m
│   ├── RealTime_DoGLBP.m
│   ├── RealTime_OF.m
│   ├── Save_CASIA_Test.m
│   ├── Save_CASIA_Train.m
│   ├── Save_NUAA.m
│   ├── Save_PRINT_ATTACK_Test.m
│   ├── Save_PRINT_ATTACK_Train.m
│   ├── lbp-0.3.3/
│   │   ├── getmapping.m
│   │   └── lbp.m
│   ├── liblinear-1.96/
│   │   ├── COPYRIGHT
│   │   ├── Makefile
│   │   ├── Makefile.win
│   │   ├── README
│   │   ├── blas/
│   │   │   ├── Makefile
│   │   │   ├── blas.h
│   │   │   ├── blasp.h
│   │   │   ├── daxpy.c
│   │   │   ├── ddot.c
│   │   │   ├── dnrm2.c
│   │   │   └── dscal.c
│   │   ├── heart_scale
│   │   ├── linear.cpp
│   │   ├── linear.def
│   │   ├── linear.h
│   │   ├── matlab/
│   │   │   ├── Makefile
│   │   │   ├── README
│   │   │   ├── libsvmread.c
│   │   │   ├── libsvmread.mexw64
│   │   │   ├── libsvmwrite.c
│   │   │   ├── libsvmwrite.mexw64
│   │   │   ├── linear_model_matlab.c
│   │   │   ├── linear_model_matlab.h
│   │   │   ├── make.m
│   │   │   ├── predict.c
│   │   │   ├── predict.mexw64
│   │   │   ├── train.c
│   │   │   └── train.mexw64
│   │   ├── predict.c
│   │   ├── python/
│   │   │   ├── Makefile
│   │   │   ├── README
│   │   │   ├── liblinear.py
│   │   │   └── liblinearutil.py
│   │   ├── train.c
│   │   ├── tron.cpp
│   │   ├── tron.h
│   │   └── windows/
│   │       ├── libsvmread.mexw64
│   │       ├── libsvmwrite.mexw64
│   │       ├── predict.mexw64
│   │       └── train.mexw64
│   └── libsvm-3.19/
│       ├── COPYRIGHT
│       ├── FAQ.html
│       ├── Makefile
│       ├── Makefile.win
│       ├── README
│       ├── heart_scale
│       ├── java/
│       │   ├── Makefile
│       │   ├── libsvm/
│       │   │   ├── svm.java
│       │   │   ├── svm.m4
│       │   │   ├── svm_model.java
│       │   │   ├── svm_node.java
│       │   │   ├── svm_parameter.java
│       │   │   ├── svm_print_interface.java
│       │   │   └── svm_problem.java
│       │   ├── libsvm.jar
│       │   ├── svm_predict.java
│       │   ├── svm_scale.java
│       │   ├── svm_toy.java
│       │   ├── svm_train.java
│       │   └── test_applet.html
│       ├── matlab/
│       │   ├── Makefile
│       │   ├── README
│       │   ├── libsvmread.c
│       │   ├── libsvmread.mexw64
│       │   ├── libsvmwrite.c
│       │   ├── libsvmwrite.mexw64
│       │   ├── make.m
│       │   ├── svm_model_matlab.c
│       │   ├── svm_model_matlab.h
│       │   ├── svmpredict.c
│       │   ├── svmpredict.mexw64
│       │   ├── svmtrain.c
│       │   └── svmtrain.mexw64
│       ├── python/
│       │   ├── Makefile
│       │   ├── README
│       │   ├── svm.py
│       │   └── svmutil.py
│       ├── svm-predict.c
│       ├── svm-scale.c
│       ├── svm-toy/
│       │   ├── gtk/
│       │   │   ├── Makefile
│       │   │   ├── callbacks.cpp
│       │   │   ├── callbacks.h
│       │   │   ├── interface.c
│       │   │   ├── interface.h
│       │   │   ├── main.c
│       │   │   └── svm-toy.glade
│       │   ├── qt/
│       │   │   ├── Makefile
│       │   │   └── svm-toy.cpp
│       │   └── windows/
│       │       └── svm-toy.cpp
│       ├── svm-train.c
│       ├── svm.cpp
│       ├── svm.def
│       ├── svm.h
│       ├── tools/
│       │   ├── README
│       │   ├── checkdata.py
│       │   ├── easy.py
│       │   ├── grid.py
│       │   └── subset.py
│       └── windows/
│           ├── libsvmread.mexw64
│           ├── libsvmwrite.mexw64
│           ├── svmpredict.mexw64
│           └── svmtrain.mexw64
└── README.md
Download .txt
SYMBOL INDEX (599 symbols across 58 files)

FILE: C++/lbp/histogram.cpp
  function Mat (line 81) | Mat lbp::histogram(const Mat& src, int numPatterns) {
  function Mat (line 88) | Mat lbp::spatial_histogram(const Mat& src, int numPatterns, const Size& ...
  function Mat (line 95) | Mat lbp::spatial_histogram(const Mat& src, int numPatterns, int gridx, i...

FILE: C++/lbp/histogram.hpp
  type lbp (line 13) | namespace lbp {

FILE: C++/lbp/lbp.cpp
  function Mat (line 143) | Mat lbp::OLBP(const Mat& src) { Mat dst; OLBP(src, dst); return dst; }
  function Mat (line 144) | Mat lbp::ELBP(const Mat& src, int radius, int neighbors) { Mat dst; ELBP...
  function Mat (line 145) | Mat lbp::VARLBP(const Mat& src, int radius, int neighbors) { Mat dst; VA...

FILE: C++/lbp/lbp.hpp
  type lbp (line 13) | namespace lbp {

FILE: C++/lbp/main.cpp
  function main (line 8) | int main(int argc, const char *argv[]) {

FILE: C++/liveness.cpp
  function sigmoid (line 4) | double sigmoid(double input)
  function Mat (line 10) | Mat DoG(Mat input, double sigma1, double sigma2)
  function Mat (line 29) | Mat LBP(Mat input, vector<int> mapping_r8, vector<int> mapping_r16)
  function svm_node (line 61) | svm_node* Liveness_Feature(Mat img, vector<int> mapping_r8, vector<int> ...
  function Liveness_Predict (line 94) | double Liveness_Predict(Mat img, svm_model* model, double* Feature_Max, ...
  function Train (line 204) | void Train()
  function Test (line 359) | void Test()

FILE: C++/liveness.h
  function class (line 30) | class ThuVisionFaceLiveCheck{

FILE: C++/test.cpp
  function main (line 4) | int main()

FILE: Matlab/liblinear-1.96/blas/blas.h
  type fcomplex (line 12) | typedef struct { float r, i; } fcomplex;
  type dcomplex (line 13) | typedef struct { double r, i; } dcomplex;
  type blasbool (line 14) | typedef int blasbool;

FILE: Matlab/liblinear-1.96/blas/daxpy.c
  function daxpy_ (line 7) | int daxpy_(int *n, double *sa, double *sx, int *incx, double *sy,

FILE: Matlab/liblinear-1.96/blas/ddot.c
  function ddot_ (line 7) | double ddot_(int *n, double *sx, int *incx, double *sy, int *incy)

FILE: Matlab/liblinear-1.96/blas/dnrm2.c
  function dnrm2_ (line 8) | double dnrm2_(int *n, double *x, int *incx)

FILE: Matlab/liblinear-1.96/blas/dscal.c
  function dscal_ (line 7) | int dscal_(int *n, double *sa, double *sx, int *incx)

FILE: Matlab/liblinear-1.96/linear.cpp
  function swap (line 10) | static inline void swap(T& x, T& y) { T t=x; x=y; y=t; }
  function T (line 12) | static inline T min(T x,T y) { return (x<y)?x:y; }
  function T (line 15) | static inline T max(T x,T y) { return (x>y)?x:y; }
  function clone (line 17) | static inline void clone(T*& dst, S* src, int n)
  function print_string_stdout (line 25) | static void print_string_stdout(const char *s)
  function info (line 34) | static void info(const char *fmt,...)
  function info (line 44) | static void info(const char *fmt,...) {}
  class l2r_lr_fun (line 47) | class l2r_lr_fun: public function
  class l2r_l2_svc_fun (line 191) | class l2r_l2_svc_fun: public function
  class l2r_l2_svr_fun (line 355) | class l2r_l2_svr_fun: public l2r_l2_svc_fun
  class Solver_MCSVM_CS (line 456) | class Solver_MCSVM_CS
  function compare_double (line 492) | int compare_double(const void *a, const void *b)
  function solve_l2r_l1l2_svc (line 778) | static void solve_l2r_l1l2_svc(
  function solve_l2r_l1l2_svr (line 996) | static void solve_l2r_l1l2_svr(
  function solve_l2r_lr_dual (line 1223) | void solve_l2r_lr_dual(const problem *prob, double *w, double eps, doubl...
  function solve_l1r_l2_svc (line 1397) | static void solve_l1r_l2_svc(
  function solve_l1r_lr (line 1684) | static void solve_l1r_lr(
  function transpose (line 2049) | static void transpose(const problem *prob, feature_node **x_space_ret, p...
  function group_classes (line 2106) | static void group_classes(const problem *prob, int *nr_class_ret, int **...
  function train_one (line 2181) | static void train_one(const problem *prob, const parameter *param, doubl...
  function model (line 2293) | model* train(const problem *prob, const parameter *param)
  function cross_validation (line 2425) | void cross_validation(const problem *prob, const parameter *param, int n...
  function predict_values (line 2483) | double predict_values(const struct model *model_, const struct feature_n...
  function predict (line 2530) | double predict(const model *model_, const feature_node *x)
  function predict_probability (line 2538) | double predict_probability(const struct model *model_, const struct feat...
  function save_model (line 2580) | int save_model(const char *model_file_name, const struct model *model_)
  type model (line 2635) | struct model
  function get_nr_feature (line 2746) | int get_nr_feature(const model *model_)
  function get_nr_class (line 2751) | int get_nr_class(const model *model_)
  function get_labels (line 2756) | void get_labels(const model *model_, int* label)
  function get_w_value (line 2764) | static inline double get_w_value(const struct model *model_, int idx, in...
  function get_decfun_coef (line 2793) | double get_decfun_coef(const struct model *model_, int feat_idx, int lab...
  function get_decfun_bias (line 2800) | double get_decfun_bias(const struct model *model_, int label_idx)
  function free_model_content (line 2810) | void free_model_content(struct model *model_ptr)
  function free_and_destroy_model (line 2818) | void free_and_destroy_model(struct model **model_ptr_ptr)
  function destroy_param (line 2828) | void destroy_param(parameter* param)
  function check_probability_model (line 2863) | int check_probability_model(const struct model *model_)
  function check_regression_model (line 2870) | int check_regression_model(const struct model *model_)
  function set_print_string_function (line 2877) | void set_print_string_function(void (*print_func)(const char*))

FILE: Matlab/liblinear-1.96/linear.h
  type feature_node (line 8) | struct feature_node
  type problem (line 14) | struct problem
  type parameter (line 24) | struct parameter
  type model (line 37) | struct model
  type model (line 47) | struct model
  type problem (line 47) | struct problem
  type parameter (line 47) | struct parameter
  type problem (line 48) | struct problem
  type parameter (line 48) | struct parameter
  type model (line 50) | struct model
  type feature_node (line 50) | struct feature_node
  type model (line 51) | struct model
  type feature_node (line 51) | struct feature_node
  type model (line 52) | struct model
  type feature_node (line 52) | struct feature_node
  type model (line 54) | struct model
  type model (line 55) | struct model
  type model (line 57) | struct model
  type model (line 58) | struct model
  type model (line 59) | struct model
  type model (line 60) | struct model
  type model (line 61) | struct model
  type model (line 63) | struct model
  type model (line 64) | struct model
  type parameter (line 65) | struct parameter
  type problem (line 67) | struct problem
  type parameter (line 67) | struct parameter
  type model (line 68) | struct model
  type model (line 69) | struct model

FILE: Matlab/liblinear-1.96/matlab/libsvmread.c
  type mwIndex (line 11) | typedef int mwIndex;
  function exit_with_help (line 21) | void exit_with_help()
  function fake_answer (line 28) | static void fake_answer(int nlhs, mxArray *plhs[])
  function read_problem (line 57) | void read_problem(const char *filename, int nlhs, mxArray *plhs[])
  function mexFunction (line 188) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/liblinear-1.96/matlab/libsvmwrite.c
  type mwIndex (line 8) | typedef int mwIndex;
  function exit_with_help (line 12) | void exit_with_help()
  function fake_answer (line 19) | static void fake_answer(int nlhs, mxArray *plhs[])
  function libsvmwrite (line 26) | void libsvmwrite(const char *filename, const mxArray *label_vec, const m...
  function mexFunction (line 84) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/liblinear-1.96/matlab/linear_model_matlab.c
  type mwIndex (line 9) | typedef int mwIndex;
  type model (line 26) | struct model
  type model (line 105) | struct model

FILE: Matlab/liblinear-1.96/matlab/linear_model_matlab.h
  type model (line 1) | struct model
  type model (line 2) | struct model

FILE: Matlab/liblinear-1.96/matlab/predict.c
  type mwIndex (line 11) | typedef int mwIndex;
  function print_null (line 19) | int print_null(const char *s,...) {}
  function read_sparse_instance (line 24) | void read_sparse_instance(const mxArray *prhs, int index, struct feature...
  function fake_answer (line 52) | static void fake_answer(int nlhs, mxArray *plhs[])
  function do_predict (line 59) | void do_predict(int nlhs, mxArray *plhs[], const mxArray *prhs[], struct...
  function exit_with_help (line 213) | void exit_with_help()
  function mexFunction (line 229) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/liblinear-1.96/matlab/train.c
  type mwIndex (line 13) | typedef int mwIndex;
  function print_null (line 21) | void print_null(const char *s) {}
  function print_string_matlab (line 22) | void print_string_matlab(const char *s) {mexPrintf(s);}
  function exit_with_help (line 24) | void exit_with_help()
  type parameter (line 70) | struct parameter
  type problem (line 71) | struct problem
  type model (line 72) | struct model
  type feature_node (line 73) | struct feature_node
  function do_cross_validation (line 79) | double do_cross_validation()
  function parse_command_line (line 125) | int parse_command_line(int nrhs, const mxArray *prhs[], char *model_file...
  function fake_answer (line 246) | static void fake_answer(int nlhs, mxArray *plhs[])
  function read_problem_sparse (line 253) | int read_problem_sparse(const mxArray *label_vec, const mxArray *instanc...
  function mexFunction (line 341) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/liblinear-1.96/predict.c
  function print_null (line 8) | int print_null(const char *s,...) {return 0;}
  type feature_node (line 12) | struct feature_node
  type model (line 15) | struct model
  function exit_input_error (line 18) | void exit_input_error(int line_num)
  function do_predict (line 45) | void do_predict(FILE *input, FILE *output)
  function exit_with_help (line 175) | void exit_with_help()
  function main (line 186) | int main(int argc, char **argv)

FILE: Matlab/liblinear-1.96/python/liblinear.py
  function print_null (line 42) | def print_null(s):
  function genFields (line 45) | def genFields(names, types):
  function fillprototype (line 48) | def fillprototype(f, restype, argtypes):
  class feature_node (line 52) | class feature_node(Structure):
    method __str__ (line 57) | def __str__(self):
  function gen_feature_nodearray (line 60) | def gen_feature_nodearray(xi, feature_max=None, issparse=True):
  class problem (line 87) | class problem(Structure):
    method __init__ (line 92) | def __init__(self, y, x, bias = -1):
    method set_bias (line 114) | def set_bias(self, bias):
  class parameter (line 129) | class parameter(Structure):
    method __init__ (line 134) | def __init__(self, options = None):
    method __str__ (line 139) | def __str__(self):
    method set_to_default_values (line 149) | def set_to_default_values(self):
    method parse_options (line 162) | def parse_options(self, options):
  class model (line 228) | class model(Structure):
    method __init__ (line 233) | def __init__(self):
    method __del__ (line 236) | def __del__(self):
    method get_nr_feature (line 241) | def get_nr_feature(self):
    method get_nr_class (line 244) | def get_nr_class(self):
    method get_labels (line 247) | def get_labels(self):
    method get_decfun_coef (line 253) | def get_decfun_coef(self, feat_idx, label_idx=0):
    method get_decfun_bias (line 256) | def get_decfun_bias(self, label_idx=0):
    method get_decfun (line 259) | def get_decfun(self, label_idx=0):
    method is_probability_model (line 264) | def is_probability_model(self):
    method is_regression_model (line 267) | def is_regression_model(self):
  function toPyModel (line 270) | def toPyModel(model_ptr):

FILE: Matlab/liblinear-1.96/python/liblinearutil.py
  function svm_read_problem (line 13) | def svm_read_problem(data_file_name):
  function load_model (line 35) | def load_model(model_file_name):
  function save_model (line 48) | def save_model(model_file_name, model):
  function evaluations (line 56) | def evaluations(ty, pv):
  function train (line 85) | def train(arg1, arg2=None, arg3=None):
  function predict (line 171) | def predict(y, x, m, options=""):

FILE: Matlab/liblinear-1.96/train.c
  function print_null (line 11) | void print_null(const char *s) {}
  function exit_with_help (line 13) | void exit_with_help()
  function exit_input_error (line 57) | void exit_input_error(int line_num)
  type feature_node (line 88) | struct feature_node
  type parameter (line 89) | struct parameter
  type problem (line 90) | struct problem
  type model (line 91) | struct model
  function main (line 96) | int main(int argc, char **argv)
  function do_cross_validation (line 135) | void do_cross_validation()
  function parse_command_line (line 176) | void parse_command_line(int argc, char **argv, char *input_file_name, ch...
  function read_problem (line 300) | void read_problem(const char *filename)

FILE: Matlab/liblinear-1.96/tron.cpp
  function T (line 8) | static inline T min(T x,T y) { return (x<y)?x:y; }
  function T (line 12) | static inline T max(T x,T y) { return (x>y)?x:y; }
  function default_print (line 28) | static void default_print(const char *buf)

FILE: Matlab/liblinear-1.96/tron.h
  function class (line 4) | class function
  function class (line 15) | class TRON

FILE: Matlab/libsvm-3.19/java/libsvm/svm.java
  class Cache (line 16) | class Cache {
    class head_t (line 19) | private final class head_t
    method Cache (line 28) | Cache(int l_, long size_)
    method lru_delete (line 41) | private void lru_delete(head_t h)
    method lru_insert (line 48) | private void lru_insert(head_t h)
    method get_data (line 61) | int get_data(int index, float[][] data, int len)
    method swap_index (line 92) | void swap_index(int i, int j)
  class QMatrix (line 130) | abstract class QMatrix {
    method get_Q (line 131) | abstract float[] get_Q(int column, int len);
    method get_QD (line 132) | abstract double[] get_QD();
    method swap_index (line 133) | abstract void swap_index(int i, int j);
  class Kernel (line 136) | abstract class Kernel extends QMatrix {
    method get_Q (line 146) | abstract float[] get_Q(int column, int len);
    method get_QD (line 147) | abstract double[] get_QD();
    method swap_index (line 149) | void swap_index(int i, int j)
    method powi (line 155) | private static double powi(double base, int times)
    method kernel_function (line 167) | double kernel_function(int i, int j)
    method Kernel (line 186) | Kernel(int l, svm_node[][] x_, svm_parameter param)
    method dot (line 204) | static double dot(svm_node[] x, svm_node[] y)
    method k_function (line 226) | static double k_function(svm_node[] x, svm_node[] y,
  class Solver (line 303) | class Solver {
    method get_C (line 324) | double get_C(int i)
    method update_alpha_status (line 328) | void update_alpha_status(int i)
    method is_upper_bound (line 336) | boolean is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }
    method is_lower_bound (line 337) | boolean is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }
    method is_free (line 338) | boolean is_free(int i) {  return alpha_status[i] == FREE; }
    class SolutionInfo (line 342) | static class SolutionInfo {
    method swap_index (line 350) | void swap_index(int i, int j)
    method reconstruct_gradient (line 362) | void reconstruct_gradient()
    method Solve (line 404) | void Solve(int l, QMatrix Q, double[] p_, byte[] y_,
    method select_working_set (line 673) | int select_working_set(int[] working_set)
    method be_shrunk (line 772) | private boolean be_shrunk(int i, double Gmax1, double Gmax2)
    method do_shrinking (line 792) | void do_shrinking()
    method calculate_rho (line 852) | double calculate_rho()
  class Solver_NU (line 897) | final class Solver_NU extends Solver
    method Solve (line 901) | void Solve(int l, QMatrix Q, double[] p, byte[] y,
    method select_working_set (line 910) | int select_working_set(int[] working_set)
    method be_shrunk (line 1022) | private boolean be_shrunk(int i, double Gmax1, double Gmax2, double Gm...
    method do_shrinking (line 1042) | void do_shrinking()
    method calculate_rho (line 1094) | double calculate_rho()
  class SVC_Q (line 1148) | class SVC_Q extends Kernel
    method SVC_Q (line 1154) | SVC_Q(svm_problem prob, svm_parameter param, byte[] y_)
    method get_Q (line 1164) | float[] get_Q(int i, int len)
    method get_QD (line 1176) | double[] get_QD()
    method swap_index (line 1181) | void swap_index(int i, int j)
  class ONE_CLASS_Q (line 1190) | class ONE_CLASS_Q extends Kernel
    method ONE_CLASS_Q (line 1195) | ONE_CLASS_Q(svm_problem prob, svm_parameter param)
    method get_Q (line 1204) | float[] get_Q(int i, int len)
    method get_QD (line 1216) | double[] get_QD()
    method swap_index (line 1221) | void swap_index(int i, int j)
  class SVR_Q (line 1229) | class SVR_Q extends Kernel
    method SVR_Q (line 1239) | SVR_Q(svm_problem prob, svm_parameter param)
    method swap_index (line 1260) | void swap_index(int i, int j)
    method get_Q (line 1267) | float[] get_Q(int i, int len)
    method get_QD (line 1286) | double[] get_QD()
  class svm (line 1292) | public class svm {
    method print (line 1301) | public void print(String s)
    method info (line 1310) | static void info(String s)
    method solve_c_svc (line 1315) | private static void solve_c_svc(svm_problem prob, svm_parameter param,
    method solve_nu_svc (line 1347) | private static void solve_nu_svc(svm_problem prob, svm_parameter param,
    method solve_one_class (line 1398) | private static void solve_one_class(svm_problem prob, svm_parameter pa...
    method solve_epsilon_svr (line 1426) | private static void solve_epsilon_svr(svm_problem prob, svm_parameter ...
    method solve_nu_svr (line 1459) | private static void solve_nu_svr(svm_problem prob, svm_parameter param,
    class decision_function (line 1495) | static class decision_function
    method svm_train_one (line 1501) | static decision_function svm_train_one(
    method sigmoid_train (line 1559) | private static void sigmoid_train(int l, double[] dec_values, double[]...
    method sigmoid_predict (line 1672) | private static double sigmoid_predict(double decision_value, double A,...
    method multiclass_probability (line 1682) | private static void multiclass_probability(int k, double[][] r, double...
    method svm_binary_svc_probability (line 1742) | private static void svm_binary_svc_probability(svm_problem prob, svm_p...
    method svm_svr_probability (line 1823) | private static double svm_svr_probability(svm_problem prob, svm_parame...
    method svm_group_classes (line 1854) | private static void svm_group_classes(svm_problem prob, int[] nr_class...
    method svm_train (line 1935) | public static svm_model svm_train(svm_problem prob, svm_parameter param)
    method svm_cross_validation (line 2172) | public static void svm_cross_validation(svm_problem prob, svm_paramete...
    method svm_get_svm_type (line 2282) | public static int svm_get_svm_type(svm_model model)
    method svm_get_nr_class (line 2287) | public static int svm_get_nr_class(svm_model model)
    method svm_get_labels (line 2292) | public static void svm_get_labels(svm_model model, int[] label)
    method svm_get_sv_indices (line 2299) | public static void svm_get_sv_indices(svm_model model, int[] indices)
    method svm_get_nr_sv (line 2306) | public static int svm_get_nr_sv(svm_model model)
    method svm_get_svr_probability (line 2311) | public static double svm_get_svr_probability(svm_model model)
    method svm_predict_values (line 2323) | public static double svm_predict_values(svm_model model, svm_node[] x,...
    method svm_predict (line 2396) | public static double svm_predict(svm_model model, svm_node[] x)
    method svm_predict_probability (line 2410) | public static double svm_predict_probability(svm_model model, svm_node...
    method svm_save_model (line 2453) | public static void svm_save_model(String model_file_name, svm_model mo...
    method atof (line 2538) | private static double atof(String s)
    method atoi (line 2543) | private static int atoi(String s)
    method read_model_header (line 2548) | private static boolean read_model_header(BufferedReader fp, svm_model ...
    method svm_load_model (line 2661) | public static svm_model svm_load_model(String model_file_name) throws ...
    method svm_load_model (line 2666) | public static svm_model svm_load_model(BufferedReader fp) throws IOExc...
    method svm_check_parameter (line 2711) | public static String svm_check_parameter(svm_problem prob, svm_paramet...
    method svm_check_probability_model (line 2831) | public static int svm_check_probability_model(svm_model model)
    method svm_set_print_string_function (line 2842) | public static void svm_set_print_string_function(svm_print_interface p...

FILE: Matlab/libsvm-3.19/java/libsvm/svm_model.java
  class svm_model (line 5) | public class svm_model implements java.io.Serializable

FILE: Matlab/libsvm-3.19/java/libsvm/svm_node.java
  class svm_node (line 2) | public class svm_node implements java.io.Serializable

FILE: Matlab/libsvm-3.19/java/libsvm/svm_parameter.java
  class svm_parameter (line 2) | public class svm_parameter implements Cloneable,java.io.Serializable
    method clone (line 36) | public Object clone()

FILE: Matlab/libsvm-3.19/java/libsvm/svm_print_interface.java
  type svm_print_interface (line 2) | public interface svm_print_interface
    method print (line 4) | public void print(String s);

FILE: Matlab/libsvm-3.19/java/libsvm/svm_problem.java
  class svm_problem (line 2) | public class svm_problem implements java.io.Serializable

FILE: Matlab/libsvm-3.19/java/svm_predict.java
  class svm_predict (line 5) | class svm_predict {
    method print (line 8) | public void print(String s) {}
    method print (line 13) | public void print(String s)
    method info (line 21) | static void info(String s)
    method atof (line 26) | private static double atof(String s)
    method atoi (line 31) | private static int atoi(String s)
    method predict (line 36) | private static void predict(BufferedReader input, DataOutputStream out...
    method exit_with_help (line 121) | private static void exit_with_help()
    method main (line 130) | public static void main(String argv[]) throws IOException

FILE: Matlab/libsvm-3.19/java/svm_scale.java
  class svm_scale (line 6) | class svm_scale
    method exit_with_help (line 22) | private static void exit_with_help()
    method rewind (line 36) | private BufferedReader rewind(BufferedReader fp, String filename) thro...
    method output_target (line 42) | private void output_target(double value)
    method output (line 58) | private void output(int index, double value)
    method readline (line 80) | private String readline(BufferedReader fp) throws IOException
    method run (line 86) | private void run(String []argv) throws IOException
    method main (line 345) | public static void main(String argv[]) throws IOException

FILE: Matlab/libsvm-3.19/java/svm_toy.java
  class svm_toy (line 8) | public class svm_toy extends Applet {
    class point (line 32) | class point {
      method point (line 33) | point(double x, double y, byte value)
    method init (line 46) | public void init()
    method draw_point (line 114) | void draw_point(point p)
    method clear_all (line 125) | void clear_all()
    method draw_all_points (line 136) | void draw_all_points()
    method button_change_clicked (line 143) | void button_change_clicked()
    method atof (line 149) | private static double atof(String s)
    method atoi (line 154) | private static int atoi(String s)
    method button_run_clicked (line 159) | void button_run_clicked(String args)
    method button_clear_clicked (line 366) | void button_clear_clicked()
    method button_save_clicked (line 371) | void button_save_clicked(String args)
    method button_load_clicked (line 409) | void button_load_clicked()
    method processMouseEvent (line 445) | protected void processMouseEvent(MouseEvent e)
    method paint (line 458) | public void paint(Graphics g)
    method getPreferredSize (line 470) | public Dimension getPreferredSize() { return new Dimension(XLEN,YLEN+5...
    method setSize (line 472) | public void setSize(Dimension d) { setSize(d.width,d.height); }
    method setSize (line 473) | public void setSize(int w,int h) {
    method main (line 480) | public static void main(String[] argv)
  class AppletFrame (line 486) | class AppletFrame extends Frame {
    method AppletFrame (line 487) | AppletFrame(String title, Applet applet, int width, int height)

FILE: Matlab/libsvm-3.19/java/svm_train.java
  class svm_train (line 5) | class svm_train {
    method print (line 17) | public void print(String s) {}
    method exit_with_help (line 20) | private static void exit_with_help()
    method do_cross_validation (line 54) | private void do_cross_validation()
    method run (line 92) | private void run(String argv[]) throws IOException
    method main (line 115) | public static void main(String argv[]) throws IOException
    method atof (line 121) | private static double atof(String s)
    method atoi (line 132) | private static int atoi(String s)
    method parse_command_line (line 137) | private void parse_command_line(String argv[])
    method read_problem (line 262) | private void read_problem() throws IOException

FILE: Matlab/libsvm-3.19/matlab/libsvmread.c
  type mwIndex (line 11) | typedef int mwIndex;
  function exit_with_help (line 21) | void exit_with_help()
  function fake_answer (line 28) | static void fake_answer(int nlhs, mxArray *plhs[])
  function read_problem (line 57) | void read_problem(const char *filename, int nlhs, mxArray *plhs[])
  function mexFunction (line 188) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/libsvm-3.19/matlab/libsvmwrite.c
  type mwIndex (line 8) | typedef int mwIndex;
  function exit_with_help (line 12) | void exit_with_help()
  function fake_answer (line 19) | static void fake_answer(int nlhs, mxArray *plhs[])
  function libsvmwrite (line 26) | void libsvmwrite(const char *filename, const mxArray *label_vec, const m...
  function mexFunction (line 84) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/libsvm-3.19/matlab/svm_model_matlab.c
  type mwIndex (line 9) | typedef int mwIndex;
  type svm_model (line 31) | struct svm_model
  type svm_model (line 211) | struct svm_model
  type svm_node (line 216) | struct svm_node
  type svm_model (line 217) | struct svm_model
  type svm_node (line 351) | struct svm_node
  type svm_node (line 351) | struct svm_node
  type svm_node (line 352) | struct svm_node
  type svm_node (line 352) | struct svm_node

FILE: Matlab/libsvm-3.19/matlab/svm_model_matlab.h
  type svm_model (line 1) | struct svm_model
  type svm_model (line 2) | struct svm_model

FILE: Matlab/libsvm-3.19/matlab/svmpredict.c
  type mwIndex (line 11) | typedef int mwIndex;
  function print_null (line 17) | int print_null(const char *s,...) {}
  function read_sparse_instance (line 20) | void read_sparse_instance(const mxArray *prhs, int index, struct svm_nod...
  function fake_answer (line 42) | static void fake_answer(int nlhs, mxArray *plhs[])
  function predict (line 49) | void predict(int nlhs, mxArray *plhs[], const mxArray *prhs[], struct sv...
  function exit_with_help (line 255) | void exit_with_help()
  function mexFunction (line 272) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/libsvm-3.19/matlab/svmtrain.c
  type mwIndex (line 12) | typedef int mwIndex;
  function print_null (line 19) | void print_null(const char *s) {}
  function print_string_matlab (line 20) | void print_string_matlab(const char *s) {mexPrintf(s);}
  function exit_with_help (line 22) | void exit_with_help()
  type svm_parameter (line 56) | struct svm_parameter
  type svm_problem (line 57) | struct svm_problem
  type svm_model (line 58) | struct svm_model
  type svm_node (line 59) | struct svm_node
  function do_cross_validation (line 64) | double do_cross_validation()
  function parse_command_line (line 108) | int parse_command_line(int nrhs, const mxArray *prhs[], char *model_file...
  function read_problem_dense (line 222) | int read_problem_dense(const mxArray *label_vec, const mxArray *instance...
  function read_problem_sparse (line 302) | int read_problem_sparse(const mxArray *label_vec, const mxArray *instanc...
  function fake_answer (line 375) | static void fake_answer(int nlhs, mxArray *plhs[])
  function mexFunction (line 384) | void mexFunction( int nlhs, mxArray *plhs[],

FILE: Matlab/libsvm-3.19/python/svm.py
  function print_null (line 42) | def print_null(s):
  function genFields (line 45) | def genFields(names, types):
  function fillprototype (line 48) | def fillprototype(f, restype, argtypes):
  class svm_node (line 52) | class svm_node(Structure):
    method __str__ (line 57) | def __str__(self):
  function gen_svm_nodearray (line 60) | def gen_svm_nodearray(xi, feature_max=None, isKernel=None):
  class svm_problem (line 87) | class svm_problem(Structure):
    method __init__ (line 92) | def __init__(self, y, x, isKernel=None):
  class svm_parameter (line 111) | class svm_parameter(Structure):
    method __init__ (line 120) | def __init__(self, options = None):
    method __str__ (line 125) | def __str__(self):
    method set_to_default_values (line 135) | def set_to_default_values(self):
    method parse_options (line 155) | def parse_options(self, options):
  class svm_model (line 230) | class svm_model(Structure):
    method __init__ (line 239) | def __init__(self):
    method __del__ (line 242) | def __del__(self):
    method get_svm_type (line 247) | def get_svm_type(self):
    method get_nr_class (line 250) | def get_nr_class(self):
    method get_svr_probability (line 253) | def get_svr_probability(self):
    method get_labels (line 256) | def get_labels(self):
    method get_sv_indices (line 262) | def get_sv_indices(self):
    method get_nr_sv (line 268) | def get_nr_sv(self):
    method is_probability_model (line 271) | def is_probability_model(self):
    method get_sv_coef (line 274) | def get_sv_coef(self):
    method get_SV (line 278) | def get_SV(self):
  function toPyModel (line 293) | def toPyModel(model_ptr):

FILE: Matlab/libsvm-3.19/python/svmutil.py
  function svm_read_problem (line 14) | def svm_read_problem(data_file_name):
  function svm_load_model (line 36) | def svm_load_model(model_file_name):
  function svm_save_model (line 49) | def svm_save_model(model_file_name, model):
  function evaluations (line 57) | def evaluations(ty, pv):
  function svm_train (line 86) | def svm_train(arg1, arg2=None, arg3=None):
  function svm_predict (line 173) | def svm_predict(y, x, m, options=""):

FILE: Matlab/libsvm-3.19/svm-predict.c
  function print_null (line 8) | int print_null(const char *s,...) {return 0;}
  type svm_node (line 12) | struct svm_node
  type svm_model (line 15) | struct svm_model
  function exit_input_error (line 39) | void exit_input_error(int line_num)
  function predict (line 45) | void predict(FILE *input, FILE *output)
  function exit_with_help (line 159) | void exit_with_help()
  function main (line 170) | int main(int argc, char **argv)

FILE: Matlab/libsvm-3.19/svm-scale.c
  function exit_with_help (line 7) | void exit_with_help()
  function main (line 42) | int main(int argc,char **argv)
  function output_target (line 350) | void output_target(double value)
  function output (line 364) | void output(int index, double value)
  function clean_up (line 386) | int clean_up(FILE *fp_restore, FILE *fp, const char* msg)

FILE: Matlab/libsvm-3.19/svm-toy/gtk/callbacks.cpp
  function svm_toy_initialize (line 42) | void svm_toy_initialize()
  function redraw_area (line 61) | void redraw_area(GtkWidget* widget, int x, int y, int w, int h)
  function draw_point (line 69) | void draw_point(const point& p)
  function draw_all_points (line 76) | void draw_all_points()
  function clear_all (line 82) | void clear_all()
  function on_button_change_clicked (line 90) | void
  function on_button_run_clicked (line 98) | void
  function on_button_clear_clicked (line 302) | void
  function on_window1_destroy (line 309) | void
  function gboolean (line 316) | gboolean
  function gboolean (line 327) | gboolean
  function show_fileselection (line 341) | void show_fileselection()
  function on_button_save_clicked (line 357) | void
  function on_button_load_clicked (line 366) | void
  function on_filesel_ok_clicked (line 374) | void
  function on_fileselection_destroy (line 437) | void
  function on_filesel_cancel_clicked (line 443) | void

FILE: Matlab/libsvm-3.19/svm-toy/gtk/interface.c
  function GtkWidget (line 16) | GtkWidget*
  function GtkWidget (line 130) | GtkWidget*

FILE: Matlab/libsvm-3.19/svm-toy/gtk/main.c
  function main (line 10) | int main (int argc, char *argv[])

FILE: Matlab/libsvm-3.19/svm-toy/qt/svm-toy.cpp
  class SvmToyWindow (line 25) | class SvmToyWindow : public QWidget
    type point (line 49) | struct point {
    method QPixmap (line 55) | const QPixmap& choose_icon(int v)
    method clear_all (line 61) | void clear_all()
    method draw_point (line 67) | void draw_point(const point& p)
    method draw_all_points (line 73) | void draw_all_points()
    method button_change_icon_clicked (line 79) | void button_change_icon_clicked()
    method button_run_clicked (line 85) | void button_run_clicked()
    method button_clear_clicked (line 280) | void button_clear_clicked()
    method button_save_clicked (line 284) | void button_save_clicked()
    method button_load_clicked (line 313) | void button_load_clicked()
  function main (line 428) | int main( int argc, char* argv[] )

FILE: Matlab/libsvm-3.19/svm-toy/windows/svm-toy.cpp
  type point (line 48) | struct point {
  function WinMain (line 58) | int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  function getfilename (line 128) | int getfilename( HWND hWnd , char *filename, int len, int save)
  function clear_all (line 143) | void clear_all()
  function HBRUSH (line 150) | HBRUSH choose_brush(int v)
  function draw_point (line 157) | void draw_point(const point & p)
  function draw_all_points (line 168) | void draw_all_points()
  function button_run_clicked (line 174) | void button_run_clicked()
  function LRESULT (line 372) | LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lPa...

FILE: Matlab/libsvm-3.19/svm-train.c
  function print_null (line 9) | void print_null(const char *s) {}
  function exit_with_help (line 11) | void exit_with_help()
  function exit_input_error (line 45) | void exit_input_error(int line_num)
  type svm_parameter (line 55) | struct svm_parameter
  type svm_problem (line 56) | struct svm_problem
  type svm_model (line 57) | struct svm_model
  type svm_node (line 58) | struct svm_node
  function main (line 83) | int main(int argc, char **argv)
  function do_cross_validation (line 122) | void do_cross_validation()
  function parse_command_line (line 161) | void parse_command_line(int argc, char **argv, char *input_file_name, ch...
  function read_problem (line 278) | void read_problem(const char *filename)

FILE: Matlab/libsvm-3.19/svm.cpp
  function T (line 15) | static inline T min(T x,T y) { return (x<y)?x:y; }
  function T (line 18) | static inline T max(T x,T y) { return (x>y)?x:y; }
  function swap (line 20) | static inline void swap(T& x, T& y) { T t=x; x=y; y=t; }
  function clone (line 21) | static inline void clone(T*& dst, S* src, int n)
  function powi (line 26) | static inline double powi(double base, int times)
  function print_string_stdout (line 41) | static void print_string_stdout(const char *s)
  function info (line 48) | static void info(const char *fmt,...)
  function info (line 58) | static void info(const char *fmt,...) {}
  class Cache (line 67) | class Cache
    type head_t (line 81) | struct head_t
  class QMatrix (line 194) | class QMatrix {
  class Kernel (line 202) | class Kernel: public QMatrix {
    method swap_index (line 211) | virtual void swap_index(int i, int j) const	// no so const...
    method kernel_linear (line 231) | double kernel_linear(int i, int j) const
    method kernel_poly (line 235) | double kernel_poly(int i, int j) const
    method kernel_rbf (line 239) | double kernel_rbf(int i, int j) const
    method kernel_sigmoid (line 243) | double kernel_sigmoid(int i, int j) const
    method kernel_precomputed (line 247) | double kernel_precomputed(int i, int j) const
  class Solver (line 393) | class Solver {
    method Solver (line 395) | Solver() {}
    type SolutionInfo (line 398) | struct SolutionInfo {
    method get_C (line 426) | double get_C(int i)
    method update_alpha_status (line 430) | void update_alpha_status(int i)
    method is_upper_bound (line 438) | bool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; }
    method is_lower_bound (line 439) | bool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; }
    method is_free (line 440) | bool is_free(int i) { return alpha_status[i] == FREE; }
  class Solver_NU (line 1009) | class Solver_NU: public Solver
    method Solver_NU (line 1012) | Solver_NU() {}
    method Solve (line 1013) | void Solve(int l, const QMatrix& Q, const double *p, const schar *y,
  class SVC_Q (line 1266) | class SVC_Q: public Kernel
    method SVC_Q (line 1269) | SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar...
    method Qfloat (line 1279) | Qfloat *get_Q(int i, int len) const
    method swap_index (line 1296) | void swap_index(int i, int j) const
  class ONE_CLASS_Q (line 1316) | class ONE_CLASS_Q: public Kernel
    method ONE_CLASS_Q (line 1319) | ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param)
    method Qfloat (line 1328) | Qfloat *get_Q(int i, int len) const
    method swap_index (line 1345) | void swap_index(int i, int j) const
  class SVR_Q (line 1362) | class SVR_Q: public Kernel
    method SVR_Q (line 1365) | SVR_Q(const svm_problem& prob, const svm_parameter& param)
    method swap_index (line 1387) | void swap_index(int i, int j) const
    method Qfloat (line 1394) | Qfloat *get_Q(int i, int len) const
  function solve_c_svc (line 1440) | static void solve_c_svc(
  function solve_nu_svc (line 1475) | static void solve_nu_svc(
  function solve_one_class (line 1530) | static void solve_one_class(
  function solve_epsilon_svr (line 1562) | static void solve_epsilon_svr(
  function solve_nu_svr (line 1600) | static void solve_nu_svr(
  type decision_function (line 1641) | struct decision_function
  function decision_function (line 1647) | static decision_function svm_train_one(
  function sigmoid_train (line 1705) | static void sigmoid_train(
  function sigmoid_predict (line 1818) | static double sigmoid_predict(double decision_value, double A, double B)
  function multiclass_probability (line 1829) | static void multiclass_probability(int k, double **r, double *p)
  function svm_binary_svc_probability (line 1893) | static void svm_binary_svc_probability(
  function svm_svr_probability (line 1980) | static double svm_svr_probability(
  function svm_group_classes (line 2014) | static void svm_group_classes(const svm_problem *prob, int *nr_class_ret...
  function svm_model (line 2092) | svm_model *svm_train(const svm_problem *prob, const svm_parameter *param)
  function svm_cross_validation (line 2339) | void svm_cross_validation(const svm_problem *prob, const svm_parameter *...
  function svm_get_svm_type (line 2460) | int svm_get_svm_type(const svm_model *model)
  function svm_get_nr_class (line 2465) | int svm_get_nr_class(const svm_model *model)
  function svm_get_labels (line 2470) | void svm_get_labels(const svm_model *model, int* label)
  function svm_get_sv_indices (line 2477) | void svm_get_sv_indices(const svm_model *model, int* indices)
  function svm_get_nr_sv (line 2484) | int svm_get_nr_sv(const svm_model *model)
  function svm_get_svr_probability (line 2489) | double svm_get_svr_probability(const svm_model *model)
  function svm_predict_values (line 2501) | double svm_predict_values(const svm_model *model, const svm_node *x, dou...
  function svm_predict (line 2577) | double svm_predict(const svm_model *model, const svm_node *x)
  function svm_predict_probability (line 2592) | double svm_predict_probability(
  function svm_save_model (line 2641) | int svm_save_model(const char *model_file_name, const svm_model *model)
  function read_model_header (line 2764) | bool read_model_header(FILE *fp, svm_model* model)
  function svm_model (line 2873) | svm_model *svm_load_model(const char *model_file_name)
  function svm_free_model_content (line 2978) | void svm_free_model_content(svm_model* model_ptr)
  function svm_free_and_destroy_model (line 3013) | void svm_free_and_destroy_model(svm_model** model_ptr_ptr)
  function svm_destroy_param (line 3023) | void svm_destroy_param(svm_parameter* param)
  function svm_check_probability_model (line 3150) | int svm_check_probability_model(const svm_model *model)
  function svm_set_print_string_function (line 3158) | void svm_set_print_string_function(void (*print_func)(const char *))

FILE: Matlab/libsvm-3.19/svm.h
  type svm_node (line 12) | struct svm_node
  type svm_problem (line 18) | struct svm_problem
  type svm_parameter (line 28) | struct svm_parameter
  type svm_model (line 52) | struct svm_model
  type svm_model (line 74) | struct svm_model
  type svm_problem (line 74) | struct svm_problem
  type svm_parameter (line 74) | struct svm_parameter
  type svm_problem (line 75) | struct svm_problem
  type svm_parameter (line 75) | struct svm_parameter
  type svm_model (line 77) | struct svm_model
  type svm_model (line 78) | struct svm_model
  type svm_model (line 80) | struct svm_model
  type svm_model (line 81) | struct svm_model
  type svm_model (line 82) | struct svm_model
  type svm_model (line 83) | struct svm_model
  type svm_model (line 84) | struct svm_model
  type svm_model (line 85) | struct svm_model
  type svm_model (line 87) | struct svm_model
  type svm_node (line 87) | struct svm_node
  type svm_model (line 88) | struct svm_model
  type svm_node (line 88) | struct svm_node
  type svm_model (line 89) | struct svm_model
  type svm_node (line 89) | struct svm_node
  type svm_model (line 91) | struct svm_model
  type svm_model (line 92) | struct svm_model
  type svm_parameter (line 93) | struct svm_parameter
  type svm_problem (line 95) | struct svm_problem
  type svm_parameter (line 95) | struct svm_parameter
  type svm_model (line 96) | struct svm_model

FILE: Matlab/libsvm-3.19/tools/checkdata.py
  function err (line 18) | def err(line_no, msg):
  function my_float (line 22) | def my_float(x):
  function main (line 28) | def main():

FILE: Matlab/libsvm-3.19/tools/grid.py
  class GridOption (line 17) | class GridOption:
    method __init__ (line 18) | def __init__(self, dataset_pathname, options):
    method parse_options (line 40) | def parse_options(self, options):
  function redraw (line 105) | def redraw(db,best_param,gnuplot,options,tofile=False):
  function calculate_jobs (line 159) | def calculate_jobs(options):
  class WorkerStopToken (line 241) | class WorkerStopToken:  # used to notify the worker to stop or if a work...
  class Worker (line 244) | class Worker(Thread):
    method __init__ (line 245) | def __init__(self,name,job_queue,result_queue,options):
    method run (line 252) | def run(self):
    method get_cmd (line 278) | def get_cmd(self,c,g):
  class LocalWorker (line 289) | class LocalWorker(Worker):
    method run_one (line 290) | def run_one(self,c,g):
  class SSHWorker (line 297) | class SSHWorker(Worker):
    method __init__ (line 298) | def __init__(self,name,job_queue,result_queue,host,options):
    method run_one (line 302) | def run_one(self,c,g):
  class TelnetWorker (line 310) | class TelnetWorker(Worker):
    method __init__ (line 311) | def __init__(self,name,job_queue,result_queue,host,username,password,o...
    method run (line 316) | def run(self):
    method run_one (line 331) | def run_one(self,c,g):
  function find_parameters (line 339) | def find_parameters(dataset_pathname, options=''):
  function exit_with_help (line 465) | def exit_with_help():

FILE: Matlab/libsvm-3.19/tools/subset.py
  function exit_with_help (line 9) | def exit_with_help(argv):
  function process_options (line 25) | def process_options(argv):
  function random_selection (line 56) | def random_selection(dataset, subset_size):
  function stratified_selection (line 60) | def stratified_selection(dataset, subset_size):
  function main (line 89) | def main(argv=sys.argv):
Condensed preview — 178 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,840K chars).
[
  {
    "path": "C++/README.txt",
    "chars": 718,
    "preview": "ļ嵥\r\nliveness.cpp\r\nliveness.hͷļ\r\nsvm_modelѵsvmģ\r\nsvm_minmaxʱһIJ\r\n./lbpLBPȡ\r\n./libsvm-3.19LibSVM\r\n\r\nҪĿcppļ\r\nliveness.cpp\r\n."
  },
  {
    "path": "C++/lbp/CMakeLists.txt",
    "chars": 212,
    "preview": "PROJECT(githublbp)\nSET(CMAKE_BUILD_TYPE Release)\nCMAKE_MINIMUM_REQUIRED( VERSION 2.6 )\nFIND_PACKAGE( OpenCV REQUIRED )\nA"
  },
  {
    "path": "C++/lbp/LICENSE",
    "chars": 1512,
    "preview": "Copyright (c) 2011, philipp <bytefish[at]gmx.de>\nAll rights reserved.\n\nRedistribution and use in source and binary forms"
  },
  {
    "path": "C++/lbp/histogram.cpp",
    "chars": 3581,
    "preview": "#include \"histogram.hpp\"\n#include <vector>\n\ntemplate <typename _Tp>\nvoid lbp::histogram_(const Mat& src, Mat& hist, int "
  },
  {
    "path": "C++/lbp/histogram.hpp",
    "chars": 1095,
    "preview": "#ifndef HISTOGRAM_HPP_\n#define HISTOGRAM_HPP_\n\n//! \\author philipp <bytefish[at]gmx[dot]de>\n//! \\copyright BSD, see LICE"
  },
  {
    "path": "C++/lbp/lbp.cpp",
    "chars": 6123,
    "preview": "#include \"lbp.hpp\"\n#define M_PI 3.14159265358979323846\n\nusing namespace cv;\n\ntemplate <typename _Tp>\nvoid lbp::OLBP_(con"
  },
  {
    "path": "C++/lbp/lbp.hpp",
    "chars": 910,
    "preview": "#ifndef LBP_HPP_\n#define LBP_HPP_\n\n//! \\author philipp <bytefish[at]gmx[dot]de>\n//! \\copyright BSD, see LICENSE.\n\n#inclu"
  },
  {
    "path": "C++/lbp/main.cpp",
    "chars": 3362,
    "preview": "#include <cv.h>\n#include <highgui.h>\n#include \"lbp.hpp\"\n#include \"histogram.hpp\"\n\nusing namespace cv;\n\nint main(int argc"
  },
  {
    "path": "C++/lbp/mapping_n16.txt",
    "chars": 262033,
    "preview": "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"
  },
  {
    "path": "C++/lbp/mapping_n8.txt",
    "chars": 757,
    "preview": "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\t5"
  },
  {
    "path": "C++/liveness.cpp",
    "chars": 13458,
    "preview": "#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 Feat"
  },
  {
    "path": "C++/liveness.h",
    "chars": 1434,
    "preview": "#include <iostream>\r\n#include <fstream>\r\n#include <sstream>\r\n#include <iomanip>\r\n#include <vector>\r\n#include <opencv2\\op"
  },
  {
    "path": "C++/svm_minmax_NUAA.txt",
    "chars": 84169,
    "preview": "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"
  },
  {
    "path": "C++/test.cpp",
    "chars": 854,
    "preview": "#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\tThuVisionFaceL"
  },
  {
    "path": "Matlab/DoG.m",
    "chars": 440,
    "preview": "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%% I"
  },
  {
    "path": "Matlab/DoGLBP_Test.m",
    "chars": 2371,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUA"
  },
  {
    "path": "Matlab/DoG_CASIA_Test.m",
    "chars": 2874,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/DoG_CASIA_Train.m",
    "chars": 2285,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/DoG_LBP_All_Train.m",
    "chars": 2824,
    "preview": "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\n"
  },
  {
    "path": "Matlab/DoG_LBP_CASIA_Test.m",
    "chars": 2931,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/DoG_LBP_CASIA_Train.m",
    "chars": 2348,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/DoG_LBP_NUAA_Test.m",
    "chars": 1902,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUA"
  },
  {
    "path": "Matlab/DoG_LBP_NUAA_Train.m",
    "chars": 2239,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
  },
  {
    "path": "Matlab/DoG_LBP_PRINT_ATTACK_Test.m",
    "chars": 3444,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/DoG_LBP_PRINT_ATTACK_Train.m",
    "chars": 2782,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/DoG_NUAA_Test.m",
    "chars": 1714,
    "preview": "% clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./N"
  },
  {
    "path": "Matlab/DoG_NUAA_Train.m",
    "chars": 2018,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
  },
  {
    "path": "Matlab/DoG_PRINT_ATTACK_Test.m",
    "chars": 3385,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/DoG_PRINT_ATTACK_Train.m",
    "chars": 2719,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/HFD.m",
    "chars": 882,
    "preview": "%% High Frequency Descriptor\r\nfunction HFD = HFD(Image, ThresholdFrequency, ImageSize, HighFrequencyRadius)\r\n%% default "
  },
  {
    "path": "Matlab/HFDTest.m",
    "chars": 1740,
    "preview": "% clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./N"
  },
  {
    "path": "Matlab/HFDTrain.m",
    "chars": 1801,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
  },
  {
    "path": "Matlab/HOOF/README",
    "chars": 1955,
    "preview": "This code has been provided only for research purposes. If you want to use this for commerical purposes, you will need a"
  },
  {
    "path": "Matlab/HOOF/README~",
    "chars": 1875,
    "preview": "This code has been provided only for research purposes. If you want to use this for commerical purposes, you will need a"
  },
  {
    "path": "Matlab/HOOF/chiSquareDist.m",
    "chars": 284,
    "preview": "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"
  },
  {
    "path": "Matlab/HOOF/computeDistanceModularHistogram.m",
    "chars": 1449,
    "preview": "function dist = computeDistanceModularHistogram(hist1, hist2)\r\n\r\n% dist = computeDistanceModularHistogram(hist1, hist2)\r"
  },
  {
    "path": "Matlab/HOOF/computeDistanceOrdinalHistogram.m",
    "chars": 679,
    "preview": "function dist = computeDistanceOrdinalHistogram(hist1, hist2)\r\n% dist = computeDistanceOrdinalHistogram(hist1, hist2)\r\n%"
  },
  {
    "path": "Matlab/HOOF/computeDistancesBetweenKPCASystems.m",
    "chars": 7835,
    "preview": "function distances = computeDistancesBetweenKPCASystems(sysParams,metric,kernel)\r\n\r\n% function distances =\r\n% computeDis"
  },
  {
    "path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystems.m",
    "chars": 1710,
    "preview": "function angles = findSubspaceAnglesBetweenKPCASystems(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesBetweenKP"
  },
  {
    "path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystemsSqrtHist.asv",
    "chars": 1478,
    "preview": "function angles = findSubspaceAnglesBetweenKPCASystemsSqrtHist(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesB"
  },
  {
    "path": "Matlab/HOOF/findSubspaceAnglesBetweenKPCASystemsSqrtHist.m",
    "chars": 1474,
    "preview": "function angles = findSubspaceAnglesBetweenKPCASystemsSqrtHist(sysParams1, sysParams2)\r\n\r\n% angles = findSubspaceAnglesB"
  },
  {
    "path": "Matlab/HOOF/gradientHistogram.m",
    "chars": 1693,
    "preview": "function ohog = gradientHistogram(Fx,Fy,binSize)\r\n% Compute HOOF feature\r\n% INPUTS\r\n%   Fx      - X-flow \r\n%   Fy\t    - "
  },
  {
    "path": "Matlab/HOOF/histogramKernel.m",
    "chars": 834,
    "preview": "function [ output ] = histogramKernel( hist1, hist2 )\n%HISTOGRAMKERNEL find the 'histogram kernel' between time series o"
  },
  {
    "path": "Matlab/HOOF/identifySystemUsingKPCA.m",
    "chars": 1312,
    "preview": "function sysParams = identifySystemUsingKPCA(Yoriginal,kernelMatrix, order)\r\n\r\n% sysParams = identifySystemUsingKPCA(Yor"
  },
  {
    "path": "Matlab/HOOF/traceKernelKPCASystems.m",
    "chars": 1131,
    "preview": "function kernel = traceKernelKPCASystems(sysParams1, sysParams2, lambda)\r\n\r\n% (c) Rizwan Chaudhry - JHU Vision Lab\r\n\r\nY_"
  },
  {
    "path": "Matlab/HOOF/traceKernelKPCASystemsSqrtHist.m",
    "chars": 894,
    "preview": "function kernel = traceKernelKPCASystemsSqrtHist(sysParams1, sysParams2, lambda)\r\n\r\n% (c) Rizwan Chaudhry - JHU Vision L"
  },
  {
    "path": "Matlab/HOOF.m",
    "chars": 724,
    "preview": "function Feature = HOOF(OF, bins, blocks)\r\nFeature = zeros(1, bins * blocks * blocks);\r\n[h, w] = size(OF);\r\nOF(isnan(OF)"
  },
  {
    "path": "Matlab/HSoptflow.m",
    "chars": 2502,
    "preview": "function [us,vs] = HSoptflow(Xrgb,n)\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n% Author: Gregory P"
  },
  {
    "path": "Matlab/LBP_CASIA_Test.m",
    "chars": 2894,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/LBP_CASIA_Train.m",
    "chars": 2305,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/LBP_NUAA_Test.m",
    "chars": 1852,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\nClientTestNormalizedName = importdata('./NUA"
  },
  {
    "path": "Matlab/LBP_NUAA_Train.m",
    "chars": 2150,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter training data name\r\nClientTrainNormalizedName = importdata('./N"
  },
  {
    "path": "Matlab/LBP_PRINT_ATTACK_Test.m",
    "chars": 3405,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/LBP_PRINT_ATTACK_Train.m",
    "chars": 2739,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/LBP_feature.m",
    "chars": 834,
    "preview": "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="
  },
  {
    "path": "Matlab/NUAA/client_test_normalized.txt",
    "chars": 93425,
    "preview": "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\\001"
  },
  {
    "path": "Matlab/NUAA/client_train_normalized.txt",
    "chars": 48376,
    "preview": "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_"
  },
  {
    "path": "Matlab/NUAA/imposter_test_normalized.txt",
    "chars": 160034,
    "preview": "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_"
  },
  {
    "path": "Matlab/NUAA/imposter_train_normalized.txt",
    "chars": 48562,
    "preview": "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_"
  },
  {
    "path": "Matlab/NUAA/readme.txt",
    "chars": 1241,
    "preview": "short description\r\n\r\nThis directory contains the geometrically normalized face images based on the two eyes' coordinates"
  },
  {
    "path": "Matlab/OF_All_Train.m",
    "chars": 1310,
    "preview": "clear all, close all, clc\r\n\r\n%% load libsvm\r\naddpath('./libsvm-3.19/matlab');\r\nTrainFeatureAll = [];\r\nTrainTruth = [];\r\n"
  },
  {
    "path": "Matlab/OF_CASIA_Test.m",
    "chars": 3822,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/OF_CASIA_Train.m",
    "chars": 3210,
    "preview": "clear all, close all, clc\r\n\r\n%% read client and imposter testing data name\r\naddpath('./libsvm-3.19/matlab');\r\naddpath('."
  },
  {
    "path": "Matlab/OF_PRINT_ATTACK_Test.m",
    "chars": 4330,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/OF_PRINT_ATTACK_Train.m",
    "chars": 3728,
    "preview": "% 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% "
  },
  {
    "path": "Matlab/RealTime_DoGLBP.m",
    "chars": 2191,
    "preview": "clear all, close all, clc\r\n\r\n%% camera\r\nadaptorname = 'winvideo';\r\ninfo = imaqhwinfo(adaptorname);\r\ndeviceID = info.Devi"
  },
  {
    "path": "Matlab/RealTime_OF.m",
    "chars": 2180,
    "preview": "clear all, close all, clc\r\n\r\n%% camera\r\nadaptorname = 'winvideo';\r\ninfo = imaqhwinfo(adaptorname);\r\ndeviceID = info.Devi"
  },
  {
    "path": "Matlab/Save_CASIA_Test.m",
    "chars": 1200,
    "preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\ncount_real = 0;\r\ncount_fake"
  },
  {
    "path": "Matlab/Save_CASIA_Train.m",
    "chars": 1204,
    "preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [100,100]);\r\ncount_real = 0;\r\ncount_fake"
  },
  {
    "path": "Matlab/Save_NUAA.m",
    "chars": 1502,
    "preview": "clear all, close all, clc\r\n\r\nClientTrainNormalizedName = importdata('./NUAA/client_train_normalized.txt');\r\nClientTrainN"
  },
  {
    "path": "Matlab/Save_PRINT_ATTACK_Test.m",
    "chars": 1745,
    "preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'009', '011', '0"
  },
  {
    "path": "Matlab/Save_PRINT_ATTACK_Train.m",
    "chars": 1713,
    "preview": "clear all, close all, clc\r\n\r\ndetector = vision.CascadeObjectDetector('MinSize', [50,50]);\r\nfileIndex = {'001', '002', '0"
  },
  {
    "path": "Matlab/lbp-0.3.3/getmapping.m",
    "chars": 2748,
    "preview": "%GETMAPPING returns a structure containing a mapping table for LBP codes.\r\n%  MAPPING = GETMAPPING(SAMPLES,MAPPINGTYPE) "
  },
  {
    "path": "Matlab/lbp-0.3.3/lbp.m",
    "chars": 6514,
    "preview": "%LBP returns the local binary pattern image or LBP histogram of an image.\r\n%  J = LBP(I,R,N,MAPPING,MODE) returns either"
  },
  {
    "path": "Matlab/liblinear-1.96/COPYRIGHT",
    "chars": 1486,
    "preview": "\nCopyright (c) 2007-2014 The LIBLINEAR Project.\nAll rights reserved.\n\nRedistribution and use in source and binary forms,"
  },
  {
    "path": "Matlab/liblinear-1.96/Makefile",
    "chars": 993,
    "preview": "CXX ?= g++\nCC ?= gcc\nCFLAGS = -Wall -Wconversion -O3 -fPIC\nLIBS = blas/blas.a\nSHVER = 2\nOS = $(shell uname)\n#LIBS = -lbl"
  },
  {
    "path": "Matlab/liblinear-1.96/Makefile.win",
    "chars": 900,
    "preview": "#You must ensure nmake.exe, cl.exe, link.exe are in system path.\n#VCVARS32.bat\n#Under dosbox prompt\n#nmake -f Makefile.w"
  },
  {
    "path": "Matlab/liblinear-1.96/README",
    "chars": 20224,
    "preview": "LIBLINEAR is a simple package for solving large-scale regularized linear \nclassification and regression. It currently su"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/Makefile",
    "chars": 293,
    "preview": "AR     = ar rcv\nRANLIB = ranlib \n\nHEADERS = blas.h blasp.h\nFILES = dnrm2.o daxpy.o ddot.o dscal.o \n\nCFLAGS = $(OPTFLAGS)"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/blas.h",
    "chars": 702,
    "preview": "/* blas.h  --  C header file for BLAS                         Ver 1.0 */\n/* Jesse Bennett                               "
  },
  {
    "path": "Matlab/liblinear-1.96/blas/blasp.h",
    "chars": 16529,
    "preview": "/* blasp.h  --  C prototypes for BLAS                         Ver 1.0 */\n/* Jesse Bennett                               "
  },
  {
    "path": "Matlab/liblinear-1.96/blas/daxpy.c",
    "chars": 1274,
    "preview": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint daxpy_(int *n, double *sa, double *sx, int *incx, double "
  },
  {
    "path": "Matlab/liblinear-1.96/blas/ddot.c",
    "chars": 1280,
    "preview": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ndouble ddot_(int *n, double *sx, int *incx, double *sy, int *"
  },
  {
    "path": "Matlab/liblinear-1.96/blas/dnrm2.c",
    "chars": 1375,
    "preview": "#include <math.h>  /* Needed for fabs() and sqrt() */\n#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ndouble "
  },
  {
    "path": "Matlab/liblinear-1.96/blas/dscal.c",
    "chars": 1104,
    "preview": "#include \"blas.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint dscal_(int *n, double *sa, double *sx, int *incx)\n{\n  lon"
  },
  {
    "path": "Matlab/liblinear-1.96/heart_scale",
    "chars": 27670,
    "preview": "+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."
  },
  {
    "path": "Matlab/liblinear-1.96/linear.cpp",
    "chars": 57430,
    "preview": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <locale.h>\n#in"
  },
  {
    "path": "Matlab/liblinear-1.96/linear.def",
    "chars": 426,
    "preview": "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"
  },
  {
    "path": "Matlab/liblinear-1.96/linear.h",
    "chars": 2211,
    "preview": "#ifndef _LIBLINEAR_H\n#define _LIBLINEAR_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct feature_node\n{\n\tint index;\n\tdo"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/Makefile",
    "chars": 1504,
    "preview": "# This Makefile is used under Linux\n\nMATLABDIR ?= /usr/local/matlab\nCXX ?= g++\n#CXX = g++-3.3\nCC ?= gcc\nCFLAGS = -Wall -"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/README",
    "chars": 7470,
    "preview": "--------------------------------------------\n--- MATLAB/OCTAVE interface of LIBLINEAR ---\n------------------------------"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/libsvmread.c",
    "chars": 4063,
    "preview": "#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#ifd"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/libsvmwrite.c",
    "chars": 2341,
    "preview": "#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 < 0x070300"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/linear_model_matlab.c",
    "chars": 3545,
    "preview": "#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 < 0x0"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/linear_model_matlab.h",
    "chars": 166,
    "preview": "const char *model_to_matlab_structure(mxArray *plhs[], struct model *model_);\nconst char *matlab_matrix_to_model(struct "
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/make.m",
    "chars": 1089,
    "preview": "% 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(str"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/predict.c",
    "chars": 8517,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../linear.h\"\n\n#include \"mex.h\"\n#include \"linear_mod"
  },
  {
    "path": "Matlab/liblinear-1.96/matlab/train.c",
    "chars": 10861,
    "preview": "#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"
  },
  {
    "path": "Matlab/liblinear-1.96/predict.c",
    "chars": 5338,
    "preview": "#include <stdio.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include \"linear.h\"\n\nin"
  },
  {
    "path": "Matlab/liblinear-1.96/python/Makefile",
    "chars": 32,
    "preview": "all = lib\n\nlib:\n\tmake -C .. lib\n"
  },
  {
    "path": "Matlab/liblinear-1.96/python/README",
    "chars": 12195,
    "preview": "-------------------------------------\n--- Python interface of LIBLINEAR ---\n-------------------------------------\n\nTable"
  },
  {
    "path": "Matlab/liblinear-1.96/python/liblinear.py",
    "chars": 9373,
    "preview": "#!/usr/bin/env python\n\nfrom ctypes import *\nfrom ctypes.util import find_library\nfrom os import path\nimport sys\n\n__all__"
  },
  {
    "path": "Matlab/liblinear-1.96/python/liblinearutil.py",
    "chars": 8208,
    "preview": "#!/usr/bin/env python\n\nimport os, sys\nsys.path = [os.path.dirname(os.path.abspath(__file__))] + sys.path \nfrom liblinear"
  },
  {
    "path": "Matlab/liblinear-1.96/train.c",
    "chars": 9109,
    "preview": "#include <stdio.h>\n#include <math.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#incl"
  },
  {
    "path": "Matlab/liblinear-1.96/tron.cpp",
    "chars": 5186,
    "preview": "#include <math.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include \"tron.h\"\n\n#ifndef min\ntemplate <cl"
  },
  {
    "path": "Matlab/liblinear-1.96/tron.h",
    "chars": 687,
    "preview": "#ifndef _TRON_H\n#define _TRON_H\n\nclass function\n{\npublic:\n\tvirtual double fun(double *w) = 0 ;\n\tvirtual void grad(double"
  },
  {
    "path": "Matlab/libsvm-3.19/COPYRIGHT",
    "chars": 1497,
    "preview": "\nCopyright (c) 2000-2014 Chih-Chung Chang and Chih-Jen Lin\nAll rights reserved.\n\nRedistribution and use in source and bi"
  },
  {
    "path": "Matlab/libsvm-3.19/FAQ.html",
    "chars": 78969,
    "preview": "\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.c"
  },
  {
    "path": "Matlab/libsvm-3.19/Makefile",
    "chars": 732,
    "preview": "CXX ?= g++\nCFLAGS = -Wall -Wconversion -O3 -fPIC\nSHVER = 2\nOS = $(shell uname)\n\nall: svm-train svm-predict svm-scale\n\nli"
  },
  {
    "path": "Matlab/libsvm-3.19/Makefile.win",
    "chars": 1084,
    "preview": "#You must ensure nmake.exe, cl.exe, link.exe are in system path.\n#VCVARS32.bat\n#Under dosbox prompt\n#nmake -f Makefile.w"
  },
  {
    "path": "Matlab/libsvm-3.19/README",
    "chars": 28544,
    "preview": "Libsvm is a simple, easy-to-use, and efficient software for SVM\nclassification and regression. It solves C-SVM classific"
  },
  {
    "path": "Matlab/libsvm-3.19/heart_scale",
    "chars": 27670,
    "preview": "+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."
  },
  {
    "path": "Matlab/libsvm-3.19/java/Makefile",
    "chars": 624,
    "preview": ".SUFFIXES: .class .java\nFILES = libsvm/svm.class libsvm/svm_model.class libsvm/svm_node.class \\\n\t\tlibsvm/svm_parameter.c"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm.java",
    "chars": 63803,
    "preview": "\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"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm.m4",
    "chars": 63095,
    "preview": "define(`swap',`do {$1 _=$2; $2=$3; $3=_;} while(false)')\ndefine(`Qfloat',`float')\ndefine(`SIZE_OF_QFLOAT',4)\ndefine(`TAU"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_model.java",
    "chars": 868,
    "preview": "//\n// svm_model\n//\npackage libsvm;\npublic class svm_model implements java.io.Serializable\n{\n\tpublic svm_parameter param;"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_node.java",
    "chars": 115,
    "preview": "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",
    "chars": 1288,
    "preview": "package libsvm;\npublic class svm_parameter implements Cloneable,java.io.Serializable\n{\n\t/* svm_type */\n\tpublic static fi"
  },
  {
    "path": "Matlab/libsvm-3.19/java/libsvm/svm_print_interface.java",
    "chars": 87,
    "preview": "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",
    "chars": 136,
    "preview": "package libsvm;\npublic class svm_problem implements java.io.Serializable\n{\n\tpublic int l;\n\tpublic double[] y;\n\tpublic sv"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_predict.java",
    "chars": 4950,
    "preview": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\n\nclass svm_predict {\n\tprivate static svm_print_interface svm_prin"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_scale.java",
    "chars": 8944,
    "preview": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\nimport java.text.DecimalFormat;\n\nclass svm_scale\n{\n\tprivate Strin"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_toy.java",
    "chars": 12269,
    "preview": "import libsvm.*;\nimport java.applet.*;\nimport java.awt.*;\nimport java.util.*;\nimport java.awt.event.*;\nimport java.io.*;"
  },
  {
    "path": "Matlab/libsvm-3.19/java/svm_train.java",
    "chars": 8355,
    "preview": "import libsvm.*;\nimport java.io.*;\nimport java.util.*;\n\nclass svm_train {\n\tprivate svm_parameter param;\t\t// set by parse"
  },
  {
    "path": "Matlab/libsvm-3.19/java/test_applet.html",
    "chars": 81,
    "preview": "<APPLET code=\"svm_toy.class\" archive=\"libsvm.jar\" width=300 height=350></APPLET>\n"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/Makefile",
    "chars": 1240,
    "preview": "# This Makefile is used under Linux\n\nMATLABDIR ?= /usr/local/matlab\n# for Mac\n# MATLABDIR ?= /opt/local/matlab\n\nCXX ?= g"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/README",
    "chars": 9826,
    "preview": "-----------------------------------------\n--- MATLAB/OCTAVE interface of LIBSVM ---\n------------------------------------"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/libsvmread.c",
    "chars": 4063,
    "preview": "#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#ifd"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/libsvmwrite.c",
    "chars": 2341,
    "preview": "#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 < 0x070300"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/make.m",
    "chars": 777,
    "preview": "% 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(str"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svm_model_matlab.c",
    "chars": 8208,
    "preview": "#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 < 0x0703"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svm_model_matlab.h",
    "chars": 201,
    "preview": "const char *model_to_matlab_structure(mxArray *plhs[], int num_of_feature, struct svm_model *model);\nstruct svm_model *m"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svmpredict.c",
    "chars": 9823,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../svm.h\"\n\n#include \"mex.h\"\n#include \"svm_model_mat"
  },
  {
    "path": "Matlab/libsvm-3.19/matlab/svmtrain.c",
    "chars": 11821,
    "preview": "#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#inc"
  },
  {
    "path": "Matlab/libsvm-3.19/python/Makefile",
    "chars": 32,
    "preview": "all = lib\n\nlib:\n\tmake -C .. lib\n"
  },
  {
    "path": "Matlab/libsvm-3.19/python/README",
    "chars": 11908,
    "preview": "----------------------------------\n--- Python interface of LIBSVM ---\n----------------------------------\n\nTable of Conte"
  },
  {
    "path": "Matlab/libsvm-3.19/python/svm.py",
    "chars": 9605,
    "preview": "#!/usr/bin/env python\n\nfrom ctypes import *\nfrom ctypes.util import find_library\nfrom os import path\nimport sys\n\n__all__"
  },
  {
    "path": "Matlab/libsvm-3.19/python/svmutil.py",
    "chars": 8695,
    "preview": "#!/usr/bin/env python\n\nimport os\nimport sys\nfrom svm import *\nfrom svm import __all__ as svm_all\n\n\n__all__ = ['evaluatio"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-predict.c",
    "chars": 5536,
    "preview": "#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 p"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-scale.c",
    "chars": 8504,
    "preview": "#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"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/Makefile",
    "chars": 573,
    "preview": "CC? = gcc\nCXX? = g++\nCFLAGS = -Wall -O3 -g `pkg-config --cflags gtk+-2.0`\nLIBS = `pkg-config --libs gtk+-2.0`\n\nsvm-toy: "
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/callbacks.cpp",
    "chars": 10308,
    "preview": "#include <gtk/gtk.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#incl"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/callbacks.h",
    "chars": 1765,
    "preview": "#include <gtk/gtk.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid\non_window1_destroy                     (GtkObject    "
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/interface.c",
    "chars": 6457,
    "preview": "/*\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 <unis"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/interface.h",
    "chars": 203,
    "preview": "/*\n * DO NOT EDIT THIS FILE - it is generated by Glade.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nGtkWidget* create_w"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/main.c",
    "chars": 398,
    "preview": "/*\n * Initial main.c file generated by Glade. Edit as required.\n * Glade will not overwrite this file.\n */\n\n#include <gt"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/gtk/svm-toy.glade",
    "chars": 6402,
    "preview": "<?xml version=\"1.0\"?>\n<GTK-Interface>\n\n<project>\n  <name>svm-toy</name>\n  <program_name>svm-toy</program_name>\n  <direct"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/qt/Makefile",
    "chars": 392,
    "preview": "CXX? = g++\nCFLAGS = -Wall -O3 -I$(INCLUDE) -I$(INCLUDE)/QtGui -lQtGui\nINCLUDE = /usr/include/qt4\nMOC = /usr/bin/moc-qt4\n"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/qt/svm-toy.cpp",
    "chars": 9744,
    "preview": "#include <QtGui>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#include "
  },
  {
    "path": "Matlab/libsvm-3.19/svm-toy/windows/svm-toy.cpp",
    "chars": 11503,
    "preview": "#include <windows.h>\n#include <windowsx.h>\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <list>\n#in"
  },
  {
    "path": "Matlab/libsvm-3.19/svm-train.c",
    "chars": 8986,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include \"svm.h\"\n#defin"
  },
  {
    "path": "Matlab/libsvm-3.19/svm.cpp",
    "chars": 64702,
    "preview": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <float.h>\n#include <string.h>\n#incl"
  },
  {
    "path": "Matlab/libsvm-3.19/svm.def",
    "chars": 477,
    "preview": "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"
  },
  {
    "path": "Matlab/libsvm-3.19/svm.h",
    "chars": 3382,
    "preview": "#ifndef _LIBSVM_H\n#define _LIBSVM_H\n\n#define LIBSVM_VERSION 319\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern int libs"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/README",
    "chars": 7033,
    "preview": "This directory includes some useful codes:\n\n1. subset selection tools.\n2. parameter selection tools.\n3. LIBSVM format ch"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/checkdata.py",
    "chars": 2479,
    "preview": "#!/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#"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/easy.py",
    "chars": 2699,
    "preview": "#!/usr/bin/env python\n\nimport sys\nimport os\nfrom subprocess import *\n\nif len(sys.argv) <= 1:\n\tprint('Usage: {0} training"
  },
  {
    "path": "Matlab/libsvm-3.19/tools/grid.py",
    "chars": 15316,
    "preview": "#!/usr/bin/env python\n__all__ = ['find_parameters']\n\nimport os, sys, traceback, getpass, time, re\nfrom threading import "
  },
  {
    "path": "Matlab/libsvm-3.19/tools/subset.py",
    "chars": 3202,
    "preview": "#!/usr/bin/env python\n\nimport os, sys, math, random\nfrom collections import defaultdict\n\nif sys.version_info[0] >= 3:\n\tx"
  },
  {
    "path": "README.md",
    "chars": 513,
    "preview": "# Face_Liveness_Detection\n\n## Matlab\n\nNUAA database is included in Matlab folder. PRINT-ATTACK database can be downloade"
  }
]

// ... and 18 more files (download for full content)

About this extraction

This page contains the full source code of the allenyangyl/Face_Liveness_Detection GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 178 files (35.0 MB), approximately 679.6k tokens, and a symbol index with 599 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!