diff --git a/.gitignore b/.gitignore index f86783b81..c72191ba4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,13 @@ *~ *.deb +*.gwt +*.gal +*.pyc + +swig/*.gwt +swig/_geoda.so +swig/geoda.pyc BuildTools/centos/libraries/ BuildTools/centos/temp/ @@ -13,6 +20,7 @@ BuildTools/ubuntu/build/ BuildTools/windows/.vs/ BuildTools/windows/temp/ +BuildTools/windows/enc_temp_folder/ BuildTools/windows/Debug/ BuildTools/windows/Release/ BuildTools/windows/ipch/ @@ -88,3 +96,4 @@ BuildTools/macosx/temp1/boost_1_57_0/b2 *.xcworkspacedata *.plist +.vs/slnx.sqlite diff --git a/Algorithms/GNUmakefile b/Algorithms/GNUmakefile new file mode 100644 index 000000000..e72fae931 --- /dev/null +++ b/Algorithms/GNUmakefile @@ -0,0 +1,16 @@ + +include ../GeoDamake.opt + +#include ./file.lst + +CPPFLAGS := $(CPPFLAGS) +CXXFLAGS := $(CXXFLAGS) + +CXX_SRCS := $(wildcard *.cpp) +OBJ := ${CXX_SRCS:.cpp=.o} + +default: $(O_OBJ:.o=.$(OBJ_EXT)) + +clean: + rm -f *.o + diff --git a/Algorithms/cluster.cpp b/Algorithms/cluster.cpp new file mode 100644 index 000000000..a1032dc11 --- /dev/null +++ b/Algorithms/cluster.cpp @@ -0,0 +1,4754 @@ +/* The C clustering library. + * Copyright (C) 2002 Michiel Jan Laurens de Hoon. + * + * This library was written at the Laboratory of DNA Information Analysis, + * Human Genome Center, Institute of Medical Science, University of Tokyo, + * 4-6-1 Shirokanedai, Minato-ku, Tokyo 108-8639, Japan. + * Contact: mdehoon 'AT' gsc.riken.jp + * + * Permission to use, copy, modify, and distribute this software and its + * documentation with or without modifications and for any purpose and + * without fee is hereby granted, provided that any copyright notices + * appear in all copies and that both those copyright notices and this + * permission notice appear in supporting documentation, and that the + * names of the contributors or copyright holders not be used in + * advertising or publicity pertaining to distribution of the software + * without specific prior permission. + * + * THE CONTRIBUTORS AND COPYRIGHT HOLDERS OF THIS SOFTWARE DISCLAIM ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE + * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE + * OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include +#include "cluster.h" +#ifdef WINDOWS +# include +#endif + +/* ************************************************************************ */ +void setrandomstate(int seed) +{ + random_state = seed; +} + +/* ************************************************************************ */ + +#ifdef WINDOWS +/* Then we make a Windows DLL */ +int WINAPI +clusterdll_init (HANDLE h, DWORD reason, void* foo) +{ + return 1; +} +#endif + +/* ************************************************************************ */ + +double mean(int n, double x[]) +{ double result = 0.; + int i; + for (i = 0; i < n; i++) result += x[i]; + result /= n; + return result; +} + +/* ************************************************************************ */ + +double median (int n, double x[]) +/* +Find the median of X(1), ... , X(N), using as much of the quicksort +algorithm as is needed to isolate it. +N.B. On exit, the array X is partially ordered. +Based on Alan J. Miller's median.f90 routine. +*/ + +{ int i, j; + int nr = n / 2; + int nl = nr - 1; + int even = 0; + /* hi & lo are position limits encompassing the median. */ + int lo = 0; + int hi = n-1; + + if (n==2*nr) even = 1; + if (n<3) + { if (n<1) return 0.; + if (n == 1) return x[0]; + return 0.5*(x[0]+x[1]); + } + + /* Find median of 1st, middle & last values. */ + do + { int loop; + int mid = (lo + hi)/2; + double result = x[mid]; + double xlo = x[lo]; + double xhi = x[hi]; + if (xhixhi) result = xhi; + else if (resultresult) j--; + loop = 0; + if (inr) hi = j; + if (i==j) + { if (i==nl) lo = nl; + if (j==nr) hi = nr; + } + } + else + { if (jnr) hi = j; + /* Test whether median has been isolated. */ + if (i==j && i==nr) return result; + } + } + while (lox[hi]) + { double temp = x[lo]; + x[lo] = x[hi]; + x[hi] = temp; + } + return x[nr]; +} + +/* ********************************************************************** */ + +static const double* sortdata = NULL; /* used in the quicksort algorithm */ + +/* ---------------------------------------------------------------------- */ + +static +int compare(const void* a, const void* b) +/* Helper function for sort. Previously, this was a nested function under + * sort, which is not allowed under ANSI C. + */ +{ const int i1 = *(const int*)a; + const int i2 = *(const int*)b; + const double term1 = sortdata[i1]; + const double term2 = sortdata[i2]; + if (term1 < term2) return -1; + if (term1 > term2) return +1; + return 0; +} + +/* ---------------------------------------------------------------------- */ + +void sort(int n, const double data[], int index[]) +/* Sets up an index table given the data, such that data[index[]] is in + * increasing order. Sorting is done on the indices; the array data + * is unchanged. + */ +{ int i; + sortdata = data; + for (i = 0; i < n; i++) index[i] = i; + qsort(index, n, sizeof(int), compare); +} + +/* ********************************************************************** */ + +static double* getrank (int n, double data[]) +/* Calculates the ranks of the elements in the array data. Two elements with + * the same value get the same rank, equal to the average of the ranks had the + * elements different values. The ranks are returned as a newly allocated + * array that should be freed by the calling routine. If getrank fails due to + * a memory allocation error, it returns NULL. + */ +{ int i; + double* rank; + int* index; + rank = (double*)malloc(n*sizeof(double)); + if (!rank) return NULL; + index = (int*)malloc(n*sizeof(int)); + if (!index) + { free(rank); + return NULL; + } + /* Call sort to get an index table */ + sort (n, data, index); + /* Build a rank table */ + for (i = 0; i < n; i++) rank[index[i]] = i; + /* Fix for equal ranks */ + i = 0; + while (i < n) + { int m; + double value = data[index[i]]; + int j = i + 1; + while (j < n && data[index[j]] == value) j++; + m = j - i; /* number of equal ranks found */ + value = rank[index[i]] + (m-1)/2.; + for (j = i; j < i + m; j++) rank[index[j]] = value; + i += m; + } + free (index); + return rank; +} + +/* ---------------------------------------------------------------------- */ + +static int +makedatamask(int nrows, int ncols, double*** pdata, int*** pmask) +{ int i; + double** data; + int** mask; + data = (double**)malloc(nrows*sizeof(double*)); + if(!data) return 0; + mask = (int**)malloc(nrows*sizeof(int*)); + if(!mask) + { free(data); + return 0; + } + for (i = 0; i < nrows; i++) + { data[i] = (double*)malloc(ncols*sizeof(double)); + if(!data[i]) break; + mask[i] = (int*)malloc(ncols*sizeof(int)); + if(!mask[i]) + { free(data[i]); + break; + } + } + if (i==nrows) /* break not encountered */ + { *pdata = data; + *pmask = mask; + return 1; + } + *pdata = NULL; + *pmask = NULL; + nrows = i; + for (i = 0; i < nrows; i++) + { free(data[i]); + free(mask[i]); + } + free(data); + free(mask); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static void +freedatamask(int n, double** data, int** mask) +{ int i; + for (i = 0; i < n; i++) + { free(mask[i]); + free(data[i]); + } + free(mask); + free(data); +} + +/* ---------------------------------------------------------------------- */ + +static +double find_closest_pair(int n, double** distmatrix, int* ip, int* jp) +/* +This function searches the distance matrix to find the pair with the shortest +distance between them. The indices of the pair are returned in ip and jp; the +distance itself is returned by the function. + +n (input) int +The number of elements in the distance matrix. + +distmatrix (input) double** +A ragged array containing the distance matrix. The number of columns in each +row is one less than the row index. + +ip (output) int* +A pointer to the integer that is to receive the first index of the pair with +the shortest distance. + +jp (output) int* +A pointer to the integer that is to receive the second index of the pair with +the shortest distance. +*/ +{ int i, j; + double temp; + double distance = distmatrix[1][0]; + *ip = 1; + *jp = 0; + for (i = 1; i < n; i++) + { for (j = 0; j < i; j++) + { temp = distmatrix[i][j]; + if (temp= n) + { /* Householder reduction to bidiagonal form */ + for (i = 0; i < n; i++) + { l = i + 1; + rv1[i] = scale * g; + g = 0.0; + s = 0.0; + scale = 0.0; + for (k = i; k < m; k++) scale += fabs(u[k][i]); + if (scale != 0.0) + { for (k = i; k < m; k++) + { u[k][i] /= scale; + s += u[k][i]*u[k][i]; + } + f = u[i][i]; + g = (f >= 0) ? -sqrt(s) : sqrt(s); + h = f * g - s; + u[i][i] = f - g; + if (i < n-1) + { for (j = l; j < n; j++) + { s = 0.0; + for (k = i; k < m; k++) s += u[k][i] * u[k][j]; + f = s / h; + for (k = i; k < m; k++) u[k][j] += f * u[k][i]; + } + } + for (k = i; k < m; k++) u[k][i] *= scale; + } + w[i] = scale * g; + g = 0.0; + s = 0.0; + scale = 0.0; + if (i= 0) ? -sqrt(s) : sqrt(s); + h = f * g - s; + u[i][l] = f - g; + for (k = l; k < n; k++) rv1[k] = u[i][k] / h; + for (j = l; j < m; j++) + { s = 0.0; + for (k = l; k < n; k++) s += u[j][k] * u[i][k]; + for (k = l; k < n; k++) u[j][k] += s * rv1[k]; + } + for (k = l; k < n; k++) u[i][k] *= scale; + } + } + anorm = max(anorm,fabs(w[i])+fabs(rv1[i])); + } + /* accumulation of right-hand transformations */ + for (i = n-1; i>=0; i--) + { if (i < n-1) + { if (g != 0.0) + { for (j = l; j < n; j++) vt[i][j] = (u[i][j] / u[i][l]) / g; + /* double division avoids possible underflow */ + for (j = l; j < n; j++) + { s = 0.0; + for (k = l; k < n; k++) s += u[i][k] * vt[j][k]; + for (k = l; k < n; k++) vt[j][k] += s * vt[i][k]; + } + } + } + for (j = l; j < n; j++) + { vt[j][i] = 0.0; + vt[i][j] = 0.0; + } + vt[i][i] = 1.0; + g = rv1[i]; + l = i; + } + /* accumulation of left-hand transformations */ + for (i = n-1; i >= 0; i--) + { l = i + 1; + g = w[i]; + if (i!=n-1) + for (j = l; j < n; j++) u[i][j] = 0.0; + if (g!=0.0) + { if (i!=n-1) + { for (j = l; j < n; j++) + { s = 0.0; + for (k = l; k < m; k++) s += u[k][i] * u[k][j]; + /* double division avoids possible underflow */ + f = (s / u[i][i]) / g; + for (k = i; k < m; k++) u[k][j] += f * u[k][i]; + } + } + for (j = i; j < m; j++) u[j][i] /= g; + } + else + for (j = i; j < m; j++) u[j][i] = 0.0; + u[i][i] += 1.0; + } + /* diagonalization of the bidiagonal form */ + for (k = n-1; k >= 0; k--) + { k1 = k-1; + its = 0; + while(1) + /* test for splitting */ + { for (l = k; l >= 0; l--) + { l1 = l-1; + if (fabs(rv1[l]) + anorm == anorm) break; + /* rv1[0] is always zero, so there is no exit + * through the bottom of the loop */ + if (fabs(w[l1]) + anorm == anorm) + /* cancellation of rv1[l] if l greater than 0 */ + { c = 0.0; + s = 1.0; + for (i = l; i <= k; i++) + { f = s * rv1[i]; + rv1[i] *= c; + if (fabs(f) + anorm == anorm) break; + g = w[i]; + h = sqrt(f*f+g*g); + w[i] = h; + c = g / h; + s = -f / h; + for (j = 0; j < m; j++) + { y = u[j][l1]; + z = u[j][i]; + u[j][l1] = y * c + z * s; + u[j][i] = -y * s + z * c; + } + } + break; + } + } + /* test for convergence */ + z = w[k]; + if (l==k) /* convergence */ + { if (z < 0.0) + /* w[k] is made non-negative */ + { w[k] = -z; + for (j = 0; j < n; j++) vt[k][j] = -vt[k][j]; + } + break; + } + else if (its==30) + { ierr = k; + break; + } + else + /* shift from bottom 2 by 2 minor */ + { its++; + x = w[l]; + y = w[k1]; + g = rv1[k1]; + h = rv1[k]; + f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2.0 * h * y); + g = sqrt(f*f+1.0); + f = ((x - z) * (x + z) + h * (y / (f + (f >= 0 ? g : -g)) - h)) / x; + /* next qr transformation */ + c = 1.0; + s = 1.0; + for (i1 = l; i1 <= k1; i1++) + { i = i1 + 1; + g = rv1[i]; + y = w[i]; + h = s * g; + g = c * g; + z = sqrt(f*f+h*h); + rv1[i1] = z; + c = f / z; + s = h / z; + f = x * c + g * s; + g = -x * s + g * c; + h = y * s; + y = y * c; + for (j = 0; j < n; j++) + { x = vt[i1][j]; + z = vt[i][j]; + vt[i1][j] = x * c + z * s; + vt[i][j] = -x * s + z * c; + } + z = sqrt(f*f+h*h); + w[i1] = z; + /* rotation can be arbitrary if z is zero */ + if (z!=0.0) + { c = f / z; + s = h / z; + } + f = c * g + s * y; + x = -s * g + c * y; + for (j = 0; j < m; j++) + { y = u[j][i1]; + z = u[j][i]; + u[j][i1] = y * c + z * s; + u[j][i] = -y * s + z * c; + } + } + rv1[l] = 0.0; + rv1[k] = f; + w[k] = x; + } + } + } + } + else /* m < n */ + { /* Householder reduction to bidiagonal form */ + for (i = 0; i < m; i++) + { l = i + 1; + rv1[i] = scale * g; + g = 0.0; + s = 0.0; + scale = 0.0; + for (k = i; k < n; k++) scale += fabs(u[i][k]); + if (scale != 0.0) + { for (k = i; k < n; k++) + { u[i][k] /= scale; + s += u[i][k]*u[i][k]; + } + f = u[i][i]; + g = (f >= 0) ? -sqrt(s) : sqrt(s); + h = f * g - s; + u[i][i] = f - g; + if (i < m-1) + { for (j = l; j < m; j++) + { s = 0.0; + for (k = i; k < n; k++) s += u[i][k] * u[j][k]; + f = s / h; + for (k = i; k < n; k++) u[j][k] += f * u[i][k]; + } + } + for (k = i; k < n; k++) u[i][k] *= scale; + } + w[i] = scale * g; + g = 0.0; + s = 0.0; + scale = 0.0; + if (i= 0) ? -sqrt(s) : sqrt(s); + h = f * g - s; + u[l][i] = f - g; + for (k = l; k < m; k++) rv1[k] = u[k][i] / h; + for (j = l; j < n; j++) + { s = 0.0; + for (k = l; k < m; k++) s += u[k][j] * u[k][i]; + for (k = l; k < m; k++) u[k][j] += s * rv1[k]; + } + for (k = l; k < m; k++) u[k][i] *= scale; + } + } + anorm = max(anorm,fabs(w[i])+fabs(rv1[i])); + } + /* accumulation of right-hand transformations */ + for (i = m-1; i>=0; i--) + { if (i < m-1) + { if (g != 0.0) + { for (j = l; j < m; j++) vt[j][i] = (u[j][i] / u[l][i]) / g; + /* double division avoids possible underflow */ + for (j = l; j < m; j++) + { s = 0.0; + for (k = l; k < m; k++) s += u[k][i] * vt[k][j]; + for (k = l; k < m; k++) vt[k][j] += s * vt[k][i]; + } + } + } + for (j = l; j < m; j++) + { vt[i][j] = 0.0; + vt[j][i] = 0.0; + } + vt[i][i] = 1.0; + g = rv1[i]; + l = i; + } + /* accumulation of left-hand transformations */ + for (i = m-1; i >= 0; i--) + { l = i + 1; + g = w[i]; + if (i!=m-1) + for (j = l; j < m; j++) u[j][i] = 0.0; + if (g!=0.0) + { if (i!=m-1) + { for (j = l; j < m; j++) + { s = 0.0; + for (k = l; k < n; k++) s += u[i][k] * u[j][k]; + /* double division avoids possible underflow */ + f = (s / u[i][i]) / g; + for (k = i; k < n; k++) u[j][k] += f * u[i][k]; + } + } + for (j = i; j < n; j++) u[i][j] /= g; + } + else + for (j = i; j < n; j++) u[i][j] = 0.0; + u[i][i] += 1.0; + } + /* diagonalization of the bidiagonal form */ + for (k = m-1; k >= 0; k--) + { k1 = k-1; + its = 0; + while(1) + /* test for splitting */ + { for (l = k; l >= 0; l--) + { l1 = l-1; + if (fabs(rv1[l]) + anorm == anorm) break; + /* rv1[0] is always zero, so there is no exit + * through the bottom of the loop */ + if (fabs(w[l1]) + anorm == anorm) + /* cancellation of rv1[l] if l greater than 0 */ + { c = 0.0; + s = 1.0; + for (i = l; i <= k; i++) + { f = s * rv1[i]; + rv1[i] *= c; + if (fabs(f) + anorm == anorm) break; + g = w[i]; + h = sqrt(f*f+g*g); + w[i] = h; + c = g / h; + s = -f / h; + for (j = 0; j < n; j++) + { y = u[l1][j]; + z = u[i][j]; + u[l1][j] = y * c + z * s; + u[i][j] = -y * s + z * c; + } + } + break; + } + } + /* test for convergence */ + z = w[k]; + if (l==k) /* convergence */ + { if (z < 0.0) + /* w[k] is made non-negative */ + { w[k] = -z; + for (j = 0; j < m; j++) vt[j][k] = -vt[j][k]; + } + break; + } + else if (its==30) + { ierr = k; + break; + } + else + /* shift from bottom 2 by 2 minor */ + { its++; + x = w[l]; + y = w[k1]; + g = rv1[k1]; + h = rv1[k]; + f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2.0 * h * y); + g = sqrt(f*f+1.0); + f = ((x - z) * (x + z) + h * (y / (f + (f >= 0 ? g : -g)) - h)) / x; + /* next qr transformation */ + c = 1.0; + s = 1.0; + for (i1 = l; i1 <= k1; i1++) + { i = i1 + 1; + g = rv1[i]; + y = w[i]; + h = s * g; + g = c * g; + z = sqrt(f*f+h*h); + rv1[i1] = z; + c = f / z; + s = h / z; + f = x * c + g * s; + g = -x * s + g * c; + h = y * s; + y = y * c; + for (j = 0; j < m; j++) + { x = vt[j][i1]; + z = vt[j][i]; + vt[j][i1] = x * c + z * s; + vt[j][i] = -x * s + z * c; + } + z = sqrt(f*f+h*h); + w[i1] = z; + /* rotation can be arbitrary if z is zero */ + if (z!=0.0) + { c = f / z; + s = h / z; + } + f = c * g + s * y; + x = -s * g + c * y; + for (j = 0; j < n; j++) + { y = u[i1][j]; + z = u[i][j]; + u[i1][j] = y * c + z * s; + u[i][j] = -y * s + z * c; + } + } + rv1[l] = 0.0; + rv1[k] = f; + w[k] = x; + } + } + } + } + free(rv1); + return ierr; +} + +/* ********************************************************************* */ + +int pca(int nrows, int ncolumns, double** u, double** v, double* w) +/* +Purpose +======= + +This subroutine uses the singular value decomposition to perform principal +components analysis of a real nrows by ncolumns rectangular matrix. + +Arguments +========= + +nrows (input) int +The number of rows in the matrix u. + +ncolumns (input) int +The number of columns in the matrix v. + +u (input) double[nrows][ncolumns] +On input, the array containing the data to which the principal component +analysis should be applied. The function assumes that the mean has already been +subtracted of each column, and hence that the mean of each column is zero. +On output, see below. + +v (input) double[n][n], where n = min(nrows, ncolumns) +Not used on input. + +w (input) double[n], where n = min(nrows, ncolumns) +Not used on input. + + +Return value +============ + +On output: + +If nrows >= ncolumns, then + +u contains the coordinates with respect to the principal components; +v contains the principal component vectors. + +The dot product u . v reproduces the data that were passed in u. + + +If nrows < ncolumns, then + +u contains the principal component vectors; +v contains the coordinates with respect to the principal components. + +The dot product v . u reproduces the data that were passed in u. + +The eigenvalues of the covariance matrix are returned in w. + +The arrays u, v, and w are sorted according to eigenvalue, with the largest +eigenvalues appearing first. + +The function returns 0 if successful, -1 if memory allocation fails, and a +positive integer if the singular value decomposition fails to converge. +*/ +{ + int i; + int j; + int error; + int* index = (int*)malloc(ncolumns*sizeof(int)); + double* temp = (double*)malloc(ncolumns*sizeof(double)); + if (!index || !temp) + { if (index) free(index); + if (temp) free(temp); + return -1; + } + error = svd(nrows, ncolumns, u, w, v); + if (error==0) + { + if (nrows >= ncolumns) + { for (j = 0; j < ncolumns; j++) + { const double s = w[j]; + for (i = 0; i < nrows; i++) u[i][j] *= s; + } + sort(ncolumns, w, index); + for (i = 0; i < ncolumns/2; i++) + { j = index[i]; + index[i] = index[ncolumns-1-i]; + index[ncolumns-1-i] = j; + } + for (i = 0; i < nrows; i++) + { for (j = 0; j < ncolumns; j++) temp[j] = u[i][index[j]]; + for (j = 0; j < ncolumns; j++) u[i][j] = temp[j]; + } + for (i = 0; i < ncolumns; i++) + { for (j = 0; j < ncolumns; j++) temp[j] = v[index[j]][i]; + for (j = 0; j < ncolumns; j++) v[j][i] = temp[j]; + } + for (i = 0; i < ncolumns; i++) temp[i] = w[index[i]]; + for (i = 0; i < ncolumns; i++) w[i] = temp[i]; + } + else /* nrows < ncolumns */ + { for (j = 0; j < nrows; j++) + { const double s = w[j]; + for (i = 0; i < nrows; i++) v[i][j] *= s; + } + sort(nrows, w, index); + for (i = 0; i < nrows/2; i++) + { j = index[i]; + index[i] = index[nrows-1-i]; + index[nrows-1-i] = j; + } + for (j = 0; j < ncolumns; j++) + { for (i = 0; i < nrows; i++) temp[i] = u[index[i]][j]; + for (i = 0; i < nrows; i++) u[i][j] = temp[i]; + } + for (j = 0; j < nrows; j++) + { for (i = 0; i < nrows; i++) temp[i] = v[j][index[i]]; + for (i = 0; i < nrows; i++) v[j][i] = temp[i]; + } + for (i = 0; i < nrows; i++) temp[i] = w[index[i]]; + for (i = 0; i < nrows; i++) w[i] = temp[i]; + } + } + free(index); + free(temp); + return error; +} + +/* ********************************************************************* */ + +static +double euclid (int n, double** data1, double** data2, int** mask1, int** mask2, + const double weight[], int index1, int index2, int transpose) + +/* +Purpose +======= + +The euclid routine calculates the weighted Euclidean distance between two +rows or columns in a matrix. + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. + +============================================================================ +*/ +{ double result = 0.; + double tweight = 0; + int i; + if (transpose==0) /* Calculate the distance between two rows */ + { for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { double term = data1[index1][i] - data2[index2][i]; + result += weight[i]*term*term; + tweight += weight[i]; + } + } + } + else + { for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { double term = data1[i][index1] - data2[i][index2]; + result += weight[i]*term*term; + tweight += weight[i]; + } + } + } + if (!tweight) return 0; /* usually due to empty clusters */ + + //result /= tweight; + // squared + return result; +} + +/* ********************************************************************* */ + +static +double cityblock (int n, double** data1, double** data2, int** mask1, + int** mask2, const double weight[], int index1, int index2, int transpose) + +/* +Purpose +======= + +The cityblock routine calculates the weighted "City Block" distance between +two rows or columns in a matrix. City Block distance is defined as the +absolute value of X1-X2 plus the absolute value of Y1-Y2 plus..., which is +equivalent to taking an "up and over" path. + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. + +============================================================================ */ +{ double result = 0.; + double tweight = 0; + int i; + if (transpose==0) /* Calculate the distance between two rows */ + { for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { double term = data1[index1][i] - data2[index2][i]; + result = result + weight[i]*fabs(term); + tweight += weight[i]; + } + } + } + else + { for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { double term = data1[i][index1] - data2[i][index2]; + result = result + weight[i]*fabs(term); + tweight += weight[i]; + } + } + } + if (!tweight) return 0; /* usually due to empty clusters */ + result /= tweight; + return result; +} + +/* ********************************************************************* */ + +static +double correlation (int n, double** data1, double** data2, int** mask1, + int** mask2, const double weight[], int index1, int index2, int transpose) +/* +Purpose +======= + +The correlation routine calculates the weighted Pearson distance between two +rows or columns in a matrix. We define the Pearson distance as one minus the +Pearson correlation. +This definition yields a semi-metric: d(a,b) >= 0, and d(a,b) = 0 iff a = b. +but the triangular inequality d(a,b) + d(b,c) >= d(a,c) does not hold +(e.g., choose b = a + c). + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. +============================================================================ +*/ +{ double result = 0.; + double sum1 = 0.; + double sum2 = 0.; + double denom1 = 0.; + double denom2 = 0.; + double tweight = 0.; + if (transpose==0) /* Calculate the distance between two rows */ + { int i; + for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { double term1 = data1[index1][i]; + double term2 = data2[index2][i]; + double w = weight[i]; + sum1 += w*term1; + sum2 += w*term2; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + tweight += w; + } + } + } + else + { int i; + for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { double term1 = data1[i][index1]; + double term2 = data2[i][index2]; + double w = weight[i]; + sum1 += w*term1; + sum2 += w*term2; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + tweight += w; + } + } + } + if (!tweight) return 0; /* usually due to empty clusters */ + result -= sum1 * sum2 / tweight; + denom1 -= sum1 * sum1 / tweight; + denom2 -= sum2 * sum2 / tweight; + if (denom1 <= 0) return 1; /* include '<' to deal with roundoff errors */ + if (denom2 <= 0) return 1; /* include '<' to deal with roundoff errors */ + result = result / sqrt(denom1*denom2); + result = 1. - result; + return result; +} + +/* ********************************************************************* */ + +static +double acorrelation (int n, double** data1, double** data2, int** mask1, + int** mask2, const double weight[], int index1, int index2, int transpose) +/* +Purpose +======= + +The acorrelation routine calculates the weighted Pearson distance between two +rows or columns, using the absolute value of the correlation. +This definition yields a semi-metric: d(a,b) >= 0, and d(a,b) = 0 iff a = b. +but the triangular inequality d(a,b) + d(b,c) >= d(a,c) does not hold +(e.g., choose b = a + c). + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. +============================================================================ +*/ +{ double result = 0.; + double sum1 = 0.; + double sum2 = 0.; + double denom1 = 0.; + double denom2 = 0.; + double tweight = 0.; + if (transpose==0) /* Calculate the distance between two rows */ + { int i; + for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { double term1 = data1[index1][i]; + double term2 = data2[index2][i]; + double w = weight[i]; + sum1 += w*term1; + sum2 += w*term2; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + tweight += w; + } + } + } + else + { int i; + for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { double term1 = data1[i][index1]; + double term2 = data2[i][index2]; + double w = weight[i]; + sum1 += w*term1; + sum2 += w*term2; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + tweight += w; + } + } + } + if (!tweight) return 0; /* usually due to empty clusters */ + result -= sum1 * sum2 / tweight; + denom1 -= sum1 * sum1 / tweight; + denom2 -= sum2 * sum2 / tweight; + if (denom1 <= 0) return 1; /* include '<' to deal with roundoff errors */ + if (denom2 <= 0) return 1; /* include '<' to deal with roundoff errors */ + result = fabs(result) / sqrt(denom1*denom2); + result = 1. - result; + return result; +} + +/* ********************************************************************* */ + +static +double ucorrelation (int n, double** data1, double** data2, int** mask1, + int** mask2, const double weight[], int index1, int index2, int transpose) +/* +Purpose +======= + +The ucorrelation routine calculates the weighted Pearson distance between two +rows or columns, using the uncentered version of the Pearson correlation. In the +uncentered Pearson correlation, a zero mean is used for both vectors even if +the actual mean is nonzero. +This definition yields a semi-metric: d(a,b) >= 0, and d(a,b) = 0 iff a = b. +but the triangular inequality d(a,b) + d(b,c) >= d(a,c) does not hold +(e.g., choose b = a + c). + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. +============================================================================ +*/ +{ double result = 0.; + double denom1 = 0.; + double denom2 = 0.; + int flag = 0; + /* flag will remain zero if no nonzero combinations of mask1 and mask2 are + * found. + */ + if (transpose==0) /* Calculate the distance between two rows */ + { int i; + for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { double term1 = data1[index1][i]; + double term2 = data2[index2][i]; + double w = weight[i]; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + flag = 1; + } + } + } + else + { int i; + for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { double term1 = data1[i][index1]; + double term2 = data2[i][index2]; + double w = weight[i]; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + flag = 1; + } + } + } + if (!flag) return 0.; + if (denom1==0.) return 1.; + if (denom2==0.) return 1.; + result = result / sqrt(denom1*denom2); + result = 1. - result; + return result; +} + +/* ********************************************************************* */ + +static +double uacorrelation (int n, double** data1, double** data2, int** mask1, + int** mask2, const double weight[], int index1, int index2, int transpose) +/* +Purpose +======= + +The uacorrelation routine calculates the weighted Pearson distance between two +rows or columns, using the absolute value of the uncentered version of the +Pearson correlation. In the uncentered Pearson correlation, a zero mean is used +for both vectors even if the actual mean is nonzero. +This definition yields a semi-metric: d(a,b) >= 0, and d(a,b) = 0 iff a = b. +but the triangular inequality d(a,b) + d(b,c) >= d(a,c) does not hold +(e.g., choose b = a + c). + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. +============================================================================ +*/ +{ double result = 0.; + double denom1 = 0.; + double denom2 = 0.; + int flag = 0; + /* flag will remain zero if no nonzero combinations of mask1 and mask2 are + * found. + */ + if (transpose==0) /* Calculate the distance between two rows */ + { int i; + for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { double term1 = data1[index1][i]; + double term2 = data2[index2][i]; + double w = weight[i]; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + flag = 1; + } + } + } + else + { int i; + for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { double term1 = data1[i][index1]; + double term2 = data2[i][index2]; + double w = weight[i]; + result += w*term1*term2; + denom1 += w*term1*term1; + denom2 += w*term2*term2; + flag = 1; + } + } + } + if (!flag) return 0.; + if (denom1==0.) return 1.; + if (denom2==0.) return 1.; + result = fabs(result) / sqrt(denom1*denom2); + result = 1. - result; + return result; +} + +/* ********************************************************************* */ + +static +double spearman (int n, double** data1, double** data2, int** mask1, + int** mask2, const double weight[], int index1, int index2, int transpose) +/* +Purpose +======= + +The spearman routine calculates the Spearman distance between two rows or +columns. The Spearman distance is defined as one minus the Spearman rank +correlation. + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +These weights are ignored, but included for consistency with other distance +measures. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. +============================================================================ +*/ +{ int i; + int m = 0; + double* rank1; + double* rank2; + double result = 0.; + double denom1 = 0.; + double denom2 = 0.; + double avgrank; + double* tdata1; + double* tdata2; + tdata1 = (double*)malloc(n*sizeof(double)); + if(!tdata1) return 0.0; /* Memory allocation error */ + tdata2 = (double*)malloc(n*sizeof(double)); + if(!tdata2) /* Memory allocation error */ + { free(tdata1); + return 0.0; + } + if (transpose==0) + { for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { tdata1[m] = data1[index1][i]; + tdata2[m] = data2[index2][i]; + m++; + } + } + } + else + { for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { tdata1[m] = data1[i][index1]; + tdata2[m] = data2[i][index2]; + m++; + } + } + } + if (m==0) + { free(tdata1); + free(tdata2); + return 0; + } + rank1 = getrank(m, tdata1); + free(tdata1); + if(!rank1) + { free(tdata2); + return 0.0; /* Memory allocation error */ + } + rank2 = getrank(m, tdata2); + free(tdata2); + if(!rank2) /* Memory allocation error */ + { free(rank1); + return 0.0; + } + avgrank = 0.5*(m-1); /* Average rank */ + for (i = 0; i < m; i++) + { const double value1 = rank1[i]; + const double value2 = rank2[i]; + result += value1 * value2; + denom1 += value1 * value1; + denom2 += value2 * value2; + } + /* Note: denom1 and denom2 cannot be calculated directly from the number + * of elements. If two elements have the same rank, the squared sum of + * their ranks will change. + */ + free(rank1); + free(rank2); + result /= m; + denom1 /= m; + denom2 /= m; + result -= avgrank * avgrank; + denom1 -= avgrank * avgrank; + denom2 -= avgrank * avgrank; + if (denom1 <= 0) return 1; /* include '<' to deal with roundoff errors */ + if (denom2 <= 0) return 1; /* include '<' to deal with roundoff errors */ + result = result / sqrt(denom1*denom2); + result = 1. - result; + return result; +} + +/* ********************************************************************* */ + +static +double kendall (int n, double** data1, double** data2, int** mask1, int** mask2, + const double weight[], int index1, int index2, int transpose) +/* +Purpose +======= + +The kendall routine calculates the Kendall distance between two +rows or columns. The Kendall distance is defined as one minus Kendall's tau. + +Arguments +========= + +n (input) int +The number of elements in a row or column. If transpose==0, then n is the number +of columns; otherwise, n is the number of rows. + +data1 (input) double array +The data array containing the first vector. + +data2 (input) double array +The data array containing the second vector. + +mask1 (input) int array +This array which elements in data1 are missing. If mask1[i][j]==0, then +data1[i][j] is missing. + +mask2 (input) int array +This array which elements in data2 are missing. If mask2[i][j]==0, then +data2[i][j] is missing. + +weight (input) double[n] +These weights are ignored, but included for consistency with other distance +measures. + +index1 (input) int +Index of the first row or column. + +index2 (input) int +Index of the second row or column. + +transpose (input) int +If transpose==0, the distance between two rows in the matrix is calculated. +Otherwise, the distance between two columns in the matrix is calculated. +============================================================================ +*/ +{ int con = 0; + int dis = 0; + int exx = 0; + int exy = 0; + int flag = 0; + /* flag will remain zero if no nonzero combinations of mask1 and mask2 are + * found. + */ + double denomx; + double denomy; + double tau; + int i, j; + if (transpose==0) + { for (i = 0; i < n; i++) + { if (mask1[index1][i] && mask2[index2][i]) + { for (j = 0; j < i; j++) + { if (mask1[index1][j] && mask2[index2][j]) + { double x1 = data1[index1][i]; + double x2 = data1[index1][j]; + double y1 = data2[index2][i]; + double y2 = data2[index2][j]; + if (x1 < x2 && y1 < y2) con++; + if (x1 > x2 && y1 > y2) con++; + if (x1 < x2 && y1 > y2) dis++; + if (x1 > x2 && y1 < y2) dis++; + if (x1 == x2 && y1 != y2) exx++; + if (x1 != x2 && y1 == y2) exy++; + flag = 1; + } + } + } + } + } + else + { for (i = 0; i < n; i++) + { if (mask1[i][index1] && mask2[i][index2]) + { for (j = 0; j < i; j++) + { if (mask1[j][index1] && mask2[j][index2]) + { double x1 = data1[i][index1]; + double x2 = data1[j][index1]; + double y1 = data2[i][index2]; + double y2 = data2[j][index2]; + if (x1 < x2 && y1 < y2) con++; + if (x1 > x2 && y1 > y2) con++; + if (x1 < x2 && y1 > y2) dis++; + if (x1 > x2 && y1 < y2) dis++; + if (x1 == x2 && y1 != y2) exx++; + if (x1 != x2 && y1 == y2) exy++; + flag = 1; + } + } + } + } + } + if (!flag) return 0.; + denomx = con + dis + exx; + denomy = con + dis + exy; + if (denomx==0) return 1; + if (denomy==0) return 1; + tau = (con-dis)/sqrt(denomx*denomy); + return 1.-tau; +} + +/* ********************************************************************* */ + +static double(*setmetric(char dist)) + (int, double**, double**, int**, int**, const double[], int, int, int) +{ switch(dist) + { case 'e': return &euclid; + case 'b': return &cityblock; + case 'c': return &correlation; + case 'a': return &acorrelation; + case 'u': return &ucorrelation; + case 'x': return &uacorrelation; + case 's': return &spearman; + case 'k': return &kendall; + default: return &euclid; + } + return NULL; /* Never get here */ +} + +/* ********************************************************************* */ + +double uniform(void) +/* +Purpose +======= + +This routine returns a uniform random number between 0.0 and 1.0. Both 0.0 +and 1.0 are excluded. This random number generator is described in: + +Pierre l'Ecuyer +Efficient and Portable Combined Random Number Generators +Communications of the ACM, Volume 31, Number 6, June 1988, pages 742-749,774. + +The first time this routine is called, it initializes the random number +generator using the current time. First, the current epoch time in seconds is +used as a seed for the random number generator in the C library. The first two +random numbers generated by this generator are used to initialize the random +number generator implemented in this routine. + + +Arguments +========= + +None. + + +Return value +============ + +A double-precison number between 0.0 and 1.0. +============================================================================ +*/ +{ int z; + static const int m1 = 2147483563; + static const int m2 = 2147483399; + const double scale = 1.0/m1; + + static int s1 = 0; + static int s2 = 0; + + if (s1==0 || s2==0) /* initialize */ + { if (random_state<0) { + unsigned int initseed = (unsigned int) time(0); + srand(initseed); + } else { + srand(random_state); + } + s1 = rand(); + s2 = rand(); + } + + do + { int k; + k = s1/53668; + s1 = 40014*(s1-k*53668)-k*12211; + if (s1 < 0) s1+=m1; + k = s2/52774; + s2 = 40692*(s2-k*52774)-k*3791; + if(s2 < 0) s2+=m2; + z = s1-s2; + if(z < 1) z+=(m1-1); + } while (z==m1); /* To avoid returning 1.0 */ + + return z*scale; +} + +/* ************************************************************************ */ + +static int binomial(int n, double p) +/* +Purpose +======= + +This routine generates a random number between 0 and n inclusive, following +the binomial distribution with probability p and n trials. The routine is +based on the BTPE algorithm, described in: + +Voratas Kachitvichyanukul and Bruce W. Schmeiser: +Binomial Random Variate Generation +Communications of the ACM, Volume 31, Number 2, February 1988, pages 216-222. + + +Arguments +========= + +p (input) double +The probability of a single event. This probability should be less than or +equal to 0.5. + +n (input) int +The number of trials. + + +Return value +============ + +An integer drawn from a binomial distribution with parameters (p, n). + +============================================================================ +*/ +{ const double q = 1 - p; + if (n*p < 30.0) /* Algorithm BINV */ + { const double s = p/q; + const double a = (n+1)*s; + double r = exp(n*log(q)); /* pow() causes a crash on AIX */ + int x = 0; + double u = uniform(); + while(1) + { if (u < r) return x; + u-=r; + x++; + r *= (a/x)-s; + } + } + else /* Algorithm BTPE */ + { /* Step 0 */ + const double fm = n*p + p; + const int m = (int) fm; + const double p1 = floor(2.195*sqrt(n*p*q) -4.6*q) + 0.5; + const double xm = m + 0.5; + const double xl = xm - p1; + const double xr = xm + p1; + const double c = 0.134 + 20.5/(15.3+m); + const double a = (fm-xl)/(fm-xl*p); + const double b = (xr-fm)/(xr*q); + const double lambdal = a*(1.0+0.5*a); + const double lambdar = b*(1.0+0.5*b); + const double p2 = p1*(1+2*c); + const double p3 = p2 + c/lambdal; + const double p4 = p3 + c/lambdar; + while (1) + { /* Step 1 */ + int y; + int k; + double u = uniform(); + double v = uniform(); + u *= p4; + if (u <= p1) return (int)(xm-p1*v+u); + /* Step 2 */ + if (u > p2) + { /* Step 3 */ + if (u > p3) + { /* Step 4 */ + y = (int)(xr-log(v)/lambdar); + if (y > n) continue; + /* Go to step 5 */ + v = v*(u-p3)*lambdar; + } + else + { y = (int)(xl+log(v)/lambdal); + if (y < 0) continue; + /* Go to step 5 */ + v = v*(u-p2)*lambdal; + } + } + else + { const double x = xl + (u-p1)/c; + v = v*c + 1.0 - fabs(m-x+0.5)/p1; + if (v > 1) continue; + /* Go to step 5 */ + y = (int)x; + } + /* Step 5 */ + /* Step 5.0 */ + k = abs(y-m); + if (k > 20 && k < 0.5*n*p*q-1.0) + { /* Step 5.2 */ + double rho = (k/(n*p*q))*((k*(k/3.0 + 0.625) + 0.1666666666666)/(n*p*q)+0.5); + double t = -k*k/(2*n*p*q); + double A = log(v); + if (A < t-rho) return y; + else if (A > t+rho) continue; + else + { /* Step 5.3 */ + double x1 = y+1; + double f1 = m+1; + double z = n+1-m; + double w = n-y+1; + double x2 = x1*x1; + double f2 = f1*f1; + double z2 = z*z; + double w2 = w*w; + if (A > xm * log(f1/x1) + (n-m+0.5)*log(z/w) + + (y-m)*log(w*p/(x1*q)) + + (13860.-(462.-(132.-(99.-140./f2)/f2)/f2)/f2)/f1/166320. + + (13860.-(462.-(132.-(99.-140./z2)/z2)/z2)/z2)/z/166320. + + (13860.-(462.-(132.-(99.-140./x2)/x2)/x2)/x2)/x1/166320. + + (13860.-(462.-(132.-(99.-140./w2)/w2)/w2)/w2)/w/166320.) + continue; + return y; + } + } + else + { /* Step 5.1 */ + int i; + const double s = p/q; + const double aa = s*(n+1); + double f = 1.0; + for (i = m; i < y; f *= (aa/(++i)-s)); + for (i = y; i < m; f /= (aa/(++i)-s)); + if (v > f) continue; + return y; + } + } + } + /* Never get here */ + return -1; +} + +/* ************************************************************************ */ +inline int +nearest(int d_idx, int n_cluster, double *d2, + int ndata, int clusterid[], double** data, double** cdata, int** mask, int** cmask, + double weight[], int transpose, char dist) +{ + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + int k, min_k; + double d, min_d; + + min_d = HUGE_VAL; + min_k = clusterid[d_idx]; + + for (k = 0; k < n_cluster; k++) + { + double distance = metric(ndata, data, cdata, mask, cmask, weight, d_idx, k, transpose); + if (min_d > distance) { + min_d = distance; + min_k = k; + } + + } + if (d2) *d2 = min_d; + clusterid[d_idx] = min_k; + + return min_k; +} + +static void kplusplusassign (int nclusters, int ndata, int nelements, int clusterid[], double** data, double** cdata, int** mask, int** cmask, + double weight[], int transpose, char dist) +{ + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + int i, j, m, c; + double sum; + + double *d = (double*)malloc(sizeof(double) * nelements); + double *new_dist_sq = (double*)malloc(sizeof(double) * nelements); + double *best_dist_sq = (double*)malloc(sizeof(double) * nelements); + double* best_center = (double*)malloc(sizeof(double) * ndata); + + // set the number of local seeding trails: + // see: sciki-learn sklearn/cluster/k_means_.py line45 + int n_local_trials = 2 + int(log((double)nclusters)); + int* cand_center_index = (int*)malloc(sizeof(int) * n_local_trials); + + // random pick first center + int idx = (int) (uniform() * nelements); + for ( j=0; j 0) continue; + cand_center_index[i] = j; + break; + } + } + + double best_pot = DBL_MAX; + // tested on each candidate center + for (i = 0; i0) + { cdata[i][j] /= cmask[i][j]; + cmask[i][j] = 1; + } + } + } + } + else + { for (i = 0; i < nrows; i++) + { for (j = 0; j < nclusters; j++) + { cdata[i][j] = 0.; + cmask[i][j] = 0; + } + } + for (k = 0; k < ncolumns; k++) + { i = clusterid[k]; + for (j = 0; j < nrows; j++) + { if (mask[j][k] != 0) + { cdata[j][i]+=data[j][k]; + cmask[j][i]++; + } + } + } + for (i = 0; i < nrows; i++) + { for (j = 0; j < nclusters; j++) + { if (cmask[i][j]>0) + { cdata[i][j] /= cmask[i][j]; + cmask[i][j] = 1; + } + } + } + } +} + +/* ********************************************************************* */ + +static void +getclustermedians(int nclusters, int nrows, int ncolumns, + double** data, int** mask, int clusterid[], double** cdata, int** cmask, + int transpose, double cache[]) +/* +Purpose +======= + +The getclustermedians routine calculates the cluster centroids, given to which +cluster each element belongs. The centroid is defined as the median over all +elements for each dimension. + +Arguments +========= + +nclusters (input) int +The number of clusters. + +nrows (input) int +The number of rows in the gene expression data matrix, equal to the number of +genes. + +ncolumns (input) int +The number of columns in the gene expression data matrix, equal to the number of +microarrays. + +data (input) double[nrows][ncolumns] +The array containing the gene expression data. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If mask[i][j]==0, then +data[i][j] is missing. + +clusterid (output) int[nrows] if transpose==0 + int[ncolumns] if transpose==1 +The cluster number to which each element belongs. If transpose==0, then the +dimension of clusterid is equal to nrows (the number of genes). Otherwise, it +is equal to ncolumns (the number of microarrays). + +cdata (output) double[nclusters][ncolumns] if transpose==0 + double[nrows][nclusters] if transpose==1 +On exit of getclustermedians, this array contains the cluster centroids. + +cmask (output) int[nclusters][ncolumns] if transpose==0 + int[nrows][nclusters] if transpose==1 +This array shows which data values of are missing for each centroid. If +cmask[i][j]==0, then cdata[i][j] is missing. A data value is missing for +a centroid if all corresponding data values of the cluster members are missing. + +transpose (input) int +If transpose==0, clusters of rows (genes) are specified. Otherwise, clusters of +columns (microarrays) are specified. + +cache (input) double[nrows] if transpose==0 + double[ncolumns] if transpose==1 +This array should be allocated before calling getclustermedians; its contents +on input is not relevant. This array is used as a temporary storage space when +calculating the medians. + +======================================================================== +*/ +{ int i, j, k; + if (transpose==0) + { for (i = 0; i < nclusters; i++) + { for (j = 0; j < ncolumns; j++) + { int count = 0; + for (k = 0; k < nrows; k++) + { if (i==clusterid[k] && mask[k][j]) + { cache[count] = data[k][j]; + count++; + } + } + if (count>0) + { cdata[i][j] = median(count,cache); + cmask[i][j] = 1; + } + else + { cdata[i][j] = 0.; + cmask[i][j] = 0; + } + } + } + } + else + { for (i = 0; i < nclusters; i++) + { for (j = 0; j < nrows; j++) + { int count = 0; + for (k = 0; k < ncolumns; k++) + { if (i==clusterid[k] && mask[j][k]) + { cache[count] = data[j][k]; + count++; + } + } + if (count>0) + { cdata[j][i] = median(count,cache); + cmask[j][i] = 1; + } + else + { cdata[j][i] = 0.; + cmask[j][i] = 0; + } + } + } + } +} + +/* ********************************************************************* */ + +int getclustercentroids(int nclusters, int nrows, int ncolumns, + double** data, int** mask, int clusterid[], double** cdata, int** cmask, + int transpose, char method) +/* +Purpose +======= + +The getclustercentroids routine calculates the cluster centroids, given to +which cluster each element belongs. Depending on the argument method, the +centroid is defined as either the mean or the median for each dimension over +all elements belonging to a cluster. + +Arguments +========= + +nclusters (input) int +The number of clusters. + +nrows (input) int +The number of rows in the gene expression data matrix, equal to the number of +genes. + +ncolumns (input) int +The number of columns in the gene expression data matrix, equal to the number of +microarrays. + +data (input) double[nrows][ncolumns] +The array containing the gene expression data. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If mask[i][j]==0, then +data[i][j] is missing. + +clusterid (output) int[nrows] if transpose==0 + int[ncolumns] if transpose==1 +The cluster number to which each element belongs. If transpose==0, then the +dimension of clusterid is equal to nrows (the number of genes). Otherwise, it +is equal to ncolumns (the number of microarrays). + +cdata (output) double[nclusters][ncolumns] if transpose==0 + double[nrows][nclusters] if transpose==1 +On exit of getclustercentroids, this array contains the cluster centroids. + +cmask (output) int[nclusters][ncolumns] if transpose==0 + int[nrows][nclusters] if transpose==1 +This array shows which data values of are missing for each centroid. If +cmask[i][j]==0, then cdata[i][j] is missing. A data value is missing for +a centroid if all corresponding data values of the cluster members are missing. + +transpose (input) int +If transpose==0, clusters of rows (genes) are specified. Otherwise, clusters of +columns (microarrays) are specified. + +method (input) char +For method=='a', the centroid is defined as the mean over all elements +belonging to a cluster for each dimension. +For method=='m', the centroid is defined as the median over all elements +belonging to a cluster for each dimension. + +Return value +============ + +The function returns an integer to indicate success or failure. If a +memory error occurs, or if method is not 'm' or 'a', getclustercentroids +returns 0. If successful, getclustercentroids returns 1. +======================================================================== +*/ +{ switch(method) + { case 'm': + { const int nelements = (transpose==0) ? nrows : ncolumns; + double* cache = (double*)malloc(nelements*sizeof(double)); + if (!cache) return 0; + getclustermedians(nclusters, nrows, ncolumns, data, mask, clusterid, + cdata, cmask, transpose, cache); + free(cache); + return 1; + } + case 'a': + { getclustermeans(nclusters, nrows, ncolumns, data, mask, clusterid, + cdata, cmask, transpose); + return 1; + } + } + return 0; +} + +/* ********************************************************************* */ + +void getclustermedoids(int nclusters, int nelements, double** distance, + int clusterid[], int centroids[], double errors[]) +/* +Purpose +======= + +The getclustermedoids routine calculates the cluster centroids, given to which +cluster each element belongs. The centroid is defined as the element with the +smallest sum of distances to the other elements. + +Arguments +========= + +nclusters (input) int +The number of clusters. + +nelements (input) int +The total number of elements. + +distmatrix (input) double array, ragged + (number of rows is nelements, number of columns is equal to the row number) +The distance matrix. To save space, the distance matrix is given in the +form of a ragged array. The distance matrix is symmetric and has zeros +on the diagonal. See distancematrix for a description of the content. + +clusterid (output) int[nelements] +The cluster number to which each element belongs. + +centroid (output) int[nclusters] +The index of the element that functions as the centroid for each cluster. + +errors (output) double[nclusters] +The within-cluster sum of distances between the items and the cluster +centroid. + +======================================================================== +*/ +{ int i, j, k; + for (j = 0; j < nclusters; j++) errors[j] = DBL_MAX; + for (i = 0; i < nelements; i++) + { double d = 0.0; + j = clusterid[i]; + for (k = 0; k < nelements; k++) + { if (i==k || clusterid[k]!=j) continue; + d += (i < k ? distance[k][i] : distance[i][k]); + if (d > errors[j]) break; + } + if (d < errors[j]) + { errors[j] = d; + centroids[j] = i; + } + } +} + +/* ********************************************************************* */ + +static int +kmeans(int nclusters, int nrows, int ncolumns, double** data, int** mask, + double weight[], int transpose, int method, int npass, int n_maxiter, char dist, + double** cdata, int** cmask, int clusterid[], double* error, + int tclusterid[], int counts[], int mapping[]) +{ int i, j, k; + const int nelements = (transpose==0) ? nrows : ncolumns; + const int ndata = (transpose==0) ? ncolumns : nrows; + int ifound = 1; + int ipass = 0; + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + /* We save the clustering solution periodically and check if it reappears */ + int* saved = (int*)malloc(nelements*sizeof(int)); + if (saved==NULL) return -1; + + *error = DBL_MAX; + + do + { double total = DBL_MAX; + int counter = 0; + int period = 10; + + if (method == 0) { + /* Perform the EM algorithm. First, randomly assign elements to clusters. */ + //if (npass!=0) + randomassign (nclusters, nelements, tclusterid); + } else { + /* Perform the kmeans++ algorithm: finding init centers */ + kplusplusassign(nclusters,ndata,nelements,tclusterid,data,cdata,mask,cmask,weight,transpose,dist); + } + + for (i = 0; i < nclusters; i++) counts[i] = 0; + for (i = 0; i < nelements; i++) counts[tclusterid[i]]++; + + /* Start the loop */ + int iter = 0; + while(iter < n_maxiter) + { iter++; + double previous = total; + total = 0.0; + + if (counter % period == 0) /* Save the current cluster assignments */ + { for (i = 0; i < nelements; i++) saved[i] = tclusterid[i]; + if (period < INT_MAX / 2) period *= 2; + } + counter++; + + /* Find the center */ + getclustermeans(nclusters, nrows, ncolumns, data, mask, tclusterid, + cdata, cmask, transpose); + + for (i = 0; i < nelements; i++) + /* Calculate the distances */ + { double distance; + k = tclusterid[i]; + if (counts[k]==1) continue; + /* No reassignment if that would lead to an empty cluster */ + /* Treat the present cluster as a special case */ + distance = metric(ndata,data,cdata,mask,cmask,weight,i,k,transpose); + for (j = 0; j < nclusters; j++) + { double tdistance; + if (j==k) continue; + tdistance = metric(ndata,data,cdata,mask,cmask,weight,i,j,transpose); + if (tdistance < distance) + { distance = tdistance; + counts[tclusterid[i]]--; + tclusterid[i] = j; + counts[j]++; + } + } + total += distance; + } + if (total>=previous) break; + /* total>=previous is FALSE on some machines even if total and previous + * are bitwise identical. */ + for (i = 0; i < nelements; i++) + if (saved[i]!=tclusterid[i]) break; + if (i==nelements) + break; /* Identical solution found; break out of this loop */ + } + + if (npass<=1) + { *error = total; + break; + } + + for (i = 0; i < nclusters; i++) mapping[i] = -1; + for (i = 0; i < nelements; i++) + { j = tclusterid[i]; + k = clusterid[i]; + if (mapping[k] == -1) mapping[k] = j; + else if (mapping[k] != j) + { if (total < *error) + { ifound = 1; + *error = total; + for (j = 0; j < nelements; j++) clusterid[j] = tclusterid[j]; + } + break; + } + } + if (i==nelements) ifound++; /* break statement not encountered */ + } while (++ipass < npass); + + free(saved); + return ifound; +} + +/* ---------------------------------------------------------------------- */ + +static int +kmedians(int nclusters, int nrows, int ncolumns, double** data, int** mask, + double weight[], int transpose, int npass, int n_maxiter, char dist, + double** cdata, int** cmask, int clusterid[], double* error, + int tclusterid[], int counts[], int mapping[], double cache[]) +{ int i, j, k; + const int nelements = (transpose==0) ? nrows : ncolumns; + const int ndata = (transpose==0) ? ncolumns : nrows; + int ifound = 1; + int ipass = 0; + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + /* We save the clustering solution periodically and check if it reappears */ + int* saved = (int*)malloc(nelements*sizeof(int)); + if (saved==NULL) return -1; + + *error = DBL_MAX; + + do + { double total = DBL_MAX; + int counter = 0; + int period = 10; + + /* Perform the EM algorithm. First, randomly assign elements to clusters. */ + if (npass!=0) randomassign (nclusters, nelements, tclusterid); + + for (i = 0; i < nclusters; i++) counts[i]=0; + for (i = 0; i < nelements; i++) counts[tclusterid[i]]++; + + /* Start the loop */ + int iter = 0; + while(iter < n_maxiter) + { iter ++ ; + double previous = total; + total = 0.0; + + if (counter % period == 0) /* Save the current cluster assignments */ + { for (i = 0; i < nelements; i++) saved[i] = tclusterid[i]; + if (period < INT_MAX / 2) period *= 2; + } + counter++; + + /* Find the center */ + getclustermedians(nclusters, nrows, ncolumns, data, mask, tclusterid, + cdata, cmask, transpose, cache); + + for (i = 0; i < nelements; i++) + /* Calculate the distances */ + { double distance; + k = tclusterid[i]; + if (counts[k]==1) continue; + /* No reassignment if that would lead to an empty cluster */ + /* Treat the present cluster as a special case */ + distance = metric(ndata,data,cdata,mask,cmask,weight,i,k,transpose); + for (j = 0; j < nclusters; j++) + { double tdistance; + if (j==k) continue; + tdistance = metric(ndata,data,cdata,mask,cmask,weight,i,j,transpose); + if (tdistance < distance) + { distance = tdistance; + counts[tclusterid[i]]--; + tclusterid[i] = j; + counts[j]++; + } + } + total += distance; + } + if (total>=previous) break; + /* total>=previous is FALSE on some machines even if total and previous + * are bitwise identical. */ + for (i = 0; i < nelements; i++) + if (saved[i]!=tclusterid[i]) break; + if (i==nelements) + break; /* Identical solution found; break out of this loop */ + } + + if (npass<=1) + { *error = total; + break; + } + + for (i = 0; i < nclusters; i++) mapping[i] = -1; + for (i = 0; i < nelements; i++) + { j = tclusterid[i]; + k = clusterid[i]; + if (mapping[k] == -1) mapping[k] = j; + else if (mapping[k] != j) + { if (total < *error) + { ifound = 1; + *error = total; + for (j = 0; j < nelements; j++) clusterid[j] = tclusterid[j]; + } + break; + } + } + if (i==nelements) ifound++; /* break statement not encountered */ + } while (++ipass < npass); + + free(saved); + return ifound; +} + +/* ********************************************************************* */ + +void kcluster (int nclusters, int nrows, int ncolumns, + double** data, int** mask, double weight[], int transpose, + int npass, int n_maxiter, char method, char dist, + int clusterid[], double* error, int* ifound) +/* +Purpose +======= + +The kcluster routine performs k-means or k-median clustering on a given set of +elements, using the specified distance measure. The number of clusters is given +by the user. Multiple passes are being made to find the optimal clustering +solution, each time starting from a different initial clustering. + + +Arguments +========= + +nclusters (input) int +The number of clusters to be found. + +data (input) double[nrows][ncolumns] +The array containing the data of the elements to be clustered (i.e., the gene +expression data). + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If +mask[i][j] == 0, then data[i][j] is missing. + +nrows (input) int +The number of rows in the data matrix, equal to the number of genes. + +ncolumns (input) int +The number of columns in the data matrix, equal to the number of microarrays. + +weight (input) double[n] +The weights that are used to calculate the distance. + +transpose (input) int +If transpose==0, the rows of the matrix are clustered. Otherwise, columns +of the matrix are clustered. + +npass (input) int +The number of times clustering is performed. Clustering is performed npass +times, each time starting from a different (random) initial assignment of +genes to clusters. The clustering solution with the lowest within-cluster sum +of distances is chosen. +If npass==0, then the clustering algorithm will be run once, where the initial +assignment of elements to clusters is taken from the clusterid array. + +n_maxiter (input) int +Maximum number of iterations of the k-means algorithm to run (using by EM). + +method (input) char +Defines whether the arithmetic mean (method=='a') or the median +(method=='m') is used to calculate the cluster center. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +clusterid (output; input) int[nrows] if transpose==0 + int[ncolumns] if transpose==1 +The cluster number to which a gene or microarray was assigned. If npass==0, +then on input clusterid contains the initial clustering assignment from which +the clustering algorithm starts. On output, it contains the clustering solution +that was found. + +error (output) double* +The sum of distances to the cluster center of each item in the optimal k-means +clustering solution that was found. + +ifound (output) int* +The number of times the optimal clustering solution was +found. The value of ifound is at least 1; its maximum value is npass. If the +number of clusters is larger than the number of elements being clustered, +*ifound is set to 0 as an error code. If a memory allocation error occurs, +*ifound is set to -1. + +======================================================================== +*/ +{ const int nelements = (transpose==0) ? nrows : ncolumns; + const int ndata = (transpose==0) ? ncolumns : nrows; + + int i; + int ok; + int* tclusterid; + int* mapping = NULL; + double** cdata; + int** cmask; + int* counts; + + if (nelements < nclusters) + { *ifound = 0; + return; + } + /* More clusters asked for than elements available */ + + *ifound = -1; + + /* This will contain the number of elements in each cluster, which is + * needed to check for empty clusters. */ + counts = (int*)malloc(nclusters*sizeof(int)); + if(!counts) return; + + /* Find out if the user specified an initial clustering */ + if (npass<=1) tclusterid = clusterid; + else + { tclusterid = (int*)malloc(nelements*sizeof(int)); + if (!tclusterid) + { free(counts); + return; + } + mapping = (int*)malloc(nclusters*sizeof(int)); + if (!mapping) + { free(counts); + free(tclusterid); + return; + } + for (i = 0; i < nelements; i++) clusterid[i] = 0; + } + + /* Allocate space to store the centroid data */ + if (transpose==0) ok = makedatamask(nclusters, ndata, &cdata, &cmask); + else ok = makedatamask(ndata, nclusters, &cdata, &cmask); + if(!ok) + { free(counts); + if(npass>1) + { free(tclusterid); + free(mapping); + return; + } + } + + if (method=='m') + { double* cache = (double*)malloc(nelements*sizeof(double)); + if(cache) + { *ifound = kmedians(nclusters, nrows, ncolumns, data, mask, weight, + transpose, npass, n_maxiter, dist, cdata, cmask, clusterid, error, + tclusterid, counts, mapping, cache); + free(cache); + } + } + else if (method == 'b') + /* kmeans but with KMeans++ algorithm*/ + *ifound = kmeans(nclusters, nrows, ncolumns, data, mask, weight, + transpose, 1, npass, n_maxiter, dist, cdata, cmask, clusterid, error, + tclusterid, counts, mapping); + else + *ifound = kmeans(nclusters, nrows, ncolumns, data, mask, weight, + transpose, 0, npass, n_maxiter, dist, cdata, cmask, clusterid, error, + tclusterid, counts, mapping); + + /* Deallocate temporarily used space */ + if (npass > 1) + { free(mapping); + free(tclusterid); + } + + if (transpose==0) freedatamask(nclusters, cdata, cmask); + else freedatamask(ndata, cdata, cmask); + + free(counts); +} + +/* *********************************************************************** */ + +void kmedoids (int nclusters, int nelements, double** distmatrix, + int npass, int clusterid[], double* error, int* ifound) +/* +Purpose +======= + +The kmedoids routine performs k-medoids clustering on a given set of elements, +using the distance matrix and the number of clusters passed by the user. +Multiple passes are being made to find the optimal clustering solution, each +time starting from a different initial clustering. + + +Arguments +========= + +nclusters (input) int +The number of clusters to be found. + +nelements (input) int +The number of elements to be clustered. + +distmatrix (input) double array, ragged + (number of rows is nelements, number of columns is equal to the row number) +The distance matrix. To save space, the distance matrix is given in the +form of a ragged array. The distance matrix is symmetric and has zeros +on the diagonal. See distancematrix for a description of the content. + +npass (input) int +The number of times clustering is performed. Clustering is performed npass +times, each time starting from a different (random) initial assignment of genes +to clusters. The clustering solution with the lowest within-cluster sum of +distances is chosen. +If npass==0, then the clustering algorithm will be run once, where the initial +assignment of elements to clusters is taken from the clusterid array. + +clusterid (output; input) int[nelements] +On input, if npass==0, then clusterid contains the initial clustering assignment +from which the clustering algorithm starts; all numbers in clusterid should be +between zero and nelements-1 inclusive. If npass!=0, clusterid is ignored on +input. +On output, clusterid contains the clustering solution that was found: clusterid +contains the number of the cluster to which each item was assigned. On output, +the number of a cluster is defined as the item number of the centroid of the +cluster. + +error (output) double +The sum of distances to the cluster center of each item in the optimal k-medoids +clustering solution that was found. + +ifound (output) int +If kmedoids is successful: the number of times the optimal clustering solution +was found. The value of ifound is at least 1; its maximum value is npass. +If the user requested more clusters than elements available, ifound is set +to 0. If kmedoids fails due to a memory allocation error, ifound is set to -1. + +======================================================================== +*/ +{ int i, j, icluster; + int* tclusterid; + int* saved; + int* centroids; + double* errors; + int ipass = 0; + + if (nelements < nclusters) + { *ifound = 0; + return; + } /* More clusters asked for than elements available */ + + *ifound = -1; + + /* We save the clustering solution periodically and check if it reappears */ + saved = (int*)malloc(nelements*sizeof(int)); + if (saved==NULL) return; + + centroids = (int*)malloc(nclusters*sizeof(int)); + if(!centroids) + { free(saved); + return; + } + + errors = (double*)malloc(nclusters*sizeof(double)); + if(!errors) + { free(saved); + free(centroids); + return; + } + + /* Find out if the user specified an initial clustering */ + if (npass<=1) tclusterid = clusterid; + else + { tclusterid = (int*)malloc(nelements*sizeof(int)); + if(!tclusterid) + { free(saved); + free(centroids); + free(errors); + return; + } + } + + *error = DBL_MAX; + do /* Start the loop */ + { double total = DBL_MAX; + int counter = 0; + int period = 10; + + if (npass!=0) randomassign (nclusters, nelements, tclusterid); + while(1) + { double previous = total; + total = 0.0; + + if (counter % period == 0) /* Save the current cluster assignments */ + { for (i = 0; i < nelements; i++) saved[i] = tclusterid[i]; + if (period < INT_MAX / 2) period *= 2; + } + counter++; + + /* Find the center */ + getclustermedoids(nclusters, nelements, distmatrix, tclusterid, + centroids, errors); + + for (i = 0; i < nelements; i++) + /* Find the closest cluster */ + { double distance = DBL_MAX; + for (icluster = 0; icluster < nclusters; icluster++) + { double tdistance; + j = centroids[icluster]; + if (i==j) + { distance = 0.0; + tclusterid[i] = icluster; + break; + } + tdistance = (i > j) ? distmatrix[i][j] : distmatrix[j][i]; + if (tdistance < distance) + { distance = tdistance; + tclusterid[i] = icluster; + } + } + total += distance; + } + if (total>=previous) break; + /* total>=previous is FALSE on some machines even if total and previous + * are bitwise identical. */ + for (i = 0; i < nelements; i++) + if (saved[i]!=tclusterid[i]) break; + if (i==nelements) + break; /* Identical solution found; break out of this loop */ + } + + for (i = 0; i < nelements; i++) + { if (clusterid[i]!=centroids[tclusterid[i]]) + { if (total < *error) + { *ifound = 1; + *error = total; + /* Replace by the centroid in each cluster. */ + for (j = 0; j < nelements; j++) + clusterid[j] = centroids[tclusterid[j]]; + } + break; + } + } + if (i==nelements) (*ifound)++; /* break statement not encountered */ + } while (++ipass < npass); + + /* Deallocate temporarily used space */ + if (npass > 1) free(tclusterid); + + free(saved); + free(centroids); + free(errors); + + return; +} + +/* ******************************************************************** */ + +double** distancematrix (int nrows, int ncolumns, double** data, + int** mask, double weights[], char dist, int transpose) +/* +Purpose +======= + +The distancematrix routine calculates the distance matrix between genes or +microarrays using their measured gene expression data. Several distance measures +can be used. The routine returns a pointer to a ragged array containing the +distances between the genes. As the distance matrix is symmetric, with zeros on +the diagonal, only the lower triangular half of the distance matrix is saved. +The distancematrix routine allocates space for the distance matrix. If the +parameter transpose is set to a nonzero value, the distances between the columns +(microarrays) are calculated, otherwise distances between the rows (genes) are +calculated. +If sufficient space in memory cannot be allocated to store the distance matrix, +the routine returns a NULL pointer, and all memory allocated so far for the +distance matrix is freed. + + +Arguments +========= + +nrows (input) int +The number of rows in the gene expression data matrix (i.e., the number of +genes) + +ncolumns (input) int +The number of columns in the gene expression data matrix (i.e., the number of +microarrays) + +data (input) double[nrows][ncolumns] +The array containing the gene expression data. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If mask[i][j]==0, then +data[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. The length of this vector +is equal to the number of columns if the distances between genes are calculated, +or the number of rows if the distances between microarrays are calculated. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +transpose (input) int +If transpose is equal to zero, the distances between the rows is +calculated. Otherwise, the distances between the columns is calculated. +The former is needed when genes are being clustered; the latter is used +when microarrays are being clustered. + +======================================================================== +*/ +{ /* First determine the size of the distance matrix */ + const int n = (transpose==0) ? nrows : ncolumns; + const int ndata = (transpose==0) ? ncolumns : nrows; + int i,j; + double** matrix; + + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + if (n < 2) return NULL; + + /* Set up the ragged array */ + matrix = (double**)malloc(n*sizeof(double*)); + if(matrix==NULL) return NULL; /* Not enough memory available */ + matrix[0] = NULL; + /* The zeroth row has zero columns. We allocate it anyway for convenience.*/ + for (i = 1; i < n; i++) + { matrix[i] = (double*)malloc(i*sizeof(double)); + if (matrix[i]==NULL) break; /* Not enough memory available */ + } + if (i < n) /* break condition encountered */ + { j = i; + for (i = 1; i < j; i++) free(matrix[i]); + return NULL; + } + + /* Calculate the distances and save them in the ragged array */ + for (i = 1; i < n; i++) + for (j = 0; j < i; j++) + matrix[i][j]=metric(ndata,data,data,mask,mask,weights,i,j,transpose); + + return matrix; +} + +/* ******************************************************************** */ + +double* calculate_weights(int nrows, int ncolumns, double** data, int** mask, + double weights[], int transpose, char dist, double cutoff, double exponent) + +/* +Purpose +======= + +This function calculates the weights using the weighting scheme proposed by +Michael Eisen: +w[i] = 1.0 / sum_{j where d[i][j]= n; i--) + { k = tree[i].left; + if (k>=0) + { clusterid[k] = icluster; + icluster++; + } + k = tree[i].right; + if (k>=0) + { clusterid[k] = icluster; + icluster++; + } + } + nodeid = (int*)malloc(n*sizeof(int)); + if(!nodeid) + { for (i = 0; i < nelements; i++) clusterid[i] = -1; + return 0; + } + for (i = 0; i < n; i++) nodeid[i] = -1; + for (i = n-1; i >= 0; i--) + { if(nodeid[i]<0) + { j = icluster; + nodeid[i] = j; + icluster++; + } + else j = nodeid[i]; + k = tree[i].left; + if (k<0) nodeid[-k-1] = j; else clusterid[k] = j; + k = tree[i].right; + if (k<0) nodeid[-k-1] = j; else clusterid[k] = j; + } + free(nodeid); + return tree[n-1].distance; +} + +/* ******************************************************************** */ + +static +GdaNode* pclcluster (int nrows, int ncolumns, double** data, int** mask, + double weight[], double** distmatrix, char dist, int transpose) + +/* + +Purpose +======= + +The pclcluster routine performs clustering using pairwise centroid-linking +on a given set of gene expression data, using the distance metric given by dist. + +Arguments +========= + +nrows (input) int +The number of rows in the gene expression data matrix, equal to the number of +genes. + +ncolumns (input) int +The number of columns in the gene expression data matrix, equal to the number of +microarrays. + +data (input) double[nrows][ncolumns] +The array containing the gene expression data. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If +mask[i][j] == 0, then data[i][j] is missing. + +weight (input) double[ncolumns] if transpose==0; + double[nrows] if transpose==1 +The weights that are used to calculate the distance. The length of this vector +is ncolumns if genes are being clustered, and nrows if microarrays are being +clustered. + +transpose (input) int +If transpose==0, the rows of the matrix are clustered. Otherwise, columns +of the matrix are clustered. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +distmatrix (input) double** +The distance matrix. This matrix is precalculated by the calling routine +treecluster. The pclcluster routine modifies the contents of distmatrix, but +does not deallocate it. + +Return value +============ + +A pointer to a newly allocated array of GdaNode structs, describing the +hierarchical clustering solution consisting of nelements-1 nodes. Depending on +whether genes (rows) or microarrays (columns) were clustered, nelements is +equal to nrows or ncolumns. See src/cluster.h for a description of the GdaNode +structure. +If a memory error occurs, pclcluster returns NULL. +======================================================================== +*/ +{ int i, j; + const int nelements = (transpose==0) ? nrows : ncolumns; + int inode; + const int ndata = transpose ? nrows : ncolumns; + const int nnodes = nelements - 1; + + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + GdaNode* result; + double** newdata; + int** newmask; + int* distid = (int*)malloc(nelements*sizeof(int)); + if(!distid) return NULL; + result = (GdaNode*)malloc(nnodes*sizeof(GdaNode)); + if(!result) + { free(distid); + return NULL; + } + if(!makedatamask(nelements, ndata, &newdata, &newmask)) + { free(result); + free(distid); + return NULL; + } + + for (i = 0; i < nelements; i++) distid[i] = i; + /* To remember which row/column in the distance matrix contains what */ + + /* Storage for node data */ + if (transpose) + { for (i = 0; i < nelements; i++) + { for (j = 0; j < ndata; j++) + { newdata[i][j] = data[j][i]; + newmask[i][j] = mask[j][i]; + } + } + data = newdata; + mask = newmask; + } + else + { for (i = 0; i < nelements; i++) + { memcpy(newdata[i], data[i], ndata*sizeof(double)); + memcpy(newmask[i], mask[i], ndata*sizeof(int)); + } + data = newdata; + mask = newmask; + } + + for (inode = 0; inode < nnodes; inode++) + { /* Find the pair with the shortest distance */ + int is = 1; + int js = 0; + result[inode].distance = find_closest_pair(nelements-inode, distmatrix, &is, &js); + result[inode].left = distid[js]; + result[inode].right = distid[is]; + + /* Make node js the new node */ + for (i = 0; i < ndata; i++) + { data[js][i] = data[js][i]*mask[js][i] + data[is][i]*mask[is][i]; + mask[js][i] += mask[is][i]; + if (mask[js][i]) data[js][i] /= mask[js][i]; + } + free(data[is]); + free(mask[is]); + data[is] = data[nnodes-inode]; + mask[is] = mask[nnodes-inode]; + + /* Fix the distances */ + distid[is] = distid[nnodes-inode]; + for (i = 0; i < is; i++) + distmatrix[is][i] = distmatrix[nnodes-inode][i]; + for (i = is + 1; i < nnodes-inode; i++) + distmatrix[i][is] = distmatrix[nnodes-inode][i]; + + distid[js] = -inode-1; + for (i = 0; i < js; i++) + distmatrix[js][i] = metric(ndata,data,data,mask,mask,weight,js,i,0); + for (i = js + 1; i < nnodes-inode; i++) + distmatrix[i][js] = metric(ndata,data,data,mask,mask,weight,js,i,0); + } + + /* Free temporarily allocated space */ + free(data[0]); + free(mask[0]); + free(data); + free(mask); + free(distid); + + return result; +} + +/* ******************************************************************** */ + +static +int nodecompare(const void* a, const void* b) +/* Helper function for qsort. */ +{ const GdaNode* node1 = (const GdaNode*)a; + const GdaNode* node2 = (const GdaNode*)b; + const double term1 = node1->distance; + const double term2 = node2->distance; + if (term1 < term2) return -1; + if (term1 > term2) return +1; + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static +GdaNode* pslcluster (int nrows, int ncolumns, double** data, int** mask, + double weight[], double** distmatrix, char dist, int transpose) + +/* + +Purpose +======= + +The pslcluster routine performs single-linkage hierarchical clustering, using +either the distance matrix directly, if available, or by calculating the +distances from the data array. This implementation is based on the SLINK +algorithm, described in: +Sibson, R. (1973). SLINK: An optimally efficient algorithm for the single-link +cluster method. The Computer Journal, 16(1): 30-34. +The output of this algorithm is identical to conventional single-linkage +hierarchical clustering, but is much more memory-efficient and faster. Hence, +it can be applied to large data sets, for which the conventional single- +linkage algorithm fails due to lack of memory. + + +Arguments +========= + +nrows (input) int +The number of rows in the gene expression data matrix, equal to the number of +genes. + +ncolumns (input) int +The number of columns in the gene expression data matrix, equal to the number of +microarrays. + +data (input) double[nrows][ncolumns] +The array containing the gene expression data. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If +mask[i][j] == 0, then data[i][j] is missing. + +weight (input) double[n] +The weights that are used to calculate the distance. The length of this vector +is ncolumns if genes are being clustered, and nrows if microarrays are being +clustered. + +transpose (input) int +If transpose==0, the rows of the matrix are clustered. Otherwise, columns +of the matrix are clustered. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +distmatrix (input) double** +The distance matrix. If the distance matrix is passed by the calling routine +treecluster, it is used by pslcluster to speed up the clustering calculation. +The pslcluster routine does not modify the contents of distmatrix, and does +not deallocate it. If distmatrix is NULL, the pairwise distances are calculated +by the pslcluster routine from the gene expression data (the data and mask +arrays) and stored in temporary arrays. If distmatrix is passed, the original +gene expression data (specified by the data and mask arguments) are not needed +and are therefore ignored. + + +Return value +============ + +A pointer to a newly allocated array of GdaNode structs, describing the +hierarchical clustering solution consisting of nelements-1 nodes. Depending on +whether genes (rows) or microarrays (columns) were clustered, nelements is +equal to nrows or ncolumns. See src/cluster.h for a description of the GdaNode +structure. +If a memory error occurs, pslcluster returns NULL. + +======================================================================== +*/ +{ int i, j, k; + const int nelements = transpose ? ncolumns : nrows; + const int nnodes = nelements - 1; + int* vector; + double* temp; + int* index; + GdaNode* result; + temp = (double*)malloc(nnodes*sizeof(double)); + if(!temp) return NULL; + index = (int*)malloc(nelements*sizeof(int)); + if(!index) + { free(temp); + return NULL; + } + vector = (int*)malloc(nnodes*sizeof(int)); + if(!vector) + { free(index); + free(temp); + return NULL; + } + result = (GdaNode*)malloc(nelements*sizeof(GdaNode)); + if(!result) + { free(vector); + free(index); + free(temp); + return NULL; + } + + for (i = 0; i < nnodes; i++) vector[i] = i; + + if(distmatrix) + { for (i = 0; i < nrows; i++) + { result[i].distance = DBL_MAX; + for (j = 0; j < i; j++) temp[j] = distmatrix[i][j]; + for (j = 0; j < i; j++) + { k = vector[j]; + if (result[j].distance >= temp[j]) + { if (result[j].distance < temp[k]) temp[k] = result[j].distance; + result[j].distance = temp[j]; + vector[j] = i; + } + else if (temp[j] < temp[k]) temp[k] = temp[j]; + } + for (j = 0; j < i; j++) + { + if (result[j].distance >= result[vector[j]].distance) vector[j] = i; + } + } + } + else + { const int ndata = transpose ? nrows : ncolumns; + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + for (i = 0; i < nelements; i++) + { result[i].distance = DBL_MAX; + for (j = 0; j < i; j++) temp[j] = + metric(ndata, data, data, mask, mask, weight, i, j, transpose); + for (j = 0; j < i; j++) + { k = vector[j]; + if (result[j].distance >= temp[j]) + { if (result[j].distance < temp[k]) temp[k] = result[j].distance; + result[j].distance = temp[j]; + vector[j] = i; + } + else if (temp[j] < temp[k]) temp[k] = temp[j]; + } + for (j = 0; j < i; j++) + if (result[j].distance >= result[vector[j]].distance) vector[j] = i; + } + } + free(temp); + + for (i = 0; i < nnodes; i++) result[i].left = i; + qsort(result, nnodes, sizeof(GdaNode), nodecompare); + + for (i = 0; i < nelements; i++) index[i] = i; + for (i = 0; i < nnodes; i++) + { j = result[i].left; + k = vector[j]; + result[i].left = index[j]; + result[i].right = index[k]; + index[k] = -i-1; + } + free(vector); + free(index); + + result = (GdaNode*)realloc(result, nnodes*sizeof(GdaNode)); + + return result; +} +/* ******************************************************************** */ + +static GdaNode* pmlcluster (int nelements, double** distmatrix) +/* + +Purpose +======= + +The pmlcluster routine performs clustering using pairwise maximum- (complete-) +linking on the given distance matrix. + +Arguments +========= + +nelements (input) int +The number of elements to be clustered. + +distmatrix (input) double** +The distance matrix, with nelements rows, each row being filled up to the +diagonal. The elements on the diagonal are not used, as they are assumed to be +zero. The distance matrix will be modified by this routine. + +Return value +============ + +A pointer to a newly allocated array of GdaNode structs, describing the +hierarchical clustering solution consisting of nelements-1 nodes. Depending on +whether genes (rows) or microarrays (columns) were clustered, nelements is +equal to nrows or ncolumns. See src/cluster.h for a description of the GdaNode +structure. +If a memory error occurs, pmlcluster returns NULL. +======================================================================== +*/ +{ int j; + int n; + int* clusterid; + GdaNode* result; + + clusterid = (int*)malloc(nelements*sizeof(int)); + if(!clusterid) return NULL; + result = (GdaNode*)malloc((nelements-1)*sizeof(GdaNode)); + if (!result) + { free(clusterid); + return NULL; + } + + /* Setup a list specifying to which cluster a gene belongs */ + for (j = 0; j < nelements; j++) clusterid[j] = j; + + for (n = nelements; n > 1; n--) + { int is = 1; + int js = 0; + result[nelements-n].distance = find_closest_pair(n, distmatrix, &is, &js); + + /* Fix the distances */ + for (j = 0; j < js; j++) + distmatrix[js][j] = max(distmatrix[is][j],distmatrix[js][j]); + for (j = js+1; j < is; j++) + distmatrix[j][js] = max(distmatrix[is][j],distmatrix[j][js]); + for (j = is+1; j < n; j++) + distmatrix[j][js] = max(distmatrix[j][is],distmatrix[j][js]); + + for (j = 0; j < is; j++) distmatrix[is][j] = distmatrix[n-1][j]; + for (j = is+1; j < n-1; j++) distmatrix[j][is] = distmatrix[n-1][j]; + + /* Update clusterids */ + result[nelements-n].left = clusterid[is]; + result[nelements-n].right = clusterid[js]; + clusterid[js] = n-nelements-1; + clusterid[is] = clusterid[n-1]; + } + free(clusterid); + + return result; +} + +/* ******************************************************************* */ + +static GdaNode* palcluster (int nelements, double** distmatrix) +/* +Purpose +======= + +The palcluster routine performs clustering using pairwise average +linking on the given distance matrix. + +Arguments +========= + +nelements (input) int +The number of elements to be clustered. + +distmatrix (input) double** +The distance matrix, with nelements rows, each row being filled up to the +diagonal. The elements on the diagonal are not used, as they are assumed to be +zero. The distance matrix will be modified by this routine. + +Return value +============ + +A pointer to a newly allocated array of GdaNode structs, describing the +hierarchical clustering solution consisting of nelements-1 nodes. Depending on +whether genes (rows) or microarrays (columns) were clustered, nelements is +equal to nrows or ncolumns. See src/cluster.h for a description of the GdaNode +structure. +If a memory error occurs, palcluster returns NULL. +======================================================================== +*/ +{ int j; + int n; + int* clusterid; + int* number; + GdaNode* result; + + clusterid = (int*)malloc(nelements*sizeof(int)); + if(!clusterid) return NULL; + number = (int*)malloc(nelements*sizeof(int)); + if(!number) + { free(clusterid); + return NULL; + } + result = (GdaNode*)malloc((nelements-1)*sizeof(GdaNode)); + if (!result) + { free(clusterid); + free(number); + return NULL; + } + + /* Setup a list specifying to which cluster a gene belongs, and keep track + * of the number of elements in each cluster (needed to calculate the + * average). */ + for (j = 0; j < nelements; j++) + { number[j] = 1; + clusterid[j] = j; + } + + for (n = nelements; n > 1; n--) + { int sum; + int is = 1; + int js = 0; + result[nelements-n].distance = find_closest_pair(n, distmatrix, &is, &js); + + /* Save result */ + result[nelements-n].left = clusterid[is]; + result[nelements-n].right = clusterid[js]; + + /* Fix the distances */ + sum = number[is] + number[js]; + for (j = 0; j < js; j++) + { distmatrix[js][j] = distmatrix[is][j]*number[is] + + distmatrix[js][j]*number[js]; + distmatrix[js][j] /= sum; + } + for (j = js+1; j < is; j++) + { distmatrix[j][js] = distmatrix[is][j]*number[is] + + distmatrix[j][js]*number[js]; + distmatrix[j][js] /= sum; + } + for (j = is+1; j < n; j++) + { distmatrix[j][js] = distmatrix[j][is]*number[is] + + distmatrix[j][js]*number[js]; + distmatrix[j][js] /= sum; + } + + for (j = 0; j < is; j++) distmatrix[is][j] = distmatrix[n-1][j]; + for (j = is+1; j < n-1; j++) distmatrix[j][is] = distmatrix[n-1][j]; + + /* Update number of elements in the clusters */ + number[js] = sum; + number[is] = number[n-1]; + + /* Update clusterids */ + clusterid[js] = n-nelements-1; + clusterid[is] = clusterid[n-1]; + } + free(clusterid); + free(number); + + return result; +} + +/* ******************************************************************* */ + +GdaNode* treecluster (int nrows, int ncolumns, double** data, int** mask, + double weight[], int transpose, char dist, char method, double** distmatrix) +/* +Purpose +======= + +The treecluster routine performs hierarchical clustering using pairwise +single-, maximum-, centroid-, or average-linkage, as defined by method, on a +given set of gene expression data, using the distance metric given by dist. +If successful, the function returns a pointer to a newly allocated Tree struct +containing the hierarchical clustering solution, and NULL if a memory error +occurs. The pointer should be freed by the calling routine to prevent memory +leaks. + +Arguments +========= + +nrows (input) int +The number of rows in the data matrix, equal to the number of genes. + +ncolumns (input) int +The number of columns in the data matrix, equal to the number of microarrays. + +data (input) double[nrows][ncolumns] +The array containing the data of the vectors to be clustered. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If mask[i][j]==0, then +data[i][j] is missing. + +weight (input) double array[n] +The weights that are used to calculate the distance. + +transpose (input) int +If transpose==0, the rows of the matrix are clustered. Otherwise, columns +of the matrix are clustered. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +method (input) char +Defines which hierarchical clustering method is used: +method=='s': pairwise single-linkage clustering +method=='m': pairwise maximum- (or complete-) linkage clustering +method=='a': pairwise average-linkage clustering +method=='c': pairwise centroid-linkage clustering +For the first three, either the distance matrix or the gene expression data is +sufficient to perform the clustering algorithm. For pairwise centroid-linkage +clustering, however, the gene expression data are always needed, even if the +distance matrix itself is available. + +distmatrix (input) double** +The distance matrix. If the distance matrix is zero initially, the distance +matrix will be allocated and calculated from the data by treecluster, and +deallocated before treecluster returns. If the distance matrix is passed by the +calling routine, treecluster will modify the contents of the distance matrix as +part of the clustering algorithm, but will not deallocate it. The calling +routine should deallocate the distance matrix after the return from treecluster. + +Return value +============ + +A pointer to a newly allocated array of GdaNode structs, describing the +hierarchical clustering solution consisting of nelements-1 nodes. Depending on +whether genes (rows) or microarrays (columns) were clustered, nelements is +equal to nrows or ncolumns. See src/cluster.h for a description of the GdaNode +structure. +If a memory error occurs, treecluster returns NULL. + +======================================================================== +*/ +{ GdaNode* result = NULL; + const int nelements = (transpose==0) ? nrows : ncolumns; + const int ldistmatrix = (distmatrix==NULL && method!='s') ? 1 : 0; + + if (nelements < 2) return NULL; + + /* Calculate the distance matrix if the user didn't give it */ + if(ldistmatrix) + { distmatrix = + distancematrix(nrows, ncolumns, data, mask, weight, dist, transpose); + if (!distmatrix) return NULL; /* Insufficient memory */ + } + + switch(method) + { case 's': + result = pslcluster(nrows, ncolumns, data, mask, weight, distmatrix, + dist, transpose); + break; + case 'm': + result = pmlcluster(nelements, distmatrix); + break; + case 'a': + result = palcluster(nelements, distmatrix); + break; + case 'c': + result = pclcluster(nrows, ncolumns, data, mask, weight, distmatrix, + dist, transpose); + break; + } + + /* Deallocate space for distance matrix, if it was allocated by treecluster */ + if(ldistmatrix) + { int i; + for (i = 1; i < nelements; i++) free(distmatrix[i]); + free (distmatrix); + } + + return result; +} + +/* ******************************************************************* */ + +static +void somworker (int nrows, int ncolumns, double** data, int** mask, + const double weights[], int transpose, int nxgrid, int nygrid, + double inittau, double*** celldata, int niter, char dist) + +{ const int nelements = (transpose==0) ? nrows : ncolumns; + const int ndata = (transpose==0) ? ncolumns : nrows; + int i, j; + double* stddata = (double*)calloc(nelements,sizeof(double)); + int** dummymask; + int ix, iy; + int* index; + int iter; + /* Maximum radius in which nodes are adjusted */ + double maxradius = sqrt((double)(nxgrid*nxgrid+nygrid*nygrid)); + + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + /* Calculate the standard deviation for each row or column */ + if (transpose==0) + { for (i = 0; i < nelements; i++) + { int n = 0; + for (j = 0; j < ndata; j++) + { if (mask[i][j]) + { double term = data[i][j]; + term = term * term; + stddata[i] += term; + n++; + } + } + if (stddata[i] > 0) stddata[i] = sqrt(stddata[i]/n); + else stddata[i] = 1; + } + } + else + { for (i = 0; i < nelements; i++) + { int n = 0; + for (j = 0; j < ndata; j++) + { if (mask[j][i]) + { double term = data[j][i]; + term = term * term; + stddata[i] += term; + n++; + } + } + if (stddata[i] > 0) stddata[i] = sqrt(stddata[i]/n); + else stddata[i] = 1; + } + } + + if (transpose==0) + { dummymask = (int**)malloc(nygrid*sizeof(int*)); + for (i = 0; i < nygrid; i++) + { dummymask[i] = (int*)malloc(ndata*sizeof(int)); + for (j = 0; j < ndata; j++) dummymask[i][j] = 1; + } + } + else + { dummymask = (int**)malloc(ndata*sizeof(int*)); + for (i = 0; i < ndata; i++) + { dummymask[i] = (int*)malloc(sizeof(int)); + dummymask[i][0] = 1; + } + } + + /* Randomly initialize the nodes */ + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { double sum = 0.; + for (i = 0; i < ndata; i++) + { double term = -1.0 + 2.0*uniform(); + celldata[ix][iy][i] = term; + sum += term * term; + } + sum = sqrt(sum/ndata); + for (i = 0; i < ndata; i++) celldata[ix][iy][i] /= sum; + } + } + + /* Randomize the order in which genes or arrays will be used */ + index = (int*)malloc(nelements*sizeof(int)); + for (i = 0; i < nelements; i++) index[i] = i; + for (i = 0; i < nelements; i++) + { j = (int) (i + (nelements-i)*uniform()); + ix = index[j]; + index[j] = index[i]; + index[i] = ix; + } + + /* Start the iteration */ + for (iter = 0; iter < niter; iter++) + { int ixbest = 0; + int iybest = 0; + int iobject = iter % nelements; + iobject = index[iobject]; + if (transpose==0) + { double closest = metric(ndata,data,celldata[ixbest], + mask,dummymask,weights,iobject,iybest,transpose); + double radius = maxradius * (1. - ((double)iter)/((double)niter)); + double tau = inittau * (1. - ((double)iter)/((double)niter)); + + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { double distance = + metric (ndata,data,celldata[ix], + mask,dummymask,weights,iobject,iy,transpose); + if (distance < closest) + { ixbest = ix; + iybest = iy; + closest = distance; + } + } + } + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { if (sqrt((double)((ix-ixbest)*(ix-ixbest)+(iy-iybest)*(iy-iybest)))0) + { sum = sqrt(sum/ndata); + for (i = 0; i < ndata; i++) celldata[ix][iy][i] /= sum; + } + } + } + } + } + else + { double closest; + double** celldatavector = (double**)malloc(ndata*sizeof(double*)); + double radius = maxradius * (1. - ((double)iter)/((double)niter)); + double tau = inittau * (1. - ((double)iter)/((double)niter)); + + for (i = 0; i < ndata; i++) + celldatavector[i] = &(celldata[ixbest][iybest][i]); + closest = metric(ndata,data,celldatavector, + mask,dummymask,weights,iobject,0,transpose); + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { double distance; + for (i = 0; i < ndata; i++) + celldatavector[i] = &(celldata[ixbest][iybest][i]); + distance = + metric (ndata,data,celldatavector, + mask,dummymask,weights,iobject,0,transpose); + if (distance < closest) + { ixbest = ix; + iybest = iy; + closest = distance; + } + } + } + free(celldatavector); + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { if (sqrt((double)((ix-ixbest)*(ix-ixbest)+(iy-iybest)*(iy-iybest)))0) + { sum = sqrt(sum/ndata); + for (i = 0; i < ndata; i++) celldata[ix][iy][i] /= sum; + } + } + } + } + } + } + if (transpose==0) + for (i = 0; i < nygrid; i++) free(dummymask[i]); + else + for (i = 0; i < ndata; i++) free(dummymask[i]); + free(dummymask); + free(stddata); + free(index); + return; +} + +/* ******************************************************************* */ + +static +void somassign (int nrows, int ncolumns, double** data, int** mask, + const double weights[], int transpose, int nxgrid, int nygrid, + double*** celldata, char dist, int clusterid[][2]) +/* Collect clusterids */ +{ const int ndata = (transpose==0) ? ncolumns : nrows; + int i,j; + + /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + if (transpose==0) + { int** dummymask = (int**)malloc(nygrid*sizeof(int*)); + for (i = 0; i < nygrid; i++) + { dummymask[i] = (int*)malloc(ncolumns*sizeof(int)); + for (j = 0; j < ncolumns; j++) dummymask[i][j] = 1; + } + for (i = 0; i < nrows; i++) + { int ixbest = 0; + int iybest = 0; + double closest = metric(ndata,data,celldata[ixbest], + mask,dummymask,weights,i,iybest,transpose); + int ix, iy; + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { double distance = + metric (ndata,data,celldata[ix], + mask,dummymask,weights,i,iy,transpose); + if (distance < closest) + { ixbest = ix; + iybest = iy; + closest = distance; + } + } + } + clusterid[i][0] = ixbest; + clusterid[i][1] = iybest; + } + for (i = 0; i < nygrid; i++) free(dummymask[i]); + free(dummymask); + } + else + { double** celldatavector = (double**)malloc(ndata*sizeof(double*)); + int** dummymask = (int**)malloc(nrows*sizeof(int*)); + int ixbest = 0; + int iybest = 0; + for (i = 0; i < nrows; i++) + { dummymask[i] = (int*)malloc(sizeof(int)); + dummymask[i][0] = 1; + } + for (i = 0; i < ncolumns; i++) + { double closest; + int ix, iy; + for (j = 0; j < ndata; j++) + celldatavector[j] = &(celldata[ixbest][iybest][j]); + closest = metric(ndata,data,celldatavector, + mask,dummymask,weights,i,0,transpose); + for (ix = 0; ix < nxgrid; ix++) + { for (iy = 0; iy < nygrid; iy++) + { double distance; + for(j = 0; j < ndata; j++) + celldatavector[j] = &(celldata[ix][iy][j]); + distance = metric(ndata,data,celldatavector, + mask,dummymask,weights,i,0,transpose); + if (distance < closest) + { ixbest = ix; + iybest = iy; + closest = distance; + } + } + } + clusterid[i][0] = ixbest; + clusterid[i][1] = iybest; + } + free(celldatavector); + for (i = 0; i < nrows; i++) free(dummymask[i]); + free(dummymask); + } + return; +} + +/* ******************************************************************* */ + +void somcluster (int nrows, int ncolumns, double** data, int** mask, + const double weight[], int transpose, int nxgrid, int nygrid, + double inittau, int niter, char dist, double*** celldata, int clusterid[][2]) +/* + +Purpose +======= + +The somcluster routine implements a self-organizing map (Kohonen) on a +rectangular grid, using a given set of vectors. The distance measure to be +used to find the similarity between genes and nodes is given by dist. + +Arguments +========= + +nrows (input) int +The number of rows in the data matrix, equal to the number of genes. + +ncolumns (input) int +The number of columns in the data matrix, equal to the number of microarrays. + +data (input) double[nrows][ncolumns] +The array containing the gene expression data. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If +mask[i][j] == 0, then data[i][j] is missing. + +weights (input) double[ncolumns] if transpose==0; + double[nrows] if transpose==1 +The weights that are used to calculate the distance. The length of this vector +is ncolumns if genes are being clustered, or nrows if microarrays are being +clustered. + +transpose (input) int +If transpose==0, the rows (genes) of the matrix are clustered. Otherwise, +columns (microarrays) of the matrix are clustered. + +nxgrid (input) int +The number of grid cells horizontally in the rectangular topology of clusters. + +nygrid (input) int +The number of grid cells horizontally in the rectangular topology of clusters. + +inittau (input) double +The initial value of tau, representing the neighborhood function. + +niter (input) int +The number of iterations to be performed. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +celldata (output) double[nxgrid][nygrid][ncolumns] if transpose==0; + double[nxgrid][nygrid][nrows] if tranpose==1 +The gene expression data for each node (cell) in the 2D grid. This can be +interpreted as the centroid for the cluster corresponding to that cell. If +celldata is NULL, then the centroids are not returned. If celldata is not +NULL, enough space should be allocated to store the centroid data before callingsomcluster. + +clusterid (output), int[nrows][2] if transpose==0; + int[ncolumns][2] if transpose==1 +For each item (gene or microarray) that is clustered, the coordinates of the +cell in the 2D grid to which the item was assigned. If clusterid is NULL, the +cluster assignments are not returned. If clusterid is not NULL, enough memory +should be allocated to store the clustering information before calling +somcluster. + +======================================================================== +*/ +{ const int nobjects = (transpose==0) ? nrows : ncolumns; + const int ndata = (transpose==0) ? ncolumns : nrows; + int i,j; + const int lcelldata = (celldata==NULL) ? 0 : 1; + + if (nobjects < 2) return; + + if (lcelldata==0) + { celldata = (double***)malloc(nxgrid*nygrid*ndata*sizeof(double**)); + for (i = 0; i < nxgrid; i++) + { celldata[i] = (double**)malloc(nygrid*ndata*sizeof(double*)); + for (j = 0; j < nygrid; j++) + celldata[i][j] = (double*)malloc(ndata*sizeof(double)); + } + } + + somworker (nrows, ncolumns, data, mask, weight, transpose, nxgrid, nygrid, + inittau, celldata, niter, dist); + if (clusterid) + somassign (nrows, ncolumns, data, mask, weight, transpose, + nxgrid, nygrid, celldata, dist, clusterid); + if(lcelldata==0) + { for (i = 0; i < nxgrid; i++) + for (j = 0; j < nygrid; j++) + free(celldata[i][j]); + for (i = 0; i < nxgrid; i++) + free(celldata[i]); + free(celldata); + } + return; +} + +/* ******************************************************************** */ + +double clusterdistance (int nrows, int ncolumns, double** data, + int** mask, double weight[], int n1, int n2, int index1[], int index2[], + char dist, char method, int transpose) + +/* +Purpose +======= + +The clusterdistance routine calculates the distance between two clusters +containing genes or microarrays using the measured gene expression vectors. The +distance between clusters, given the genes/microarrays in each cluster, can be +defined in several ways. Several distance measures can be used. + +The routine returns the distance in double precision. +If the parameter transpose is set to a nonzero value, the clusters are +interpreted as clusters of microarrays, otherwise as clusters of gene. + +Arguments +========= + +nrows (input) int +The number of rows (i.e., the number of genes) in the gene expression data +matrix. + +ncolumns (input) int +The number of columns (i.e., the number of microarrays) in the gene expression +data matrix. + +data (input) double[nrows][ncolumns] +The array containing the data of the vectors. + +mask (input) int[nrows][ncolumns] +This array shows which data values are missing. If mask[i][j]==0, then +data[i][j] is missing. + +weight (input) double[ncolumns] if transpose==0; + double[nrows] if transpose==1 +The weights that are used to calculate the distance. + +n1 (input) int +The number of elements in the first cluster. + +n2 (input) int +The number of elements in the second cluster. + +index1 (input) int[n1] +Identifies which genes/microarrays belong to the first cluster. + +index2 (input) int[n2] +Identifies which genes/microarrays belong to the second cluster. + +dist (input) char +Defines which distance measure is used, as given by the table: +dist=='e': Euclidean distance +dist=='b': City-block distance +dist=='c': correlation +dist=='a': absolute value of the correlation +dist=='u': uncentered correlation +dist=='x': absolute uncentered correlation +dist=='s': Spearman's rank correlation +dist=='k': Kendall's tau +For other values of dist, the default (Euclidean distance) is used. + +method (input) char +Defines how the distance between two clusters is defined, given which genes +belong to which cluster: +method=='a': the distance between the arithmetic means of the two clusters +method=='m': the distance between the medians of the two clusters +method=='s': the smallest pairwise distance between members of the two clusters +method=='x': the largest pairwise distance between members of the two clusters +method=='v': average of the pairwise distances between members of the clusters + +transpose (input) int +If transpose is equal to zero, the distances between the rows is +calculated. Otherwise, the distances between the columns is calculated. +The former is needed when genes are being clustered; the latter is used +when microarrays are being clustered. + +======================================================================== +*/ +{ /* Set the metric function as indicated by dist */ + double (*metric) + (int, double**, double**, int**, int**, const double[], int, int, int) = + setmetric(dist); + + /* if one or both clusters are empty, return */ + if (n1 < 1 || n2 < 1) return -1.0; + /* Check the indices */ + if (transpose==0) + { int i; + for (i = 0; i < n1; i++) + { int index = index1[i]; + if (index < 0 || index >= nrows) return -1.0; + } + for (i = 0; i < n2; i++) + { int index = index2[i]; + if (index < 0 || index >= nrows) return -1.0; + } + } + else + { int i; + for (i = 0; i < n1; i++) + { int index = index1[i]; + if (index < 0 || index >= ncolumns) return -1.0; + } + for (i = 0; i < n2; i++) + { int index = index2[i]; + if (index < 0 || index >= ncolumns) return -1.0; + } + } + + switch (method) + { case 'a': + { /* Find the center */ + int i,j,k; + if (transpose==0) + { double distance; + double* cdata[2]; + int* cmask[2]; + int* count[2]; + count[0] = (int*)calloc(ncolumns,sizeof(int)); + count[1] = (int*)calloc(ncolumns,sizeof(int)); + cdata[0] = (double*)calloc(ncolumns,sizeof(double)); + cdata[1] = (double*)calloc(ncolumns,sizeof(double)); + cmask[0] = (int*)malloc(ncolumns*sizeof(int)); + cmask[1] = (int*)malloc(ncolumns*sizeof(int)); + for (i = 0; i < n1; i++) + { k = index1[i]; + for (j = 0; j < ncolumns; j++) + if (mask[k][j] != 0) + { cdata[0][j] = cdata[0][j] + data[k][j]; + count[0][j] = count[0][j] + 1; + } + } + for (i = 0; i < n2; i++) + { k = index2[i]; + for (j = 0; j < ncolumns; j++) + if (mask[k][j] != 0) + { cdata[1][j] = cdata[1][j] + data[k][j]; + count[1][j] = count[1][j] + 1; + } + } + for (i = 0; i < 2; i++) + for (j = 0; j < ncolumns; j++) + { if (count[i][j]>0) + { cdata[i][j] = cdata[i][j] / count[i][j]; + cmask[i][j] = 1; + } + else + cmask[i][j] = 0; + } + distance = + metric (ncolumns,cdata,cdata,cmask,cmask,weight,0,1,0); + for (i = 0; i < 2; i++) + { free (cdata[i]); + free (cmask[i]); + free (count[i]); + } + return distance; + } + else + { double distance; + int** count = (int**)malloc(nrows*sizeof(int*)); + double** cdata = (double**)malloc(nrows*sizeof(double*)); + int** cmask = (int**)malloc(nrows*sizeof(int*)); + for (i = 0; i < nrows; i++) + { count[i] = (int*)calloc(2,sizeof(int)); + cdata[i] = (double*)calloc(2,sizeof(double)); + cmask[i] = (int*)malloc(2*sizeof(int)); + } + for (i = 0; i < n1; i++) + { k = index1[i]; + for (j = 0; j < nrows; j++) + { if (mask[j][k] != 0) + { cdata[j][0] = cdata[j][0] + data[j][k]; + count[j][0] = count[j][0] + 1; + } + } + } + for (i = 0; i < n2; i++) + { k = index2[i]; + for (j = 0; j < nrows; j++) + { if (mask[j][k] != 0) + { cdata[j][1] = cdata[j][1] + data[j][k]; + count[j][1] = count[j][1] + 1; + } + } + } + for (i = 0; i < nrows; i++) + for (j = 0; j < 2; j++) + if (count[i][j]>0) + { cdata[i][j] = cdata[i][j] / count[i][j]; + cmask[i][j] = 1; + } + else + cmask[i][j] = 0; + distance = metric (nrows,cdata,cdata,cmask,cmask,weight,0,1,1); + for (i = 0; i < nrows; i++) + { free (count[i]); + free (cdata[i]); + free (cmask[i]); + } + free (count); + free (cdata); + free (cmask); + return distance; + } + } + case 'm': + { int i, j, k; + if (transpose==0) + { double distance; + double* temp = (double*)malloc(nrows*sizeof(double)); + double* cdata[2]; + int* cmask[2]; + for (i = 0; i < 2; i++) + { cdata[i] = (double*)malloc(ncolumns*sizeof(double)); + cmask[i] = (int*)malloc(ncolumns*sizeof(int)); + } + for (j = 0; j < ncolumns; j++) + { int count = 0; + for (k = 0; k < n1; k++) + { i = index1[k]; + if (mask[i][j]) + { temp[count] = data[i][j]; + count++; + } + } + if (count>0) + { cdata[0][j] = median (count,temp); + cmask[0][j] = 1; + } + else + { cdata[0][j] = 0.; + cmask[0][j] = 0; + } + } + for (j = 0; j < ncolumns; j++) + { int count = 0; + for (k = 0; k < n2; k++) + { i = index2[k]; + if (mask[i][j]) + { temp[count] = data[i][j]; + count++; + } + } + if (count>0) + { cdata[1][j] = median (count,temp); + cmask[1][j] = 1; + } + else + { cdata[1][j] = 0.; + cmask[1][j] = 0; + } + } + distance = metric (ncolumns,cdata,cdata,cmask,cmask,weight,0,1,0); + for (i = 0; i < 2; i++) + { free (cdata[i]); + free (cmask[i]); + } + free(temp); + return distance; + } + else + { double distance; + double* temp = (double*)malloc(ncolumns*sizeof(double)); + double** cdata = (double**)malloc(nrows*sizeof(double*)); + int** cmask = (int**)malloc(nrows*sizeof(int*)); + for (i = 0; i < nrows; i++) + { cdata[i] = (double*)malloc(2*sizeof(double)); + cmask[i] = (int*)malloc(2*sizeof(int)); + } + for (j = 0; j < nrows; j++) + { int count = 0; + for (k = 0; k < n1; k++) + { i = index1[k]; + if (mask[j][i]) + { temp[count] = data[j][i]; + count++; + } + } + if (count>0) + { cdata[j][0] = median (count,temp); + cmask[j][0] = 1; + } + else + { cdata[j][0] = 0.; + cmask[j][0] = 0; + } + } + for (j = 0; j < nrows; j++) + { int count = 0; + for (k = 0; k < n2; k++) + { i = index2[k]; + if (mask[j][i]) + { temp[count] = data[j][i]; + count++; + } + } + if (count>0) + { cdata[j][1] = median (count,temp); + cmask[j][1] = 1; + } + else + { cdata[j][1] = 0.; + cmask[j][1] = 0; + } + } + distance = metric (nrows,cdata,cdata,cmask,cmask,weight,0,1,1); + for (i = 0; i < nrows; i++) + { free (cdata[i]); + free (cmask[i]); + } + free(cdata); + free(cmask); + free(temp); + return distance; + } + } + case 's': + { int i1, i2, j1, j2; + const int n = (transpose==0) ? ncolumns : nrows; + double mindistance = DBL_MAX; + for (i1 = 0; i1 < n1; i1++) + for (i2 = 0; i2 < n2; i2++) + { double distance; + j1 = index1[i1]; + j2 = index2[i2]; + distance = metric (n,data,data,mask,mask,weight,j1,j2,transpose); + if (distance < mindistance) mindistance = distance; + } + return mindistance; + } + case 'x': + { int i1, i2, j1, j2; + const int n = (transpose==0) ? ncolumns : nrows; + double maxdistance = 0; + for (i1 = 0; i1 < n1; i1++) + for (i2 = 0; i2 < n2; i2++) + { double distance; + j1 = index1[i1]; + j2 = index2[i2]; + distance = metric (n,data,data,mask,mask,weight,j1,j2,transpose); + if (distance > maxdistance) maxdistance = distance; + } + return maxdistance; + } + case 'v': + { int i1, i2, j1, j2; + const int n = (transpose==0) ? ncolumns : nrows; + double distance = 0; + for (i1 = 0; i1 < n1; i1++) + for (i2 = 0; i2 < n2; i2++) + { j1 = index1[i1]; + j2 = index2[i2]; + distance += metric (n,data,data,mask,mask,weight,j1,j2,transpose); + } + distance /= (n1*n2); + return distance; + } + } + /* Never get here */ + return -2.0; +} diff --git a/Algorithms/cluster.h b/Algorithms/cluster.h new file mode 100644 index 000000000..65da9a7d3 --- /dev/null +++ b/Algorithms/cluster.h @@ -0,0 +1,104 @@ +/******************************************************************************/ +/* The C Clustering Library. + * Copyright (C) 2002 Michiel Jan Laurens de Hoon. + * + * This library was written at the Laboratory of DNA Information Analysis, + * Human Genome Center, Institute of Medical Science, University of Tokyo, + * 4-6-1 Shirokanedai, Minato-ku, Tokyo 108-8639, Japan. + * Contact: mdehoon 'AT' gsc.riken.jp + * + * Permission to use, copy, modify, and distribute this software and its + * documentation with or without modifications and for any purpose and + * without fee is hereby granted, provided that any copyright notices + * appear in all copies and that both those copyright notices and this + * permission notice appear in supporting documentation, and that the + * names of the contributors or copyright holders not be used in + * advertising or publicity pertaining to distribution of the software + * without specific prior permission. + * + * THE CONTRIBUTORS AND COPYRIGHT HOLDERS OF THIS SOFTWARE DISCLAIM ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE + * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE + * OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef __GEODA_CENTER_CLUSTERS_H___ +#define __GEODA_CENTER_CLUSTERS_H___ + + +#ifndef min +#define min(x, y) ((x) < (y) ? (x) : (y)) +#endif +#ifndef max +#define max(x, y) ((x) > (y) ? (x) : (y)) +#endif + +#ifdef WINDOWS +# include +#endif + +#define CLUSTERVERSION "1.52a" + +/* If an integer is given, it fixes the seed. Defaults to the global numpy random number generator. */ +static int random_state = -1; +void setrandomstate(int seed); +double uniform(void); + +/* Chapter 2 */ +double clusterdistance (int nrows, int ncolumns, double** data, int** mask, + double weight[], int n1, int n2, int index1[], int index2[], char dist, + char method, int transpose); +double** distancematrix (int ngenes, int ndata, double** data, + int** mask, double* weight, char dist, int transpose); + +/* Chapter 3 */ +int getclustercentroids(int nclusters, int nrows, int ncolumns, + double** data, int** mask, int clusterid[], double** cdata, int** cmask, + int transpose, char method); +void getclustermedoids(int nclusters, int nelements, double** distance, + int clusterid[], int centroids[], double errors[]); +void kcluster (int nclusters, int ngenes, int ndata, double** data, + int** mask, double weight[], int transpose, int npass, int n_maxiter, char method, char dist, + int clusterid[], double* error, int* ifound); +void kmedoids (int nclusters, int nelements, double** distance, + int npass, int clusterid[], double* error, int* ifound); + +/* Chapter 4 */ +struct GdaNode{int left; int right; double distance;}; +/* + * A Node struct describes a single node in a tree created by hierarchical + * clustering. The tree can be represented by an array of n Node structs, + * where n is the number of elements minus one. The integers left and right + * in each Node struct refer to the two elements or subnodes that are joined + * in this node. The original elements are numbered 0..nelements-1, and the + * nodes -1..-(nelements-1). For each node, distance contains the distance + * between the two subnodes that were joined. + */ + +GdaNode* treecluster (int nrows, int ncolumns, double** data, int** mask, + double weight[], int transpose, char dist, char method, double** distmatrix); +double cuttree (int nelements, GdaNode* tree, int nclusters, int clusterid[]); + +/* Chapter 5 */ +void somcluster (int nrows, int ncolumns, double** data, int** mask, + const double weight[], int transpose, int nxnodes, int nynodes, + double inittau, int niter, char dist, double*** celldata, + int clusterid[][2]); + +/* Chapter 6 */ +int pca(int m, int n, double** u, double** v, double* w); + +/* Utility routines, currently undocumented */ +void sort(int n, const double data[], int index[]); +double mean(int n, double x[]); +double median (int n, double x[]); + +double* calculate_weights(int nrows, int ncolumns, double** data, int** mask, + double weights[], int transpose, char dist, double cutoff, double exponent); + +#endif diff --git a/Algorithms/maxp.cpp b/Algorithms/maxp.cpp new file mode 100644 index 000000000..2fec31e17 --- /dev/null +++ b/Algorithms/maxp.cpp @@ -0,0 +1,245 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Created 5/30/2017 lixun910@gmail.com + */ + +#include +#include +#include +#include +#include + +#include "../ShapeOperations/GalWeight.h" +#include "../logger.h" +#include "../GenUtils.h" +#include "cluster.h" +#include "maxp.h" + + + +using namespace std; + +Maxp::Maxp(const GalElement* _w, const vector >& _z, int floor, vector floor_variable, int initial, vector seed) +: w(_w), z(_z), LARGE(1000000), MAX_ATTEMPTS(100) +{ + num_obs = floor_variable.size(); + + if (random_state<0) { + unsigned int initseed = (unsigned int) time(0); + srand(initseed); + } else { + srand(random_state); + } + + + // init solution + init_solution(); + if (p != 0) + feasible = false; + else { + feasible = true; + + } + +} + +Maxp::~Maxp() +{ + +} + +double Maxp::objective_function() +{ + double wss = 0; + // for every variable, calc the variance using selected neighbors + vector > selected_z; + + //for (int n=0; n<) + for (int n=0; n val; + for (int i=0; i& region) +{ + double cv = 0; + for (size_t i=0; i& f_v = floor_variable[ region[i] ]; + for (size_t j=0; j= floor) + return true; + else + return false; +} + +void Maxp::init_solution() +{ + p = 0; + bool solving = true; + int attempts = 0; + + while (solving && attempts <= MAX_ATTEMPTS) { + vector > regions; + list enclaves; + list candidates; + if (seed.empty()) { + vector _candidates; + for (int i=0; i::iterator iter; + vector::iterator vector_iter; + + while (!candidates.empty()) { + int seed = candidates.front(); + candidates.pop_front(); + + // try to grow it till threshold constraint is satisfied + vector region; + region.push_back(seed); + + + bool building_region = true; + while (building_region) { + // check if floor is satisfied + if (check_floor(region)) { + regions.push_back(region); + building_region = false; + } else { + vector potential; + for (int area=0; area a2r; + for (int i=0; i 0 && encAttempts != encCount) { + int enclave = enclaves.front(); + enclaves.pop_front(); + for ( int n=0; n. + * + * Created: 5/30/2017 lixun910@gmail.com + */ + +#ifndef __GEODA_CENTER_MAX_P_H__ +#define __GEODA_CENTER_MAX_P_H__ + +#include +#include + +#include "../ShapeOperations/GalWeight.h" + + +using namespace std; + +/*! A Max-p class */ + +class Maxp +{ +public: + //! A Constructor + /*! + \param w spatial weights object + \param z array n*m array of observations on m attributes across n areas. This is used to calculate intra-regional + \param floor int a minimum bound for a variable that has to be obtained in each region homogeneity + \param floor_variable array n*1 vector of observations on variable for the floor + \param initial int number of initial solutions to generate + \param seed list ids of observations to form initial seeds. If len(ids) is less than the number of observations, the complementary ids are added to the end of seeds. Thus the specified seeds get priority in the solution + */ + Maxp(const GalElement* w, const vector >& z, int floor, vector floor_variable, int initial, vector seed); + + + //! A Deconstructor + /*! + Details. + */ + ~Maxp(); + + +protected: + //! A const spatial weights reference. + /*! + Details. + */ + const GalElement* w; + + + + bool feasible; + + //! A integer number of regions. + /*! + Details. + */ + int num_obs; + + //! A vector of vector list of ids to form initial seeds. + /*! + Details. seed list ids of observations to form initial seeds. + */ + vector > seed; + + //! A n*1 vector of observations on variable for the floor + /*! + Details. + */ + vector > floor_variable; + + //! A n*m array of observations on m attributes across n areas. + /*! + Details. This is used to calculate intra-regional + */ + const vector > z; + + //! A map variable mapping of areas to region. + /*! + Details. key is area id, value is region id. + */ + map area2region; + + //! A vector of vector list of lists of regions. + /*! + Details. each list has the ids of areas in that region. + */ + vector > regions; + + //! A integer number of regions. + /*! + Details. + */ + int p; + + //! A integer number of swap iterations. + /*! + Details. + */ + int swap_iterations; + + //! A integer number of moves into internal regions. + /*! + Details. + */ + int total_moves; + + //! A integer number of moves into internal regions. + /*! + Details. + */ + int floor; + + //! A const integer number of largest regions (=10 ** 6). + /*! + Details. + */ + const int LARGE; + + //! A const integer number of max attemps (=100). + /*! + Details. + */ + const int MAX_ATTEMPTS; + + //! A protected member function: init_solution(void). + /*! + Details. + */ + void init_solution(); + + //! A protected member function: init_solution(void). return + /*! + \param region a const vector of unsigned int. + \return boolean true if meet floor else return false + */ + bool check_floor(const vector& region); + + double objective_function(); + +}; + +#endif diff --git a/Algorithms/pca.cpp b/Algorithms/pca.cpp new file mode 100755 index 000000000..acc37dc22 --- /dev/null +++ b/Algorithms/pca.cpp @@ -0,0 +1,300 @@ +#define NODEBUG +#include +#ifdef DEBUG + #include +#endif +#include +#include "pca.h" + +using namespace std; +using namespace Eigen; + +int Pca::Calculate(vector &x, + const unsigned int &nrows, + const unsigned int &ncols, + const bool is_corr, + const bool is_center, + const bool is_scale) { + _ncols = ncols; + _nrows = nrows; + _is_corr = is_corr; + _is_center = is_center; + _is_scale = is_scale; + if (x.size()!= _nrows*_ncols) { + return -1; + } + if ((1 == _ncols) || (1 == nrows)) { + return -1; + } + // Convert vector to Eigen 2-dimensional matrix + //Map _xXf(x.data(), _nrows, _ncols); + _xXf.resize(_nrows, _ncols); + for (unsigned int i = 0; i < _nrows; ++i) { + for (unsigned int j = 0; j < _ncols; ++j) { + _xXf(i, j) = x[j + i*_ncols]; + } + } + // Mean and standard deviation for each column + VectorXf mean_vector(_ncols); + mean_vector = _xXf.colwise().mean(); + VectorXf sd_vector(_ncols); + unsigned int zero_sd_num = 0; + float denom = static_cast((_nrows > 1)? _nrows - 1: 1); + for (unsigned int i = 0; i < _ncols; ++i) { + VectorXf curr_col = VectorXf::Constant(_nrows, mean_vector(i)); // mean(x) for column x + curr_col = _xXf.col(i) - curr_col; // x - mean(x) + curr_col = curr_col.array().square(); // (x-mean(x))^2 + sd_vector(i) = sqrt((curr_col.sum())/denom); + if (0 == sd_vector(i)) { + zero_sd_num++; + } + } + // If colums with sd == 0 are too many, + // don't continue calculations + if (1 > _ncols-zero_sd_num) { + return -1; + } + // Delete columns where sd == 0 + MatrixXf tmp(_nrows, _ncols-zero_sd_num); + VectorXf tmp_mean_vector(_ncols-zero_sd_num); + unsigned int curr_col_num = 0; + for (unsigned int i = 0; i < _ncols; ++i) { + if (0 != sd_vector(i)) { + tmp.col(curr_col_num) = _xXf.col(i); + tmp_mean_vector(curr_col_num) = mean_vector(i); + curr_col_num++; + } else { + _eliminated_columns.push_back(i); + } + } + _ncols -= zero_sd_num; + _xXf = tmp; + mean_vector = tmp_mean_vector; + tmp.resize(0, 0); tmp_mean_vector.resize(0); + // Shift to zero + if (true == _is_center || true == _is_corr ) { + for (unsigned int i = 0; i < _ncols; ++i) { + _xXf.col(i) -= VectorXf::Constant(_nrows, mean_vector(i)); + } + } + // Scale to unit variance + //if ( (false == _is_corr) || (true == _is_scale)) { + if (true == _is_scale || true == _is_corr) { + for (unsigned int i = 0; i < _ncols; ++i) { + _xXf.col(i) /= sqrt(_xXf.col(i).array().square().sum()/denom); + } + } + #ifdef DEBUG + cout << "\nScaled matrix:\n"; + cout << _xXf << endl; + cout << "\nMean before scaling:\n" << mean_vector.transpose(); + cout << "\nStandard deviation before scaling:\n" << sd_vector.transpose(); + #endif + // When _nrows < _ncols then svd will be used. + // If corr is true and _nrows > _ncols then will be used correlation matrix + // (TODO): What about covariance? + if ( (_nrows < _ncols) || (false == _is_corr)) { // Singular Value Decomposition is on + _method = "svd"; + JacobiSVD svd(_xXf, ComputeThinV); + VectorXf eigen_singular_values = svd.singularValues(); + VectorXf tmp_vec = eigen_singular_values.array().square(); + float tmp_sum = tmp_vec.sum(); + tmp_vec /= tmp_sum; + // PC's standard deviation and + // PC's proportion of variance + _kaiser = 0; + unsigned int lim = (_nrows < _ncols)? _nrows : _ncols; + eigen_values.resize(lim); + for (unsigned int i = 0; i < lim; ++i) { + _sd.push_back(eigen_singular_values(i)/sqrt(denom)); + eigen_values[i] = _sd[i] * _sd[i]; + if (_sd[i] >= 1) { + _kaiser = i + 1; + } + _prop_of_var.push_back(tmp_vec(i)); + } + #ifdef DEBUG + cout << "\n\nStandard deviations for PCs:\n"; + copy(_sd.begin(), _sd.end(),std::ostream_iterator(std::cout," ")); + cout << "\n\nKaiser criterion: PC #" << _kaiser << endl; + #endif + tmp_vec.resize(0); + // PC's cumulative proportion + _thresh95 = 1; + _cum_prop.push_back(_prop_of_var[0]); + for (unsigned int i = 1; i < _prop_of_var.size(); ++i) { + _cum_prop.push_back(_cum_prop[i-1]+_prop_of_var[i]); + if (_cum_prop[i] < 0.95) { + _thresh95 = i+1; + } + } + #ifdef DEBUG + cout << "\nCumulative proportion:\n"; + copy(_cum_prop.begin(), _cum_prop.end(),std::ostream_iterator(std::cout," ")); + cout << "\n\nThresh95 criterion: PC #" << _thresh95 << endl; + #endif + // Scores + eigen_vectors = svd.matrixV(); + + MatrixXf eigen_scores = _xXf * eigen_vectors; + //MatrixXf eigen_scores = _xXf * svd.matrixV(); + #ifdef DEBUG + cout << "\n\nRotated values (scores):\n" << eigen_scores; + #endif + _scores.reserve(eigen_scores.rows()*eigen_scores.cols()); + for (unsigned int i = 0; i < eigen_scores.rows(); ++i) { + for (unsigned int j = 0; j < eigen_scores.cols(); ++j) { + _scores.push_back(eigen_scores(i, j)); + } + } + eigen_scores.resize(0, 0); + #ifdef DEBUG + cout << "\n\nScores in vector:\n"; + copy(_scores.begin(), _scores.end(),std::ostream_iterator(std::cout," ")); + cout << "\n"; + #endif + } else { // COR OR COV MATRICES ARE HERE + /* Straight and simple: if the scales are similar use cov-PCA, if not, use corr-PCA; otherwise, you better have a defense for not. If in doubt, use an F-test for the equality of the variances (ANOVA). If it fails the F-test, use corr; otherwise, use cov. + */ + _method = "cor"; + // Calculate covariance matrix + MatrixXf eigen_cov; // = MatrixXf::Zero(_ncols, _ncols); + VectorXf sds; + // (TODO) Should be weighted cov matrix, even if is_center == false + eigen_cov = (1.0 /(_nrows/*-1*/)) * _xXf.transpose() * _xXf; + sds = eigen_cov.diagonal().array().sqrt(); + MatrixXf outer_sds = sds * sds.transpose(); +#ifdef DEBUG + cout << _xXf << endl; + cout << eigen_cov << endl; + cout << sds << endl; + cout << outer_sds << endl; +#endif + eigen_cov = eigen_cov.array() / outer_sds.array(); + outer_sds.resize(0, 0); + // ?If data matrix is scaled, covariance matrix is equal to correlation matrix + #ifdef DEBUG + cout << eigen_cov << endl; + #endif + EigenSolver edc(eigen_cov); + VectorXf eigen_eigenvalues = edc.eigenvalues().real(); + #ifdef DEBUG + cout << endl << eigen_eigenvalues.transpose() << endl; + #endif + MatrixXf eigen_eigenvectors = edc.eigenvectors().real(); + #ifdef DEBUG + cout << endl << eigen_eigenvectors << endl; + #endif + // The eigenvalues and eigenvectors are not sorted in any particular order. + // So, we should sort them + typedef pair eigen_pair; + vector ep; + for (unsigned int i = 0 ; i < _ncols; ++i) { + ep.push_back(make_pair(eigen_eigenvalues(i), i)); + } + sort(ep.begin(), ep.end()); // Ascending order by default + // Sort them all in descending order + MatrixXf eigen_eigenvectors_sorted = MatrixXf::Zero(eigen_eigenvectors.rows(), eigen_eigenvectors.cols()); + VectorXf eigen_eigenvalues_sorted = VectorXf::Zero(_ncols); + int colnum = 0; + int i = ep.size()-1; + for (; i > -1; i--) { + eigen_eigenvalues_sorted(colnum) = ep[i].first; + eigen_eigenvectors_sorted.col(colnum++) += eigen_eigenvectors.col(ep[i].second); + } + #ifdef DEBUG + cout << endl << eigen_eigenvalues_sorted.transpose() << endl; + cout << endl << eigen_eigenvectors_sorted << endl; + #endif + // We don't need not sorted arrays anymore + eigen_eigenvalues.resize(0); + eigen_eigenvectors.resize(0, 0); + + _sd.clear(); _prop_of_var.clear(); _kaiser = 0; + float tmp_sum = eigen_eigenvalues_sorted.sum(); + for (unsigned int i = 0; i < _ncols; ++i) { + _sd.push_back(sqrt(eigen_eigenvalues_sorted(i))); + if (_sd[i] >= 1) { + _kaiser = i + 1; + } + _prop_of_var.push_back(eigen_eigenvalues_sorted(i)/tmp_sum); + } + #ifdef DEBUG + cout << "\nStandard deviations for PCs:\n"; + copy(_sd.begin(), _sd.end(), std::ostream_iterator(std::cout," ")); + cout << "\nProportion of variance:\n"; + copy(_prop_of_var.begin(), _prop_of_var.end(), std::ostream_iterator(std::cout," ")); + cout << "\nKaiser criterion: PC #" << _kaiser << endl; + #endif + // PC's cumulative proportion + _cum_prop.clear(); _thresh95 = 1; + _cum_prop.push_back(_prop_of_var[0]); + for (unsigned int i = 1; i < _prop_of_var.size(); ++i) { + _cum_prop.push_back(_cum_prop[i-1]+_prop_of_var[i]); + if (_cum_prop[i] < 0.95) { + _thresh95 = i+1; + } + } + #ifdef DEBUG + cout << "\n\nCumulative proportions:\n"; + copy(_cum_prop.begin(), _cum_prop.end(), std::ostream_iterator(std::cout," ")); + cout << "\n\n95% threshold: PC #" << _thresh95 << endl; + #endif + eigen_values = eigen_eigenvalues_sorted; + eigen_vectors = eigen_eigenvectors_sorted; + // Scores for PCA with correlation matrix + // Scale before calculating new values + for (unsigned int i = 0; i < _ncols; ++i) { + _xXf.col(i) /= sds(i); + } + sds.resize(0); + MatrixXf eigen_scores = _xXf * eigen_eigenvectors_sorted; + #ifdef DEBUG + cout << "\n\nRotated values (scores):\n" << eigen_scores; + #endif + _scores.clear(); + _scores.reserve(_ncols*_nrows); + for (unsigned int i = 0; i < _nrows; ++i) { + for (unsigned int j = 0; j < _ncols; ++j) { + _scores.push_back(eigen_scores(i, j)); + } + } + eigen_scores.resize(0, 0); + #ifdef DEBUG + cout << "\n\nScores in vector:\n"; + copy(_scores.begin(), _scores.end(), std::ostream_iterator(std::cout," ")); + cout << "\n"; + #endif + } + + return 0; +} +std::vector Pca::sd(void) { return _sd; }; +std::vector Pca::prop_of_var(void) {return _prop_of_var; }; +std::vector Pca::cum_prop(void) { return _cum_prop; }; +std::vector Pca::scores(void) { return _scores; }; +std::vector Pca::eliminated_columns(void) { return _eliminated_columns; } +string Pca::method(void) { return _method; } +unsigned int Pca::kaiser(void) { return _kaiser; }; +unsigned int Pca::thresh95(void) { return _thresh95; }; +unsigned int Pca::ncols(void) { return _ncols; } +unsigned int Pca::nrows(void) { return _nrows; } +bool Pca::is_scale(void) { return _is_scale; } +bool Pca::is_center(void) { return _is_center; } +Pca::Pca(void) { + _nrows = 0; + _ncols = 0; + // Variables will be scaled by default + _is_center = true; + _is_scale = true; + // By default will be used singular value decomposition + _method = "svd"; + _is_corr = false; + + _kaiser = 0; + _thresh95 = 1; +} +Pca::~Pca(void) { + _xXf.resize(0, 0); + _x.clear(); +} diff --git a/Algorithms/pca.h b/Algorithms/pca.h new file mode 100755 index 000000000..d0b13242a --- /dev/null +++ b/Algorithms/pca.h @@ -0,0 +1,132 @@ +#ifndef PCA_H_ +#define PCA_H_ + +#include +#ifdef Success +#undef Success +#endif +#include + +class Pca { +private: + std::vector _x; // Initial matrix as vector filled by rows. + Eigen::MatrixXf _xXf; // Initial matrix as Eigen MatrixXf structure + unsigned int _nrows, // Number of rows in matrix x. + _ncols; // Number of cols in matrix x. + bool _is_center, // Whether the variables should be shifted to be zero centered + _is_scale, // Whether the variables should be scaled to have unit variance + _is_corr; // PCA with correlation matrix, not covariance + std::string + _method; // svd, cor, cov + std::vector + _eliminated_columns; // Numbers of eliminated columns + std::vector _sd, // Standard deviation of each component + _prop_of_var, // Proportion of variance + _cum_prop, // Cumulative proportion + _scores; // Rotated values + unsigned int _kaiser, // Number of PC according Kaiser criterion + _thresh95; // Number of PC according 95% variance threshold + +public: + //! Initializing values and performing PCA + /*! + The main method for performin Principal Component Analysis + \param x Initial data matrix + \param nrows Number of matrix rows + \param ncols Number of matrix cols + \param is_corr Correlation matrix will be used instead of covariance matrix + \param is_center Whether the variables should be shifted to be zero centered + \param is_scale Whether the variables should be scaled to have unit variance + \result + 0 if everything is Ok + -1 if there were some errors + */ + int Calculate(std::vector& x, const unsigned int& nrows, const unsigned int& ncols, + const bool is_corr = true, const bool is_center = true, const bool is_scale = true); + //! Return number of rows in initial matrix + /*! + \result Number of rows in initial matrix + */ + unsigned int nrows(void); + //! Return number of cols in initial matrix + /*! + \result Number of cols in initial matrix + */ + unsigned int ncols(void); + //! If variables are centered + /*! + \result + true - variables are centered + false - otherwise + */ + bool is_center(void); + //! If variables are scaled + /*! + \result + true - variables are scaled + false - otherwise + */ + bool is_scale(void); + //! Method for calculation of principal components + /*! + There are different methods used. The most used is SVD. + But in some cases it may be correlation or covariance matrices. + If + \result + "svd" - PCA with singular value decomposition + "cor" - PCA with correlation matrix + "cov" - PCA with covariance matrix + */ + std::string method(void); + //! Returns numbers of eliminated columns + /*! + If standard deviation of a column is equal to 0, the column shoud be rejected, + or PCA will fail. + \result Numbers of eliminated columns, empty vector otherwise + */ + std::vector eliminated_columns(void); + //! Standard deviation of each principal component + /*! + \result Vector of standard deviation for each principal component: + 1st element is sd for 1st PC, 2nd - for 2nd PC and so on. + */ + std::vector sd(void); + //! Proportion of variance + /*! + \result Vector of variances for each component + */ + std::vector prop_of_var(void); + //! Cumulative proportion + /*! + \result Vector of cumulative proportions for each components + */ + std::vector cum_prop(void); + //! Principal component by the Kaiser criterion + /*! + Number of the last component with eigenvalue greater than 1. + \result Number of the first components we should retain defined by the Kaiser criterion + */ + unsigned int kaiser(void); + //! 95% threshold + /*! + Retain only PC which cumulative proportion is less than 0.95 + \result Number of PCs should be retain with the 95% threshold criterion + */ + unsigned int thresh95(void); + //! Rotated values (scores) + /*! + Return calculated scores (coordinates in a new space) as vector. Matrix filled by rows. + \result Vector of scores + */ + std::vector scores(void); + + Eigen::MatrixXf eigen_vectors; + Eigen::VectorXf eigen_values; + + //! Class constructor + Pca(void); + //! Class destructor + ~Pca(void); +}; + +#endif diff --git a/BuildTools/centos/GNUmakefile b/BuildTools/centos/GNUmakefile index e33bb7c1d..2b4f4e8fc 100644 --- a/BuildTools/centos/GNUmakefile +++ b/BuildTools/centos/GNUmakefile @@ -10,7 +10,7 @@ default: compile-geoda app: build-geoda-mac -compile-geoda: geoda-target dataviewer-target dialogtools-target explore-target libgdiam-target regression-target shapeoperations-target resource-target varcalc-target +compile-geoda: geoda-target algorithms-target dataviewer-target dialogtools-target explore-target libgdiam-target regression-target shapeoperations-target resource-target varcalc-target conf = `./libraries/bin/wx-config --libs` @@ -20,6 +20,9 @@ test1: resource-target: (cd $(GeoDa_ROOT)/rc; $(MAKE) xrc; $(MAKE)) +algorithms-target: + (cd $(GeoDa_ROOT)/Algorithms; $(MAKE)) + dataviewer-target: (cd $(GeoDa_ROOT)/DataViewer; $(MAKE)) diff --git a/BuildTools/centos/build64.sh b/BuildTools/centos/build64.sh index 1c3f2d62e..5ee8f3a69 100755 --- a/BuildTools/centos/build64.sh +++ b/BuildTools/centos/build64.sh @@ -140,7 +140,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%" ######################################################################### # install c-ares -- for cURL, prevent crash on Mac oSx with threads ######################################################################### -install_library c-ares-1.10.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/c-ares-1.10.0.tar.gz libcares.a +install_library c-ares-1.10.0 https://s3.us-east-2.amazonaws.com/geodabuild/c-ares-1.10.0.tar.gz libcares.a ######################################################################### @@ -149,7 +149,7 @@ install_library c-ares-1.10.0 https://dl.dropboxusercontent.com/u/145979/geoda_l LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -185,7 +185,7 @@ echo "% Building: Xerces %" echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="xerces-c-3.1.1" - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" LIB_CHECKER="libxerces-c.a" LIB_FILENAME=$(basename "$LIB_URL" ".tar") echo $LIB_FILENAME @@ -214,34 +214,34 @@ echo "%%%%%%%%%%%%%%%%%%%%" ######################################################################### # install GEOS ######################################################################### -install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### # libreadline, zlib echo "install libreadline, zlib" -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 @@ -255,7 +255,7 @@ echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="libkml" LIB_CHECKER="libkmlbase.a" - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libkml-r680.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME @@ -322,7 +322,7 @@ echo "% Building: Spatialite %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=libspatialite-4.0.0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libspatialite.a echo $LIB_FILENAME @@ -357,7 +357,7 @@ echo "% Building: MySQL %" echo "%%%%%%%%%%%%%%%%%%%" { LIB_NAME=mysql-5.6.14 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a echo $LIB_NAME @@ -386,6 +386,36 @@ echo "%%%%%%%%%%%%%%%%%%%" fi } +######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi ######################################################################### # install boost library ######################################################################### @@ -395,7 +425,7 @@ echo "% Building: Boost 1.57 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=boost_1_57_0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=boost_1_57_0.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -425,7 +455,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%" #chmod +x tools/build/v2/engine/build.sh ./bootstrap.sh chmod +x b2 - ./b2 --with-thread --with-date_time --with-chrono --with-system link=static threading=multi stage + ./b2 --with-thread --with-date_time --with-chrono --with-system link=static,shared threading=multi stage fi if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/stage/lib/$LIB_CHECKER" ] ; then @@ -442,15 +472,16 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%" echo "% Building: JSON Spirit %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%" LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME + cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip unzip $LIB_FILENAME fi @@ -490,7 +521,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -d "$CLAPACK_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz tar -xvf clapack.tgz fi @@ -605,7 +636,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" # sudo apt-get install libgtk2.0-dev libglu1-mesa-dev libgl1-mesa-dev { LIB_NAME=wxWidgets-3.1.0 - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.1.0.tar.bz2" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2" LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=wx-config @@ -625,7 +656,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" cp -rf $GEODA_HOME/dep/$LIB_NAME/* . chmod +x configure chmod +x src/stc/gen_iface.py - ./configure --with-gtk=3 --enable-ascii --disable-shared --disable-monolithic --with-opengl --enable-postscript --without-libtiff --disable-debug --enable-webview --prefix=$PREFIX + ./configure --with-gtk=3 --enable-ascii --disable-monolithic --with-opengl --enable-postscript --without-libtiff --disable-debug --enable-webview --prefix=$PREFIX #make clean $MAKER make install @@ -638,6 +669,36 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" fi } +######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi ######################################################################### # build GeoDa ######################################################################### diff --git a/BuildTools/centos/build_rcc.sh b/BuildTools/centos/build_rcc.sh new file mode 100755 index 000000000..8b7cb6a7f --- /dev/null +++ b/BuildTools/centos/build_rcc.sh @@ -0,0 +1,581 @@ +!/bin/bash +############################################################################# +# ./build.sh +# ./build.sh [CPU] +# ./build.sh 8 (with debug) +# ./build.sh [CPU] [NODEBUG, true=1 false=0(default)] +# ./build.sh 8 1 (no debug) +############################################################################# +CPUS=4 +NODEBUG=1 +if [[ $CPUS == "" ]] ; then + CPUS=8 +fi +if [[ $NODEBUG == "" ]] ; then + NODEBUG=0 +else + if ! [[ $NODEBUG -eq 1 ]] ; then + NODEBUG=0 + fi +fi + +if ! type "g++" > /dev/null; then + echo "You need to install g++ to run this script." + sudo yum install gcc-c++ +fi + +if ! type "cmake" > /dev/null; then + echo "You need to install cmake to run this script." + sudo yum install cmake +fi + +if ! type "curl" > /dev/null; then + echo "You need to install curl to run this script." + sudo yum install curl +fi + +read -p "Do you want to install pre-requisites (e.g. libreadline, zlib, libexpat, libcurl ...)?[y/n]" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + sudo yum install readline-devel zlib-devel expat-devel curl-devel autoreconf libtool openssl-devel libidn-devel openldap-devel mesa-libGL-devel mesa-libGLU-devel gtk3 freeglut-devel webkitgtk3-devel +fi + +unset ORACLE_HOME +export GEODA_HOME=$PWD +PREFIX=/home/django/deps +DOWNLOAD_HOME=$GEODA_HOME/temp +echo $PREFIX + +MAKER="make -j $CPUS" +export GDA_CC='/usr/bin/gcc' +export GDA_CXX='/usr/bin/g++' +export CFLAGS="-m64 -fPIC" +export CXXFLAGS="-m64 -fPIC" +#export LDFLAGS="-m64 -L/usr/lib/x86_64-linux-gnu" + +if ! [ -d $DOWNLOAD_HOME ]; then + mkdir $DOWNLOAD_HOME +fi + +if ! [ -d $PREFIX ]; then + mkdir $PREFIX +fi + +######################################################################### +# install library function +######################################################################### +install_library() +{ + LIB_NAME=$1 + LIB_URL=$2 + LIB_CHECKER=$3 + LIB_FILENAME=$(basename "$LIB_URL") + CONFIGURE_FLAGS=$4 + echo "" + echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + echo "% Building: $LIB_FILENAME" + echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + + if ! [ -f "$LIB_FILENAME" ] ; then + echo "$LIB_FILENAME not found. Downloading..." + curl -O $LIB_URL + else + echo "$LIB_FILENAME found. Download skipped." + fi + + if ! [ -d "$LIB_NAME" ] ; then + echo "Directory $LIB_NAME not found. Expanding..." + tar -xf $LIB_FILENAME + else + echo "Directory $LIB_NAME found. File expansion skipped." + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + ./configure CFLAGS="-m64" CXXFLAGS="-m64" LDFLAGS="-m64 -L/usr/lib64" --prefix=$PREFIX $CONFIGURE_FLAGS + #./configure --prefix=$PREFIX + $MAKER + make install + fi + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} +######################################################################### +# install libiConv +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: libiConv %" +echo "%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME="libiconv-1.13" + LIB_URL="http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz" + LIB_CHECKER="libiconv.so" + LIB_FILENAME="libiconv-1.13.tar.gz" + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + ./configure --enable-static --prefix=$PREFIX + $MAKER + make install + fi + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install c-ares -- for cURL, prevent crash on Mac oSx with threads +######################################################################### +install_library c-ares-1.10.0 https://s3.us-east-2.amazonaws.com/geodabuild/c-ares-1.10.0.tar.gz libcares.a + + +######################################################################### +# install cURL +######################################################################### + +LIB_NAME=curl-7.46.0 +LIB_CHECKER=libcurl.a +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip +LIB_FILENAME=curl-7.46.0.zip +echo $LIB_NAME + +cd $DOWNLOAD_HOME + +if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + unzip $LIB_FILENAME +fi + +if ! [ -d "$LIB_NAME" ]; then + tar -xf $LIB_FILENAME +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + ./configure --enable-ares=$PREFIX CC="$GDA_CC" CFLAGS="$GDA_CFLAGS" CXX="$GDA_CXX" CXXFLAGS="$GDA_CXXFLAGS" LDFLAGS="$GDA_LDFLAGS" --prefix=$PREFIX --without-librtmp + $MAKER + make install +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi + +######################################################################### +# install Xerces +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Xerces %" +echo "%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME="xerces-c-3.1.1" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" + LIB_CHECKER="libxerces-c.a" + LIB_FILENAME=$(basename "$LIB_URL" ".tar") + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + ./configure --prefix=$PREFIX + chmod +x config/pretty-make + $MAKER + make install + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install GEOS +######################################################################### +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a + +######################################################################### +# install PROJ.4 +######################################################################### +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a + +######################################################################### +# install FreeXL +######################################################################### +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a + +######################################################################### +# install SQLite +######################################################################### +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a + +######################################################################### +# install PostgreSQL +######################################################################### +# libreadline, zlib +echo "install libreadline, zlib" +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a + +######################################################################### +# install libjpeg +######################################################################### +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a + +######################################################################### +# install libkml requires 1.3 +######################################################################### + +######################################################################### +# install SpatiaLite +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Spatialite %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=libspatialite-4.0.0 + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz + LIB_FILENAME=$(basename "$LIB_URL" ".tar") + LIB_CHECKER=libspatialite.a + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + echo $PREFIX + ./configure CFLAGS="-I$PREFIX/include" CXXFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX --enable-geos --enable-iconv --enable-proj --with-geosconfig=$PREFIX/bin/geos-config + $MAKER + make install + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} +######################################################################### +# MySQL +######################################################################### +#cmake, curse +echo "" +echo "%%%%%%%%%%%%%%%%%%%" +echo "% Building: MySQL %" +echo "%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=mysql-5.6.14 + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz + LIB_CHECKER=libmysqlclient.a + + echo $LIB_NAME + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_NAME.tar.gz + #cp $GEODA_HOME/dep/mysql/my_default.h $GEODA_HOME/temp/mysql-5.6.14/include/my_default.h + fi + + if ! [ -f "$GEODA_HOME/temp/mysql-5.6.14/bld/libmysql/$LIB_CHECKER" ] ; then + echo "HERE" + cd $LIB_NAME + mkdir -p bld + cd bld + cmake -DCURSES_LIBRARY=/usr/lib/libncurses.so -DCURSES_INCLUDE_PATH=/usr/include .. + chmod +x bld/extra/comp_err + chmod +x bld/sql/gen_lex_hash + chmod +x storage/perfschema/gen_pfs_lex_token + $MAKER + fi + + if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/bld/libmysql/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install boost library +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Boost 1.57 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=boost_1_57_0 + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz + LIB_FILENAME=boost_1_57_0.tar.gz + LIB_CHECKER=libboost_thread.a + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -f "$LIB_FILENAME" ]; then + echo "$LIB_FILENAME not found. Downloading..." + curl -O $LIB_URL + else + echo "$LIB_FILENAME found. Skipping download." + fi + + if ! [ -d "$LIB_NAME" ]; then + echo "Directory $LIB_NAME not found. Expanding archive." + tar -xf $LIB_FILENAME + else + echo "Directory $LIB_NAME found. Skipping expansion." + fi + + if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/stage/lib/$LIB_CHECKER" ] ; then + echo "$LIB_CHECKER not found. Building Boost..." + cd $PREFIX/include + rm boost + ln -s $DOWNLOAD_HOME/boost_1_57_0 boost + cd $DOWNLOAD_HOME/boost_1_57_0 + chmod +x bootstrap.sh + #chmod +x tools/build/v2/engine/build.sh + ./bootstrap.sh + chmod +x b2 + ./b2 --with-thread --with-date_time --with-chrono --with-system link=static,shared threading=multi stage + fi + + if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/stage/lib/$LIB_CHECKER" ] ; then + echo "Error: Target library $LIB_CHECKER not found. Exiting build." + exit + fi +} + +######################################################################### +# install JSON Spirit +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: JSON Spirit %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%" +LIB_NAME="json_spirit_v4.08" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" +LIB_CHECKER="libjson_spirit.a" +LIB_FILENAME="json_spirit_v4.08.zip" +echo $LIB_FILENAME + + +cd $DOWNLOAD_HOME + +if ! [ -d "$LIB_NAME" ]; then + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cp $GEODA_HOME/dep/json_spirit/CMakeLists.txt . + mkdir bld + cd bld + CC=$GDA_CC CXX=$GDA_CXX CFLAGS=$GDA_CFLAGS CXXFLAGS=$GDA_CXXFLAGS LDFLAGS=$GDA_LDFLAGS cmake .. + make + rm -rf "$PREFIX/include/json_spirit" + rm -f "$PREFIX/lib/$LIB_CHECKER" + mkdir "$PREFIX/include/json_spirit" + echo "Copying JSON Sprit includes..." + cp -R "../json_spirit" "$PREFIX/include/." + echo "Copying libjson_spirit.a" + cp json_spirit/libjson_spirit.a "$PREFIX/lib/." +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi + +######################################################################### +# install CLAPACK +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: CLAPACK 3.2.1 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" +{ + CLAPACK_NAME="CLAPACK-3.2.1" + LIB_CHECKER="libf2c.a" + echo $CLAPACK_NAME + + cd $DOWNLOAD_HOME + if ! [ -d "$CLAPACK_NAME" ]; then + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz + tar -xvf clapack.tgz + fi + + cp -rf $GEODA_HOME/dep/$CLAPACK_NAME . + cd $CLAPACK_NAME + if ! [ -f "libf2c.a" ] || ! [ -f "blas.a" ] || ! [ -f "lapack.a" ]; then + cp make.inc.example make.inc + $MAKER f2clib + cp F2CLIBS/libf2c.a . + $MAKER blaslib + cd INSTALL + $MAKER + cd .. + cd SRC + $MAKER + cd .. + $MAKER + mv -f blas_LINUX.a blas.a + mv -f lapack_LINUX.a lapack.a + mv -f tmglib_LINUX.a tmglib.a + cd .. + fi + + if ! [ -f "$GEODA_HOME/temp/$CLAPACK_NAME/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install json-c +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: json-c " +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +{ + + LIB_NAME=json-c + LIB_CHECKER=libjson-c.a + + if ! [ -d "$LIB_NAME" ] ; then + git clone https://github.com/json-c/json-c.git + fi + + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + sh autogen.sh + ./configure --prefix=$PREFIX + make + make install + fi + + #if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + #echo "Error! Exit" + #exit + #fi +} + + +######################################################################### +# install wxWidgets library +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building wxWidgets 3.0.2 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +# sudo apt-get install libgtk2.0-dev libglu1-mesa-dev libgl1-mesa-dev +{ + LIB_NAME=wxWidgets-3.1.0 + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2" + + LIB_FILENAME=$(basename "$LIB_URL" ".tar") + LIB_CHECKER=wx-config + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -f "$LIB_FILENAME" ] ; then + curl -k -o $LIB_FILENAME $LIB_URL + fi + + if ! [ -d "$LIB_NAME" ]; then + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/bin/$LIB_CHECKER" ] ; then + cd $LIB_NAME + cp -rf $GEODA_HOME/dep/$LIB_NAME/* . + chmod +x configure + chmod +x src/stc/gen_iface.py + ./configure --with-gtk=3 --enable-ascii --enable-monolithic --with-opengl --enable-postscript --without-libtiff --disable-debug --enable-webview --prefix=$PREFIX + #make clean + $MAKER + make install + cd .. + fi + + if ! [ -f "$PREFIX/bin/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi +######################################################################### +# build GeoDa +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%" +echo "% Building: GeoDa %" +echo "%%%%%%%%%%%%%%%%%%%" +{ + cd $GEODA_HOME + cp ../../GeoDamake.centos.opt ../../GeoDamake.opt + mkdir ../../o + make clean + $MAKER + make app + #cp plugins/x64/*.so build/plugins/ + cp ../CommonDistFiles/web_plugins/no_map.png build/web_plugins/no_map.png +} diff --git a/BuildTools/centos/build_swig.sh b/BuildTools/centos/build_swig.sh new file mode 100755 index 000000000..1c31d6c71 --- /dev/null +++ b/BuildTools/centos/build_swig.sh @@ -0,0 +1,690 @@ +!/bin/bash +############################################################################# +# ./build.sh +# ./build.sh [CPU] +# ./build.sh 8 (with debug) +# ./build.sh [CPU] [NODEBUG, true=1 false=0(default)] +# ./build.sh 8 1 (no debug) +############################################################################# +CPUS=4 +NODEBUG=1 +if [[ $CPUS == "" ]] ; then + CPUS=8 +fi +if [[ $NODEBUG == "" ]] ; then + NODEBUG=0 +else + if ! [[ $NODEBUG -eq 1 ]] ; then + NODEBUG=0 + fi +fi + +if ! type "g++" > /dev/null; then + echo "You need to install g++ to run this script." + sudo yum install gcc-c++ +fi + +if ! type "cmake" > /dev/null; then + echo "You need to install cmake to run this script." + sudo yum install cmake +fi + +if ! type "curl" > /dev/null; then + echo "You need to install curl to run this script." + sudo yum install curl +fi + +read -p "Do you want to install pre-requisites (e.g. libreadline, zlib, libexpat, libcurl ...)?[y/n]" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + sudo yum install readline-devel zlib-devel expat-devel curl-devel autoreconf libtool openssl-devel libidn-devel openldap-devel mesa-libGL-devel mesa-libGLU-devel gtk3 freeglut-devel webkitgtk3-devel +fi + +unset ORACLE_HOME +export GEODA_HOME=$PWD +PREFIX=$GEODA_HOME/libraries +DOWNLOAD_HOME=$GEODA_HOME/temp +echo $PREFIX + +MAKER="make -j $CPUS" +export GDA_CC='/usr/bin/gcc' +export GDA_CXX='/usr/bin/g++' +export CFLAGS="-m64 -fPIC" +export CXXFLAGS="-m64 -fPIC" +#export LDFLAGS="-m64 -L/usr/lib/x86_64-linux-gnu" + +if ! [ -d $DOWNLOAD_HOME ]; then + mkdir $DOWNLOAD_HOME +fi + +if ! [ -d $PREFIX ]; then + mkdir $PREFIX +fi + +######################################################################### +# install library function +######################################################################### +install_library() +{ + LIB_NAME=$1 + LIB_URL=$2 + LIB_CHECKER=$3 + LIB_FILENAME=$(basename "$LIB_URL") + CONFIGURE_FLAGS=$4 + echo "" + echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + echo "% Building: $LIB_FILENAME" + echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + + if ! [ -f "$LIB_FILENAME" ] ; then + echo "$LIB_FILENAME not found. Downloading..." + curl -O $LIB_URL + else + echo "$LIB_FILENAME found. Download skipped." + fi + + if ! [ -d "$LIB_NAME" ] ; then + echo "Directory $LIB_NAME not found. Expanding..." + tar -xf $LIB_FILENAME + else + echo "Directory $LIB_NAME found. File expansion skipped." + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + ./configure CFLAGS="-m64" CXXFLAGS="-m64" LDFLAGS="-m64 -L/usr/lib64" --prefix=$PREFIX $CONFIGURE_FLAGS + #./configure --prefix=$PREFIX + $MAKER + make install + fi + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} +######################################################################### +# install libiConv +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: libiConv %" +echo "%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME="libiconv-1.13" + LIB_URL="http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz" + LIB_CHECKER="libiconv.so" + LIB_FILENAME="libiconv-1.13.tar.gz" + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + ./configure --enable-static --prefix=$PREFIX + $MAKER + make install + fi + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install c-ares -- for cURL, prevent crash on Mac oSx with threads +######################################################################### +install_library c-ares-1.10.0 https://s3.us-east-2.amazonaws.com/geodabuild/c-ares-1.10.0.tar.gz libcares.a + + +######################################################################### +# install cURL +######################################################################### + +LIB_NAME=curl-7.46.0 +LIB_CHECKER=libcurl.a +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip +LIB_FILENAME=curl-7.46.0.zip +echo $LIB_NAME + +cd $DOWNLOAD_HOME + +if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + unzip $LIB_FILENAME +fi + +if ! [ -d "$LIB_NAME" ]; then + tar -xf $LIB_FILENAME +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + ./configure --enable-ares=$PREFIX CC="$GDA_CC" CFLAGS="$GDA_CFLAGS" CXX="$GDA_CXX" CXXFLAGS="$GDA_CXXFLAGS" LDFLAGS="$GDA_LDFLAGS" --prefix=$PREFIX --without-librtmp + $MAKER + make install +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi + +######################################################################### +# install Xerces +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Xerces %" +echo "%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME="xerces-c-3.1.1" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" + LIB_CHECKER="libxerces-c.a" + LIB_FILENAME=$(basename "$LIB_URL" ".tar") + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + ./configure --prefix=$PREFIX + chmod +x config/pretty-make + $MAKER + make install + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install GEOS +######################################################################### +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a + +######################################################################### +# install PROJ.4 +######################################################################### +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a + +######################################################################### +# install FreeXL +######################################################################### +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a + +######################################################################### +# install SQLite +######################################################################### +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a + +######################################################################### +# install PostgreSQL +######################################################################### +# libreadline, zlib +echo "install libreadline, zlib" +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a + +######################################################################### +# install libjpeg +######################################################################### +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a + +######################################################################### +# install libkml requires 1.3 +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%" +echo "% Building: libkml %" +echo "%%%%%%%%%%%%%%%%%%%%" +# libexpat,libcurl4-gnutls-dev +#install_library libkml-1.2.0 https://libkml.googlecode.com/files/libkml-1.2.0.tar.gz libkmlbase.a +{ + LIB_NAME="libkml" + LIB_CHECKER="libkmlbase.a" + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz + LIB_FILENAME=libkml-r680.tar.gz + echo $LIB_NAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + fi + + if ! [ -d "$LIB_NAME" ]; then + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cp -rf ../dep/"$LIB_NAME" . + cd $LIB_NAME + ./autogen.sh + chmod +x configure + ./configure CXXFLAGS="-Wno-long-long" --prefix=$PREFIX + sed -i.old "/gtest-death-test.Plo/d" third_party/Makefile + sed -i.old "/gtest-filepath.Plo/d" third_party/Makefile + sed -i.old "/gtest-port.Plo/d" third_party/Makefile + sed -i.old "/gtest-test-part.Plo/d" third_party/Makefile + sed -i.old "/gtest-typed-test.Plo/d" third_party/Makefile + sed -i.old "/gtest-test.Plo/d" third_party/Makefile + sed -i.old "/gtest.Plo/d" third_party/Makefile + sed -i.old "/gtest_main.Plo/d" third_party/Makefile + sed -i.old "/UriCommon.Plo/d" third_party/Makefile + sed -i.old "/UriCompare.Plo/d" third_party/Makefile + sed -i.old "/UriEscape.Plo/d" third_party/Makefile + sed -i.old "/UriFile.Plo/d" third_party/Makefile + sed -i.old "/UriIp4.Plo/d" third_party/Makefile + sed -i.old "/UriIp4Base.Plo/d" third_party/Makefile + sed -i.old "/UriNormalize.Plo/d" third_party/Makefile + sed -i.old "/UriNormalizeBase.Plo/d" third_party/Makefile + sed -i.old "/UriParse.Plo/d" third_party/Makefile + sed -i.old "/UriParseBase.Plo/d" third_party/Makefile + sed -i.old "/UriQuery.Plo/d" third_party/Makefile + sed -i.old "/UriRecompose.Plo/d" third_party/Makefile + sed -i.old "/UriResolve.Plo/d" third_party/Makefile + sed -i.old "/UriShorten.Plo/d" third_party/Makefile + sed -i.old "/ioapi.Plo/d" third_party/Makefile + sed -i.old "/iomem_simple.Plo/d" third_party/Makefile + sed -i.old "/zip.Plo/d" third_party/Makefile + #$MAKER + sed -i.old "s/examples//g" Makefile + make third_party + make src + make testdata + make install + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install SpatiaLite +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Spatialite %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=libspatialite-4.0.0 + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz + LIB_FILENAME=$(basename "$LIB_URL" ".tar") + LIB_CHECKER=libspatialite.a + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + echo $PREFIX + ./configure CFLAGS="-I$PREFIX/include" CXXFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --prefix=$PREFIX --enable-geos --enable-iconv --enable-proj --with-geosconfig=$PREFIX/bin/geos-config + $MAKER + make install + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} +######################################################################### +# MySQL +######################################################################### +#cmake, curse +echo "" +echo "%%%%%%%%%%%%%%%%%%%" +echo "% Building: MySQL %" +echo "%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=mysql-5.6.14 + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz + LIB_CHECKER=libmysqlclient.a + + echo $LIB_NAME + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + tar -xf $LIB_NAME.tar.gz + #cp $GEODA_HOME/dep/mysql/my_default.h $GEODA_HOME/temp/mysql-5.6.14/include/my_default.h + fi + + if ! [ -f "$GEODA_HOME/temp/mysql-5.6.14/bld/libmysql/$LIB_CHECKER" ] ; then + echo "HERE" + cd $LIB_NAME + mkdir -p bld + cd bld + cmake -DCURSES_LIBRARY=/usr/lib/libncurses.so -DCURSES_INCLUDE_PATH=/usr/include .. + chmod +x bld/extra/comp_err + chmod +x bld/sql/gen_lex_hash + chmod +x storage/perfschema/gen_pfs_lex_token + $MAKER + fi + + if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/bld/libmysql/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install boost library +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Boost 1.57 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=boost_1_57_0 + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz + LIB_FILENAME=boost_1_57_0.tar.gz + LIB_CHECKER=libboost_thread.a + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -f "$LIB_FILENAME" ]; then + echo "$LIB_FILENAME not found. Downloading..." + curl -O $LIB_URL + else + echo "$LIB_FILENAME found. Skipping download." + fi + + if ! [ -d "$LIB_NAME" ]; then + echo "Directory $LIB_NAME not found. Expanding archive." + tar -xf $LIB_FILENAME + else + echo "Directory $LIB_NAME found. Skipping expansion." + fi + + if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/stage/lib/$LIB_CHECKER" ] ; then + echo "$LIB_CHECKER not found. Building Boost..." + cd $PREFIX/include + rm boost + ln -s $DOWNLOAD_HOME/boost_1_57_0 boost + cd $DOWNLOAD_HOME/boost_1_57_0 + chmod +x bootstrap.sh + #chmod +x tools/build/v2/engine/build.sh + ./bootstrap.sh + chmod +x b2 + ./b2 --with-thread --with-date_time --with-chrono --with-system link=static,shared threading=multi stage + fi + + if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/stage/lib/$LIB_CHECKER" ] ; then + echo "Error: Target library $LIB_CHECKER not found. Exiting build." + exit + fi +} + +######################################################################### +# install JSON Spirit +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: JSON Spirit %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%" +LIB_NAME="json_spirit_v4.08" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" +LIB_CHECKER="libjson_spirit.a" +LIB_FILENAME="json_spirit_v4.08.zip" +echo $LIB_FILENAME + + +cd $DOWNLOAD_HOME + +if ! [ -d "$LIB_NAME" ]; then + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cp $GEODA_HOME/dep/json_spirit/CMakeLists.txt . + mkdir bld + cd bld + CC=$GDA_CC CXX=$GDA_CXX CFLAGS=$GDA_CFLAGS CXXFLAGS=$GDA_CXXFLAGS LDFLAGS=$GDA_LDFLAGS cmake .. + make + rm -rf "$PREFIX/include/json_spirit" + rm -f "$PREFIX/lib/$LIB_CHECKER" + mkdir "$PREFIX/include/json_spirit" + echo "Copying JSON Sprit includes..." + cp -R "../json_spirit" "$PREFIX/include/." + echo "Copying libjson_spirit.a" + cp json_spirit/libjson_spirit.a "$PREFIX/lib/." +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi + +######################################################################### +# install CLAPACK +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: CLAPACK 3.2.1 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" +{ + CLAPACK_NAME="CLAPACK-3.2.1" + LIB_CHECKER="libf2c.a" + echo $CLAPACK_NAME + + cd $DOWNLOAD_HOME + if ! [ -d "$CLAPACK_NAME" ]; then + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz + tar -xvf clapack.tgz + fi + + cp -rf $GEODA_HOME/dep/$CLAPACK_NAME . + cd $CLAPACK_NAME + if ! [ -f "libf2c.a" ] || ! [ -f "blas.a" ] || ! [ -f "lapack.a" ]; then + cp make.inc.example make.inc + $MAKER f2clib + cp F2CLIBS/libf2c.a . + $MAKER blaslib + cd INSTALL + $MAKER + cd .. + cd SRC + $MAKER + cd .. + $MAKER + mv -f blas_LINUX.a blas.a + mv -f lapack_LINUX.a lapack.a + mv -f tmglib_LINUX.a tmglib.a + cd .. + fi + + if ! [ -f "$GEODA_HOME/temp/$CLAPACK_NAME/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install json-c +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: json-c " +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +{ + + LIB_NAME=json-c + LIB_CHECKER=libjson-c.a + + if ! [ -d "$LIB_NAME" ] ; then + git clone https://github.com/json-c/json-c.git + fi + + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + sh autogen.sh + ./configure --prefix=$PREFIX + make + make install + fi + + #if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + #echo "Error! Exit" + #exit + #fi +} + +######################################################################### +# install GDAL/OGR +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Custom GDAL/OGR 1.9.2 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +{ + LIB_NAME=gdal + LIB_URL=https://codeload.github.com/lixun910/gdal/zip/GeoDa17Merge + LIB_FILENAME=GeoDa17Merge + LIB_CHECKER=libgdal.a + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -d "$LIB_NAME" ] ; then + #curl -k -O $LIB_URL + #unzip $LIB_FILENAME + git clone https://github.com/lixun910/gdal.git gdal-GeoDa17Merge + mv gdal-GeoDa17Merge/gdal gdal + fi + + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + chmod +x configure + chmod +x install-sh + ./configure + cp -rf $GEODA_HOME/dep/gdal-1.9.2/* . + cp GDALmake64.opt GDALmake.opt + #make clean + $MAKER + touch .libs/libgdal.lai + make install + #cd ogr/ogrsf_frmts/oci + #make plugin + #mv ogr_OCI.so ogr_OCI.dylib + #install_name_tool -change "/scratch/plebld/208/network/lib/libnnz10.dylib" "/Users/xun/Downloads/Oracle_10204Client_MAC_X86/ohome/lib/libnnz10.dylib" ogr_OCI.so + fi + if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# install wxWidgets library +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building wxWidgets 3.0.2 %" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +# sudo apt-get install libgtk2.0-dev libglu1-mesa-dev libgl1-mesa-dev +{ + LIB_NAME=wxWidgets-3.1.0 + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2" + + LIB_FILENAME=$(basename "$LIB_URL" ".tar") + LIB_CHECKER=wx-config + echo $LIB_FILENAME + + cd $DOWNLOAD_HOME + if ! [ -f "$LIB_FILENAME" ] ; then + curl -k -o $LIB_FILENAME $LIB_URL + fi + + if ! [ -d "$LIB_NAME" ]; then + tar -xf $LIB_FILENAME + fi + + if ! [ -f "$PREFIX/bin/$LIB_CHECKER" ] ; then + cd $LIB_NAME + cp -rf $GEODA_HOME/dep/$LIB_NAME/* . + chmod +x configure + chmod +x src/stc/gen_iface.py + ./configure --with-gtk=3 --enable-ascii --disable-monolithic --with-opengl --enable-postscript --without-libtiff --disable-debug --enable-webview --prefix=$PREFIX + #make clean + $MAKER + make install + cd .. + fi + + if ! [ -f "$PREFIX/bin/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit + fi +} + +######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi +######################################################################### +# build GeoDa +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%" +echo "% Building: GeoDa %" +echo "%%%%%%%%%%%%%%%%%%%" +{ + cd $GEODA_HOME + cp ../../GeoDamake.centos.opt ../../GeoDamake.opt + mkdir ../../o + make clean + $MAKER + make app + #cp plugins/x64/*.so build/plugins/ + cp ../CommonDistFiles/web_plugins/no_map.png build/web_plugins/no_map.png +} diff --git a/BuildTools/centos/dep/json_spirit/CMakeLists.txt b/BuildTools/centos/dep/json_spirit/CMakeLists.txt index c717ef7c8..e881f654f 100644 --- a/BuildTools/centos/dep/json_spirit/CMakeLists.txt +++ b/BuildTools/centos/dep/json_spirit/CMakeLists.txt @@ -1,5 +1,9 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +SET(GCC_COVERAGE_COMPILE_FLAGS "-fPIC") + +add_definitions(${GCC_COVERAGE_COMPILE_FLAGS}) + #add_definitions(-DJSON_SPIRIT_VALUE_ENABLED) SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${CMAKE_SOURCE_DIR}/../../libraries/include/boost) diff --git a/BuildTools/macosx/GNUmakefile b/BuildTools/macosx/GNUmakefile index 1e975590a..c8babda75 100644 --- a/BuildTools/macosx/GNUmakefile +++ b/BuildTools/macosx/GNUmakefile @@ -11,7 +11,7 @@ default: compile-geoda app: build-geoda-mac -compile-geoda: dataviewer-target dialogtools-target \ +compile-geoda: algorithms-target dataviewer-target dialogtools-target \ explore-target libgdiam-target regression-target \ shapeoperations-target resource-target varcalc-target \ geoda-target @@ -22,6 +22,9 @@ test: resource-target: (cd $(GeoDa_ROOT)/rc; $(MAKE) xrc; $(MAKE)) +algorithms-target: + (cd $(GeoDa_ROOT)/Algorithms; $(MAKE)) + dataviewer-target: (cd $(GeoDa_ROOT)/DataViewer; $(MAKE)) diff --git a/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj b/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj index 9a4392edb..2d07ac73f 100644 --- a/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj +++ b/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj @@ -37,6 +37,11 @@ A1F1BA5C178D3B46005A46E5 /* GdaCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */; }; A1F1BA99178D46B8005A46E5 /* cache.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F1BA98178D46B8005A46E5 /* cache.sqlite */; }; A1FD8C19186908B800C35C41 /* CustomClassifPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */; }; + A43D31541E845985007488D9 /* LocalGearyCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D31521E845985007488D9 /* LocalGearyCoordinator.cpp */; }; + A43D31581E845C3D007488D9 /* LocalGearyMapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D31561E845C3D007488D9 /* LocalGearyMapNewView.cpp */; }; + A45DBDF41EDDEDAD00C2AA8A /* pca.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45DBDF11EDDEDAD00C2AA8A /* pca.cpp */; }; + A45DBDF51EDDEDAD00C2AA8A /* cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */; }; + A45DBDFA1EDDEE4D00C2AA8A /* maxp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45DBDF81EDDEE4D00C2AA8A /* maxp.cpp */; }; A48356BB1E456310002791C8 /* ConditionalClusterMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A48356B91E456310002791C8 /* ConditionalClusterMapView.cpp */; }; A496C99E1E6A184C008F87DD /* samples.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = A496C99D1E6A184C008F87DD /* samples.sqlite */; }; A496C9A81E6A43C0008F87DD /* BaltimoreHomeSales.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9A71E6A43C0008F87DD /* BaltimoreHomeSales.png */; }; @@ -54,7 +59,9 @@ A496C9C11E6A440A008F87DD /* SIDSNC.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9C01E6A440A008F87DD /* SIDSNC.png */; }; A496C9C31E6A4417008F87DD /* USHomicides.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9C21E6A4417008F87DD /* USHomicides.png */; }; A496C9C51E6A441D008F87DD /* watermark-20.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9C41E6A441D008F87DD /* watermark-20.png */; }; + A49F56DD1E956FCC000309CE /* HClusterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A49F56DB1E956FCC000309CE /* HClusterDlg.cpp */; }; A4D9A31F1E4D5F3800EF584C /* gdaldata in Resources */ = {isa = PBXBuildFile; fileRef = A4D9A31E1E4D5F3800EF584C /* gdaldata */; }; + A4F875771E94123F0079734E /* KMeansDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4F875751E94123F0079734E /* KMeansDlg.cpp */; }; DD00ADE811138A2C008FE572 /* TemplateFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */; }; DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */; }; DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0FC7E61A9EC17500A6715B /* CorrelogramAlgs.cpp */; }; @@ -297,6 +304,17 @@ A1F1BA98178D46B8005A46E5 /* cache.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = cache.sqlite; path = BuildTools/CommonDistFiles/cache.sqlite; sourceTree = ""; }; A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomClassifPtree.cpp; path = DataViewer/CustomClassifPtree.cpp; sourceTree = ""; }; A1FD8C18186908B800C35C41 /* CustomClassifPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomClassifPtree.h; path = DataViewer/CustomClassifPtree.h; sourceTree = ""; }; + A43D31521E845985007488D9 /* LocalGearyCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalGearyCoordinator.cpp; sourceTree = ""; }; + A43D31531E845985007488D9 /* LocalGearyCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalGearyCoordinator.h; sourceTree = ""; }; + A43D31551E845A0C007488D9 /* LocalGearyCoordinatorObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalGearyCoordinatorObserver.h; sourceTree = ""; }; + A43D31561E845C3D007488D9 /* LocalGearyMapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalGearyMapNewView.cpp; sourceTree = ""; }; + A43D31571E845C3D007488D9 /* LocalGearyMapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalGearyMapNewView.h; sourceTree = ""; }; + A45DBDF01EDDEDAD00C2AA8A /* pca.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pca.h; path = Algorithms/pca.h; sourceTree = ""; }; + A45DBDF11EDDEDAD00C2AA8A /* pca.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pca.cpp; path = Algorithms/pca.cpp; sourceTree = ""; }; + A45DBDF21EDDEDAD00C2AA8A /* cluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cluster.h; path = Algorithms/cluster.h; sourceTree = ""; }; + A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cluster.cpp; path = Algorithms/cluster.cpp; sourceTree = ""; }; + A45DBDF81EDDEE4D00C2AA8A /* maxp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = maxp.cpp; path = Algorithms/maxp.cpp; sourceTree = ""; }; + A45DBDF91EDDEE4D00C2AA8A /* maxp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = maxp.h; path = Algorithms/maxp.h; sourceTree = ""; }; A48356B91E456310002791C8 /* ConditionalClusterMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalClusterMapView.cpp; sourceTree = ""; }; A48356BA1E456310002791C8 /* ConditionalClusterMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalClusterMapView.h; sourceTree = ""; }; A496C99D1E6A184C008F87DD /* samples.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = samples.sqlite; path = BuildTools/CommonDistFiles/web_plugins/samples.sqlite; sourceTree = ""; }; @@ -316,7 +334,11 @@ A496C9C01E6A440A008F87DD /* SIDSNC.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SIDSNC.png; path = BuildTools/CommonDistFiles/web_plugins/SIDSNC.png; sourceTree = ""; }; A496C9C21E6A4417008F87DD /* USHomicides.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = USHomicides.png; path = BuildTools/CommonDistFiles/web_plugins/USHomicides.png; sourceTree = ""; }; A496C9C41E6A441D008F87DD /* watermark-20.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "watermark-20.png"; path = "BuildTools/CommonDistFiles/web_plugins/watermark-20.png"; sourceTree = ""; }; + A49F56DB1E956FCC000309CE /* HClusterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HClusterDlg.cpp; sourceTree = ""; }; + A49F56DC1E956FCC000309CE /* HClusterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HClusterDlg.h; sourceTree = ""; }; A4D9A31E1E4D5F3800EF584C /* gdaldata */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gdaldata; path = BuildTools/CommonDistFiles/gdaldata; sourceTree = ""; }; + A4F875751E94123F0079734E /* KMeansDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KMeansDlg.cpp; sourceTree = ""; }; + A4F875761E94123F0079734E /* KMeansDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMeansDlg.h; sourceTree = ""; }; DD00ADE611138A2C008FE572 /* TemplateFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemplateFrame.h; sourceTree = ""; }; DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemplateFrame.cpp; sourceTree = ""; }; DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeSelectionDlg.cpp; sourceTree = ""; }; @@ -692,16 +714,20 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - DD7686D41A9FF446009EFC6D /* libgdiam */ = { + A45DBDEF1EDDDD2600C2AA8A /* Algorithms */ = { isa = PBXGroup; children = ( - DD7686D51A9FF47B009EFC6D /* gdiam.cpp */, - DD7686D61A9FF47B009EFC6D /* gdiam.hpp */, + A45DBDF81EDDEE4D00C2AA8A /* maxp.cpp */, + A45DBDF91EDDEE4D00C2AA8A /* maxp.h */, + A45DBDF01EDDEDAD00C2AA8A /* pca.h */, + A45DBDF11EDDEDAD00C2AA8A /* pca.cpp */, + A45DBDF21EDDEDAD00C2AA8A /* cluster.h */, + A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */, ); - name = libgdiam; + name = Algorithms; sourceTree = ""; }; - DD7974650F1D1B0700496A84 /* ../../ */ = { + A45DBDF61EDDEDC400C2AA8A /* _SampleImages */ = { isa = PBXGroup; children = ( A496C9C41E6A441D008F87DD /* watermark-20.png */, @@ -720,7 +746,36 @@ A496C9AB1E6A43D0008F87DD /* BuenosAiresElections.png */, A496C9A91E6A43CC008F87DD /* BostonHomeSales.png */, A496C9A71E6A43C0008F87DD /* BaltimoreHomeSales.png */, + ); + name = _SampleImages; + sourceTree = ""; + }; + A45DBDF71EDDEDDA00C2AA8A /* _InternalData */ = { + isa = PBXGroup; + children = ( A496C99D1E6A184C008F87DD /* samples.sqlite */, + A1F1BA98178D46B8005A46E5 /* cache.sqlite */, + DD2EB10019E6EFC50073E36F /* geoda_prefs.json */, + DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */, + ); + name = _InternalData; + sourceTree = ""; + }; + DD7686D41A9FF446009EFC6D /* libgdiam */ = { + isa = PBXGroup; + children = ( + DD7686D51A9FF47B009EFC6D /* gdiam.cpp */, + DD7686D61A9FF47B009EFC6D /* gdiam.hpp */, + ); + name = libgdiam; + sourceTree = ""; + }; + DD7974650F1D1B0700496A84 /* ../../ */ = { + isa = PBXGroup; + children = ( + A45DBDEF1EDDDD2600C2AA8A /* Algorithms */, + A45DBDF61EDDEDC400C2AA8A /* _SampleImages */, + A45DBDF71EDDEDDA00C2AA8A /* _InternalData */, A4D9A31E1E4D5F3800EF584C /* gdaldata */, A1C194A21B38FC67003DA7CA /* libc++.dylib */, A1B04ADC1B1921710045AA6F /* basemap_cache */, @@ -734,9 +789,6 @@ DD7976950F1D2CA800496A84 /* Regression */, DD7976E10F1D2D3100496A84 /* ShapeOperations */, DDEA3CB6193CEE250028B746 /* VarCalc */, - A1F1BA98178D46B8005A46E5 /* cache.sqlite */, - DD2EB10019E6EFC50073E36F /* geoda_prefs.json */, - DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */, DDBDFE6119E73E07004CCEDA /* web_plugins */, A19F514D1756A11E006E31B4 /* plugins */, DDCFA9941A96790100747EB7 /* DbfFile.cpp */, @@ -809,6 +861,10 @@ DD7974FE0F1D296F00496A84 /* DialogTools */ = { isa = PBXGroup; children = ( + A49F56DB1E956FCC000309CE /* HClusterDlg.cpp */, + A49F56DC1E956FCC000309CE /* HClusterDlg.h */, + A4F875751E94123F0079734E /* KMeansDlg.cpp */, + A4F875761E94123F0079734E /* KMeansDlg.h */, A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */, A1E5BC821DBFE661005739E9 /* ReportBugDlg.h */, A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */, @@ -920,6 +976,11 @@ DD7975B70F1D2A9000496A84 /* Explore */ = { isa = PBXGroup; children = ( + A43D31561E845C3D007488D9 /* LocalGearyMapNewView.cpp */, + A43D31571E845C3D007488D9 /* LocalGearyMapNewView.h */, + A43D31551E845A0C007488D9 /* LocalGearyCoordinatorObserver.h */, + A43D31521E845985007488D9 /* LocalGearyCoordinator.cpp */, + A43D31531E845985007488D9 /* LocalGearyCoordinator.h */, A48356B91E456310002791C8 /* ConditionalClusterMapView.cpp */, A48356BA1E456310002791C8 /* ConditionalClusterMapView.h */, DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */, @@ -1314,6 +1375,7 @@ DD7975670F1D296F00496A84 /* 3DControlPan.cpp in Sources */, DD79756C0F1D296F00496A84 /* ASC2SHPDlg.cpp in Sources */, DD79756D0F1D296F00496A84 /* Bnd2ShpDlg.cpp in Sources */, + A4F875771E94123F0079734E /* KMeansDlg.cpp in Sources */, DD7975700F1D296F00496A84 /* CreateGridDlg.cpp in Sources */, DD7975710F1D296F00496A84 /* CreatingWeightDlg.cpp in Sources */, DD79757C0F1D296F00496A84 /* HistIntervalDlg.cpp in Sources */, @@ -1324,6 +1386,7 @@ DD7975890F1D296F00496A84 /* RegressionDlg.cpp in Sources */, DD79758B0F1D296F00496A84 /* RegressionReportDlg.cpp in Sources */, A1C9F3ED18B55EE000E14394 /* FieldNameCorrectionDlg.cpp in Sources */, + A43D31581E845C3D007488D9 /* LocalGearyMapNewView.cpp in Sources */, DD7975920F1D296F00496A84 /* SaveSelectionDlg.cpp in Sources */, DD7975940F1D296F00496A84 /* SHP2ASCDlg.cpp in Sources */, DD7975980F1D296F00496A84 /* VariableSettingsDlg.cpp in Sources */, @@ -1374,11 +1437,13 @@ DDB77C0D139820CB00569A1E /* GStatCoordinator.cpp in Sources */, DD209598139F129900B9E648 /* GetisOrdChoiceDlg.cpp in Sources */, DD181BC813A90445004B0EC2 /* SaveToTableDlg.cpp in Sources */, + A45DBDFA1EDDEE4D00C2AA8A /* maxp.cpp in Sources */, DDF85D1813B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp in Sources */, DDB252B513BBFD6700A7CE26 /* MergeTableDlg.cpp in Sources */, DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */, DD89C87413D86BC7006C068D /* FieldNewCalcBinDlg.cpp in Sources */, DD89C87513D86BC7006C068D /* FieldNewCalcLagDlg.cpp in Sources */, + A45DBDF41EDDEDAD00C2AA8A /* pca.cpp in Sources */, DD89C87613D86BC7006C068D /* FieldNewCalcRateDlg.cpp in Sources */, DD89C87713D86BC7006C068D /* FieldNewCalcSheetDlg.cpp in Sources */, DD89C87813D86BC7006C068D /* FieldNewCalcUniDlg.cpp in Sources */, @@ -1416,6 +1481,7 @@ DDF53FF3167A39520042B453 /* CatClassifState.cpp in Sources */, DDF5400B167A39CA0042B453 /* CatClassifDlg.cpp in Sources */, DD60546816A83EEF0004BF02 /* CatClassifManager.cpp in Sources */, + A45DBDF51EDDEDAD00C2AA8A /* cluster.cpp in Sources */, DD64925C16DFF63400B3B0AB /* GeoDa.cpp in Sources */, A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */, A1D82DEF174D3EB6003DE20A /* ConnectDatasourceDlg.cpp in Sources */, @@ -1486,11 +1552,13 @@ DD6EE55F1A434302003AB41E /* DistancesCalc.cpp in Sources */, DDE4DFD61A963B07005B9158 /* GdaShape.cpp in Sources */, DDE4DFE91A96411A005B9158 /* ShpFile.cpp in Sources */, + A49F56DD1E956FCC000309CE /* HClusterDlg.cpp in Sources */, DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */, DD7686D71A9FF47B009EFC6D /* gdiam.cpp in Sources */, DDEFAAA71AA4F07200F6AAFA /* PointSetAlgs.cpp in Sources */, DD72C19A1AAE95480000420B /* SpatialIndAlgs.cpp in Sources */, DDD2392D1AB86D8F00E4E1BF /* NumericTests.cpp in Sources */, + A43D31541E845985007488D9 /* LocalGearyCoordinator.cpp in Sources */, DDFFC7CC1AC0E58B00F7DD6D /* CorrelogramView.cpp in Sources */, DDFFC7CD1AC0E58B00F7DD6D /* CorrelParamsObservable.cpp in Sources */, DDFFC7D51AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp in Sources */, @@ -1563,6 +1631,7 @@ "-I./libraries/include/wx-3.1/", "-I./libraries/include/boost", "-I./libraries/include", + "-I./libraries/include/eigen3", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", "-D__WXOSX__", @@ -1652,6 +1721,7 @@ "-I./libraries/include/wx-3.1/", "-I./libraries/include/boost", "-I./libraries/include", + "-I./libraries/include/eigen3", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", "-D__WXOSX__", diff --git a/BuildTools/macosx/auto_build.10.7.sh b/BuildTools/macosx/auto_build.10.7.sh index 8113c258f..7ff6d5960 100755 --- a/BuildTools/macosx/auto_build.10.7.sh +++ b/BuildTools/macosx/auto_build.10.7.sh @@ -13,5 +13,5 @@ cd ~/geoda_trunk/BuildTools/macosx ./build10.7.sh $CPU $NODEBUG cd ~/geoda_trunk/BuildTools/macosx/create-dmg ./geoda.sh $VERSION -mv GeoDa$VERSION-Installer.dmg ../ +mv GeoDa$VERSION-Installer.dmg /Volumes/xun/Dropbox cd .. diff --git a/BuildTools/macosx/auto_build.sh b/BuildTools/macosx/auto_build.sh index 2e25a1116..7f48058df 100755 --- a/BuildTools/macosx/auto_build.sh +++ b/BuildTools/macosx/auto_build.sh @@ -8,11 +8,11 @@ NODEBUG=$3 cd ~/geoda_trunk/ git checkout rc/GdaAppResources.cpp git pull -cd ~/geoda_trunk/o -rm * +rm ~/geoda_trunk/o/* cd ~/geoda_trunk/BuildTools/macosx +cp dep/3D* ~/geoda_trunk/Explore/ ./build.sh $CPU $NODEBUG cd ~/geoda_trunk/BuildTools/macosx/create-dmg ./geoda.sh $VERSION -mv GeoDa$VERSION-Installer.dmg ~/Dropbox +mv GeoDa$VERSION-Installer.dmg /Volumes/xun/Dropbox cd .. diff --git a/BuildTools/macosx/build-express.sh b/BuildTools/macosx/build-express.sh index dbc6bd7d2..55b102cd7 100755 --- a/BuildTools/macosx/build-express.sh +++ b/BuildTools/macosx/build-express.sh @@ -39,10 +39,10 @@ echo $PREFIX MAKER="make -j $CPUS" GDA_CC="gcc" -GDA_CFLAGS="-Os -arch x86_64" +GDA_CFLAGS="-Os -arch x86_64 -arch i386" GDA_CXX="g++" -GDA_CXXFLAGS="-Os -arch x86_64" -GDA_LDFLAGS="-arch x86_64" +GDA_CXXFLAGS="-Os -arch x86_64 -arch i386" +GDA_LDFLAGS="-arch x86_64 -arch i386" GDA_WITH_SYSROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/" if ! [ -d $DOWNLOAD_HOME ]; then @@ -57,7 +57,7 @@ fi # copy library/* ######################################################################### if ! [ -f "$PREFIX/lib/libjson_spirit.a" ] ; then - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libraries.zip + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libraries.zip curl -O $LIB_URL unzip libraries.zip rm libraries.zip @@ -121,12 +121,45 @@ if ! [ -f "$PREFIX/lib/libjson_spirit.a" ] ; then cd ../.. fi +######################################################################### +# install cURL +######################################################################### +LIB_NAME=curl-7.46.0 +LIB_CHECKER=libcurl.a +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip +LIB_FILENAME=curl-7.46.0.zip +echo $LIB_NAME + +cd $DOWNLOAD_HOME + +if ! [ -d "$LIB_NAME" ] ; then + curl -O $LIB_URL + unzip $LIB_FILENAME +fi + +if ! [ -d "$LIB_NAME" ]; then + tar -xf $LIB_FILENAME +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + cd $LIB_NAME + ./configure --enable-ares=$PREFIX CC="$GDA_CC" CFLAGS="$GDA_CFLAGS" CXX="$GDA_CXX" CXXFLAGS="$GDA_CXXFLAGS" LDFLAGS="$GDA_LDFLAGS" --prefix=$PREFIX + $MAKER + make install +fi + +if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi +export PATH=$PREFIX/bin:$PATH + ######################################################################### # install wxWidgets library ######################################################################### LIB_NAME=wxWidgets-3.1.0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.1.0.tar.bz2 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2 LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libwx_baseu-3.1.a echo $LIB_FILENAME @@ -160,7 +193,7 @@ fi # install boost library ######################################################################### LIB_NAME=boost_1_57_0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -200,7 +233,7 @@ fi # install CLAPACK ######################################################################### LIB_NAME="CLAPACK-3.2.1" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz" LIB_CHECKER="lapack.a" LIB_FILENAME=clapack.tgz echo $LIB_FILENAME diff --git a/BuildTools/macosx/build.sh b/BuildTools/macosx/build.sh index ca09e1ac3..ef29e8e66 100755 --- a/BuildTools/macosx/build.sh +++ b/BuildTools/macosx/build.sh @@ -107,14 +107,14 @@ install_library() ######################################################################### # install c-ares -- for cURL, prevent crash on Mac oSx with threads ######################################################################### -install_library c-ares-1.10.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/c-ares-1.10.0.tar.gz libcares.a +install_library c-ares-1.10.0 https://s3.us-east-2.amazonaws.com/geodabuild/c-ares-1.10.0.tar.gz libcares.a ######################################################################### # install cURL ######################################################################### LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -146,45 +146,45 @@ export PATH=$PREFIX/bin:$PATH # install Xerces ######################################################################### XERCES_NAME="xerces-c-3.1.1" -XERCES_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" +XERCES_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" install_library $XERCES_NAME $XERCES_URL libxerces-c.a ######################################################################### # install GEOS ######################################################################### -install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 ######################################################################### LIB_NAME=libkml LIB_CHECKER=libkmlbase.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libkml-r680.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME @@ -242,7 +242,7 @@ fi # install SpatiaLite ######################################################################### LIB_NAME=libspatialite-4.0.0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libspatialite.a echo $LIB_FILENAME @@ -277,7 +277,7 @@ fi # MySQL ######################################################################### LIB_NAME=mysql-5.6.14 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a LIB_FILENAME=$LIB_NAME.tar.gz echo $LIB_FILENAME @@ -304,10 +304,40 @@ if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/bld/libmysql/$LIB_CHECKER" ] ; then exit fi ######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi +######################################################################### # install boost library ######################################################################### LIB_NAME=boost_1_57_0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -346,7 +376,7 @@ fi # install JSON Spirit ######################################################################### LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -384,7 +414,7 @@ fi # install CLAPACK ######################################################################### LIB_NAME="CLAPACK-3.2.1" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz" LIB_CHECKER="lapack.a" LIB_FILENAME=clapack.tgz echo $LIB_FILENAME @@ -470,7 +500,7 @@ fi # install wxWidgets library ######################################################################### LIB_NAME=wxWidgets-3.0.2 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.0.2.tar.bz2 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.0.2.tar.bz2 LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libwx_baseu-3.0.a echo $LIB_FILENAME diff --git a/BuildTools/macosx/build10.7.sh b/BuildTools/macosx/build10.7.sh index 5050e5e58..00b7888d2 100755 --- a/BuildTools/macosx/build10.7.sh +++ b/BuildTools/macosx/build10.7.sh @@ -107,14 +107,14 @@ install_library() ######################################################################### # install c-ares -- for cURL, prevent crash on Mac oSx with threads ######################################################################### -install_library c-ares-1.10.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/c-ares-1.10.0.tar.gz libcares.a +install_library c-ares-1.10.0 https://s3.us-east-2.amazonaws.com/geodabuild/c-ares-1.10.0.tar.gz libcares.a ######################################################################### # install cURL ######################################################################### LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -146,16 +146,16 @@ export PATH=$PREFIX/bin:$PATH # install Xerces ######################################################################### XERCES_NAME="xerces-c-3.1.1" -XERCES_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" +XERCES_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" install_library $XERCES_NAME $XERCES_URL libxerces-c.a ######################################################################### # install GEOS ######################################################################### -#install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +#install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a LIB_NAME=geos-3.3.8 LIB_CHECKER=libgeos.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 LIB_FILENAME=geos-3.3.8.tar.bz2 echo $LIB_NAME @@ -185,34 +185,34 @@ export PATH=$PREFIX/bin:$PATH ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 ######################################################################### LIB_NAME=libkml LIB_CHECKER=libkmlbase.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libkml-r680.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME @@ -270,7 +270,7 @@ fi # install SpatiaLite ######################################################################### LIB_NAME=libspatialite-4.0.0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libspatialite.a echo $LIB_FILENAME @@ -305,7 +305,7 @@ fi # MySQL ######################################################################### LIB_NAME=mysql-5.6.14 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a LIB_FILENAME=$LIB_NAME.tar.gz echo $LIB_FILENAME @@ -332,10 +332,40 @@ if ! [ -f "$GEODA_HOME/temp/$LIB_NAME/bld/libmysql/$LIB_CHECKER" ] ; then exit fi ######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi +######################################################################### # install boost library ######################################################################### LIB_NAME=boost_1_57_0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -374,7 +404,7 @@ fi # install JSON Spirit ######################################################################### LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -412,7 +442,7 @@ fi # install CLAPACK ######################################################################### LIB_NAME="CLAPACK-3.2.1" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz" LIB_CHECKER="lapack.a" LIB_FILENAME=clapack.tgz echo $LIB_FILENAME @@ -498,7 +528,7 @@ fi # install wxWidgets library ######################################################################### LIB_NAME=wxWidgets-3.1.0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.1.0.tar.bz2 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2 LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libwx_baseu-3.1.a echo $LIB_FILENAME diff --git a/BuildTools/macosx/build10.8.sh b/BuildTools/macosx/build10.8.sh index 0a70d78ea..b04138d45 100755 --- a/BuildTools/macosx/build10.8.sh +++ b/BuildTools/macosx/build10.8.sh @@ -137,14 +137,14 @@ cmake_install_library() ######################################################################### # install zlib (libkml) ######################################################################### -cmake_install_library zlib-1.2.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/zlib-1.2.8.tar.gz libz.dylib +cmake_install_library zlib-1.2.8 https://s3.us-east-2.amazonaws.com/geodabuild/zlib-1.2.8.tar.gz libz.dylib ######################################################################### # install minzip (libkml) ######################################################################### LIB_NAME=minizip LIB_CHECKER=libminizip.dylib -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/minizip.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/minizip.tar.gz LIB_FILENAME=minizip.tar.gz echo $LIB_NAME @@ -174,15 +174,15 @@ fi ######################################################################### # install expat (libkml) ######################################################################### -install_library expat-2.1.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/expat-2.1.0.tar.gz libexpat.dylib +install_library expat-2.1.0 https://s3.us-east-2.amazonaws.com/geodabuild/expat-2.1.0.tar.gz libexpat.dylib ######################################################################### # install uriparser(libkml) ######################################################################### -#install_library uriparser-0.7.5 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/uriparser-0.7.5.tar.bz2 liburiparser.dylib +#install_library uriparser-0.7.5 https://s3.us-east-2.amazonaws.com/geodabuild/uriparser-0.7.5.tar.bz2 liburiparser.dylib LIB_NAME=uriparser-0.7.5 LIB_CHECKER=liburiparser.dylib -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/uriparser-0.7.5.tar.bz2 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/uriparser-0.7.5.tar.bz2 LIB_FILENAME=uriparser-0.7.5.tar.bz2 echo $LIB_NAME @@ -220,7 +220,7 @@ install_library c-ares-1.10.0 http://c-ares.haxx.se/download/c-ares-1.10.0.tar.g ######################################################################### LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -252,44 +252,44 @@ export PATH=$PREFIX/bin:$PATH # install Xerces ######################################################################### XERCES_NAME="xerces-c-3.1.1" -XERCES_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" +XERCES_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" install_library $XERCES_NAME $XERCES_URL libxerces-c.a ######################################################################### # install GEOS ######################################################################### -install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install boost library ######################################################################### LIB_NAME=boost_1_57_0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libboost_system.a echo $LIB_FILENAME @@ -428,7 +428,7 @@ fi # install JSON Spirit ######################################################################### LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -468,7 +468,7 @@ fi # install CLAPACK ######################################################################### LIB_NAME="CLAPACK-3.2.1" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz" LIB_CHECKER="lapack.a" LIB_FILENAME=clapack.tgz echo $LIB_FILENAME @@ -550,7 +550,7 @@ fi # install wxWidgets library ######################################################################### LIB_NAME=wxWidgets-3.1.0 -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.1.0.tar.bz2 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2 LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libwx_baseu-3.1.a echo $LIB_FILENAME diff --git a/BuildTools/macosx/build_watch.py b/BuildTools/macosx/build_watch.py new file mode 100644 index 000000000..0708f37c6 --- /dev/null +++ b/BuildTools/macosx/build_watch.py @@ -0,0 +1,22 @@ +import os, time, sys, subprocess + + +path_to_watch = sys.argv[1] + +before = os.path.getmtime(path_to_watch) + +while 1: + time.sleep (10) + after = os.path.getmtime(path_to_watch) + if after != before: + f = open(path_to_watch, 'r') + version = f.readline().strip() + f.close() + print version + # call build script + if os.name == 'nt': + subprocess.check_call("call_git.bat") + subprocess.check_call("build.bat") + else: + subprocess.Popen(["./auto_build.10.7.sh", version, "10", "1"]) + before = after diff --git a/BuildTools/macosx/dep/3DPlotView.cpp b/BuildTools/macosx/dep/3DPlotView.cpp new file mode 100644 index 000000000..8dd74987d --- /dev/null +++ b/BuildTools/macosx/dep/3DPlotView.cpp @@ -0,0 +1,1204 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#ifndef WX_PRECOMP + #include +#endif + +#include +#include +#include +#include +#include "../DataViewer/TableInterface.h" +#include "../DataViewer/TimeState.h" +#include "../DialogTools/3DControlPan.h" +#include "../FramesManager.h" +#include "Geom3D.h" +#include "../GdaConst.h" +#include "../GeneralWxUtils.h" +#include "../GeoDa.h" +#include "../Project.h" +#include "3DPlotView.h" + +BEGIN_EVENT_TABLE(C3DPlotCanvas, wxGLCanvas) + EVT_SIZE(C3DPlotCanvas::OnSize) + EVT_PAINT(C3DPlotCanvas::OnPaint) + EVT_ERASE_BACKGROUND(C3DPlotCanvas::OnEraseBackground) + EVT_MOUSE_EVENTS(C3DPlotCanvas::OnMouse) +END_EVENT_TABLE() + +C3DPlotCanvas::C3DPlotCanvas(Project* project_s, C3DPlotFrame* t_frame, + HLStateInt* highlight_state_s, + const std::vector& v_info, + const std::vector& col_ids, + wxWindow *parent, + wxWindowID id, const wxPoint& pos, + const wxSize& size, long style) +: wxGLCanvas(parent, id, 0, pos, size, style), ball(0), +project(project_s), +table_int(project_s->GetTableInt()), +num_obs(project_s->GetTableInt()->GetNumberRows()), +num_vars(v_info.size()), +num_time_vals(1), +highlight_state(highlight_state_s), +var_info(v_info), +data(v_info.size()), +data_undef(v_info.size()), +scaled_d(v_info.size()), +c3d_plot_frame(t_frame) +{ + wxLogMessage("Open C3DPlotCanvas."); + + m_context = new wxGLContext(this); + selectable_fill_color = GdaConst::three_d_plot_default_point_colour; + highlight_color = GdaConst::three_d_plot_default_highlight_colour; + canvas_background_color=GdaConst::three_d_plot_default_background_colour; + + data_stats.resize(var_info.size()); + var_min.resize(var_info.size()); + var_max.resize(var_info.size()); + + for (int v=0; vGetColData(col_ids[v], data[v]); + table_int->GetColData(col_ids[v], scaled_d[v]); + table_int->GetColUndefined(col_ids[v], data_undef[v]); + } + + all_undefs.resize(num_obs, false); + for (int v=0; v temp_vec; + for (int i=0; iClearAllGroupDependencies(); + for (int i=0, sz=var_info.size(); iAddGroupDependancy(var_info[i].name); + } + + VarInfoAttributeChange(); + UpdateScaledData(); + + xs = 0.1; + xp = 0.0; + ys = 0.1; + yp = 0.0; + zs = 0.1; + zp = 0.0; + + m_bLButton = false; + m_bRButton = false; + m_brush = false; + + bb_min[0] = -1; + bb_min[1] = -1; + bb_min[2] = -1; + bb_max[0] = 1; + bb_max[1] = 1; + bb_max[2] = 1; + Vec3f b_min(bb_min); + Vec3f b_max(bb_max); + Vec3f ctr((bb_max[0]+bb_min[0])/2.0f, (bb_max[1]+bb_min[1])/2.0f, + (bb_max[2]+bb_min[2])/2.0f); + + float radius = norm(b_max - ctr); + ball = new Arcball(); + ball->bounding_sphere(ctr, radius); + + m_x = false; + m_y = false; + m_z = false; + m_d = true; + b_select = false; + isInit = false; + + highlight_state->registerObserver(this); +} + +C3DPlotCanvas::~C3DPlotCanvas() +{ + if (ball) delete ball; ball = 0; + highlight_state->removeObserver(this); + delete m_context; + wxLogMessage("Close C3DPlotCanvas."); +} + +void C3DPlotCanvas::AddTimeVariantOptionsToMenu(wxMenu* menu) +{ + if (!is_any_time_variant) return; + wxMenu* menu1 = new wxMenu(wxEmptyString); + { + for (int i=0, iend=var_info.size(); iAppendCheckItem(GdaConst::ID_TIME_SYNC_VAR1+i, s, s); + mi->Check(var_info[i].sync_with_global_time); + } + } + + menu->AppendSeparator(); + menu->Append(wxID_ANY, "Time Variable Options", menu1, "Time Variable Options"); +} + +void C3DPlotCanvas::SetCheckMarks(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + + for (int i=0, iend=var_info.size(); iselect_end.x)? select_start.x:select_end.x; + int small_y=(select_start.y>select_end.y)? select_start.y:select_end.y; + int large_y=(select_start.ymouse_down(where,3); + } + + if (event.RightUp()) { + m_bRButton = false; + int where[2]; + where[0] = point.x; + where[1] = point.y; + ball->mouse_up(where,3); + } + + if (event.LeftDown()) { + if ((event.CmdDown()) && this->m_d && this->b_select) { + m_brush = true; + last[0] = point.x; + last[1] = point.y; + } else { + m_bLButton = true; + int where[2]; + where[0] = point.x; + where[1] = point.y; + last[0] = point.x; + last[1] = point.y; + ball->mouse_down(where,1); + } + } + + if (event.LeftUp()) { + if (bSelect && this->m_d ) { + bSelect = false; + SelectByRect(); + } else if (m_brush) { + m_brush = false; + } else { + m_bLButton = false; + int where[2]; + where[0] = point.x; + where[1] = point.y; + ball->mouse_up(where,1); + } + } + + if (event.Dragging()) { + int where[2]; + where[0] = point.x; + where[1] = point.y; + if (m_brush) { + float vp[4]; + glGetFloatv(GL_VIEWPORT, vp); + float W=vp[2], H=vp[3]; + float diam = 2*(ball->radius); + + ball->apply_transform(); + + int pix1[2], pix2[2], pix3[2]; + pix1[0] = (int)(W/2); + pix1[1] = (int)(H/2); + pix2[0] = (int)(W/2-1); + pix2[1] = (int)(H/2); + pix3[0] = (int)(W/2); + pix3[1] = (int)(H/2-1); + double world1[3], world2[3],world3[3]; + unproject_pixel(pix1, world1, 0.0); + unproject_pixel(pix2, world2, 0.0); + unproject_pixel(pix3, world3, 0.0); + + ball->unapply_transform(); + + Vec3f w1(world1); + Vec3f w2(world2); + Vec3f w3(world3); + + Vec3f screen_x = w1-w2; + unitize(screen_x); + Vec3f screen_y = w3-w1; + unitize(screen_y); + + Vec3f XX(1,0,0); + Vec3f YY(0,1,0); + Vec3f ZZ(0,0,1); + + xp += diam * (where[0] - last[0]) / W *(XX*screen_x); + yp += diam * (where[0] - last[0]) / W *(YY*screen_x); + zp += diam * (where[0] - last[0]) / W *(ZZ*screen_x); + + xp += diam * (last[1] - where[1]) / H *(XX*screen_y); + yp += diam * (last[1] - where[1]) / H *(YY*screen_y); + zp += diam * (last[1] - where[1]) / H *(ZZ*screen_y); + + if (xp < -1.0) xp = -1.0; + if (xp > 1.0) xp = 1.0; + if (yp < -1.0) yp = -1.0; + if (yp > 1.0) yp = 1.0; + if (zp < -1.0) zp = -1.0; + if (zp > 1.0) zp = 1.0; + + last[0] = where[0]; + last[1] = where[1]; + + c3d_plot_frame->control->m_xp->SetValue((int)((xp+1)*10000)); + c3d_plot_frame->control->m_yp->SetValue((int)((yp+1)*10000)); + c3d_plot_frame->control->m_zp->SetValue((int)((zp+1)*10000)); + + this->UpdateSelect(); + } else { + bSelect = false; + if (m_bLButton & m_bRButton) { + ball->mouse_drag(where,last,2); + last[0] = where[0]; + last[1] = where[1]; + } else if (m_bLButton) { + ball->mouse_drag(where,last,1); + last[0] = where[0]; + last[1] = where[1]; + } else if (m_bRButton) { + ball->mouse_drag(where,last,3); + last[0] = where[0]; + last[1] = where[1]; + } + } + } + + Refresh(); +} + +void C3DPlotCanvas::UpdateSelect() +{ + if (!b_select) return; + + int hl_size = highlight_state->GetHighlightSize(); + std::vector& hs = highlight_state->GetHighlight(); + bool selection_changed = false; + + double minx = xp - xs; + double maxx = xp + xs; + double miny = yp - ys; + double maxy = yp + ys; + double minz = zp - zs; + double maxz = zp + zs; + + int xt = var_info[0].time; + int yt = var_info[1].time; + int zt = var_info[2].time; + + for (int i=0; i= minx) && + (scaled_d[0][xt][i] <= maxx) && + (scaled_d[1][yt][i] >= miny) && + (scaled_d[1][yt][i] <= maxy) && + (scaled_d[2][zt][i] >= minz) && + (scaled_d[2][zt][i] <= maxz)); + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } + + if (selection_changed) { + highlight_state->SetEventType(HLStateInt::delta); + highlight_state->notifyObservers(); + } +} + +void C3DPlotCanvas::SelectByRect() +{ + int hl_size = highlight_state->GetHighlightSize(); + std::vector& hs = highlight_state->GetHighlight(); + bool selection_changed = false; + + double world11[3], world12[3], world22[3], world21[3]; + double world113[3], world123[3], world223[3], world213[3]; + + int pixel11[2], pixel12[2], pixel22[2], pixel21[2]; + + int small_x = (select_start.x < select_end.x)? select_start.x:select_end.x; + int large_x = (select_start.x > select_end.x)? select_start.x:select_end.x; + int small_y = (select_start.y < select_end.y)? select_start.y:select_end.y; + int large_y = (select_start.y > select_end.y)? select_start.y:select_end.y; + + pixel11[0] = small_x; pixel12[0] = small_x; + pixel21[0] = large_x; pixel22[0] = large_x; + pixel11[1] = small_y; pixel21[1] = small_y; + pixel12[1] = large_y; pixel22[1] = large_y; + + ball->apply_transform(); + + unproject_pixel(pixel11, world11, 0.0); + unproject_pixel(pixel12, world12, 0.0); + unproject_pixel(pixel22, world22, 0.0); + unproject_pixel(pixel21, world21, 0.0); + + unproject_pixel(pixel11, world113, 1.0); + unproject_pixel(pixel12, world123, 1.0); + unproject_pixel(pixel22, world223, 1.0); + unproject_pixel(pixel21, world213, 1.0); + + ball->unapply_transform(); + + SPlane* plane; + int i; + + bool *inside = new bool[num_obs*4]; + for(i=0; iisPositive(cor)) inside[k*num_obs+i] = true; + } + delete plane; + } + + delete [] inside; + + for (i=0; iSetEventType(HLStateInt::delta); + highlight_state->notifyObservers(); + } +} + +void C3DPlotCanvas::InitGL(void) +{ + //SetCurrent(); + + //glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClearColor(((GLfloat) canvas_background_color.Red())/((GLfloat) 255.0), + ((GLfloat) canvas_background_color.Green())/((GLfloat) 255.0), + ((GLfloat) canvas_background_color.Blue())/((GLfloat) 255.0), + 0.0f); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_NORMALIZE); + glEnable(GL_LIGHTING); + + float ambient_light[4] = {1.0, 1.0, 1.0, 1.0}; + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float *)ambient_light); + + const float light0_pos[4] = {0.0f, 0.5f, 1.0f, 0.0f}; + glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); + glEnable(GL_LIGHT0); + + float rgb[4] = {0.912f, 0.717f, 0.505f, 1.0f}; + float r_amb[4]; + float r_diff[4]; + float r_spec[4]; + + for (int i=0; i<4; i++) { + r_amb[i] = rgb[i]*0.1; + r_diff[i] = rgb[i]*1.0; + r_spec[i] = rgb[i]*0.3f; + } + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, r_amb); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, r_diff); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, r_spec); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100.0); + + glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); + glEnable(GL_COLOR_MATERIAL); +} + +void C3DPlotCanvas::SetSelectableFillColor(wxColour color) +{ + selectable_fill_color = color; + Refresh(); +} + +void C3DPlotCanvas::SetHighlightColor(wxColour color) +{ + highlight_color = color; + Refresh(); +} + +void C3DPlotCanvas::SetCanvasBackgroundColor(wxColour color) +{ + canvas_background_color = color; + InitGL(); + Refresh(); +} + +void C3DPlotCanvas::RenderScene() +{ + std::vector& hs = highlight_state->GetHighlight(); + + int xt = var_info[0].time; + int yt = var_info[1].time; + int zt = var_info[2].time; + + GLUquadric* myQuad = 0; + myQuad = gluNewQuadric(); + if (m_d) { + //glColor3f(1.0, 1.0, 1.0); + glColor3f(((GLfloat) selectable_fill_color.Red())/((GLfloat) 255.0), + ((GLfloat) selectable_fill_color.Green())/((GLfloat) 255.0), + ((GLfloat) selectable_fill_color.Blue())/((GLfloat) 255.0)); + for (int i=0; iunapply_transform(); +} + +void C3DPlotCanvas::begin_redraw() +{ + apply_camera(); + ball->apply_transform(); +} + +wxString C3DPlotCanvas::GetCanvasTitle() +{ + wxString s("3D Plot: "); + s << GetNameWithTime(0) << ", "; + s << GetNameWithTime(1) << ", "; + s << GetNameWithTime(2); + return s; +} + +wxString C3DPlotCanvas::GetNameWithTime(int var) +{ + if (var < 0 || var >= var_info.size()) return wxEmptyString; + wxString s(var_info[var].name); + if (var_info[var].is_time_variant) { + s << " (" << project->GetTableInt()->GetTimeString(var_info[var].time); + s << ")"; + } + return s; +} + +void C3DPlotCanvas::TimeChange() +{ + if (!is_any_sync_with_global_time) return; + + int cts = project->GetTimeState()->GetCurrTime(); + int ref_time = var_info[ref_var_index].time; + int ref_time_min = var_info[ref_var_index].time_min; + int ref_time_max = var_info[ref_var_index].time_max; + + if ((cts == ref_time) || + (cts > ref_time_max && ref_time == ref_time_max) || + (cts < ref_time_min && ref_time == ref_time_min)) return; + if (cts > ref_time_max) { + ref_time = ref_time_max; + } else if (cts < ref_time_min) { + ref_time = ref_time_min; + } else { + ref_time = cts; + } + for (int v=0; vSetDependsOnNonSimpleGroups(is_any_time_variant); + ref_var_index = -1; + num_time_vals = 1; + for (int i=0; i max) + max = data_stats[v][t].max; + } + + double ctr = (min+max)/2.0; + double scale = (max==min) ? 1.0 : 2.0/(max-min); + + for (int t=t_min; t<=t_max; t++) { + for (int i=0; iGetEventType(); + if (type == HLStateInt::delta) { + + Refresh(); + } else { + // type == HLStateInt::unhighlight_all + // type == HLStateInt::invert + + Refresh(); + } +} + + +BEGIN_EVENT_TABLE(C3DPlotFrame, wxFrame) + EVT_ACTIVATE(C3DPlotFrame::OnActivate) + EVT_CLOSE(C3DPlotFrame::OnClose) + EVT_MENU(XRCID("wxID_CLOSE"), C3DPlotFrame::OnMenuClose) + EVT_CHAR_HOOK(TemplateFrame::OnKeyEvent) +END_EVENT_TABLE() + + +C3DPlotFrame::C3DPlotFrame(wxFrame *parent, Project* project, + const std::vector& var_info, + const std::vector& col_ids, + const wxString& title, const wxPoint& pos, + const wxSize& size, const long style) + : TemplateFrame(parent, project, title, pos, size, style) +{ + m_splitter = new wxSplitterWindow(this); + + //wxGLAttributes glAttributes; + //glAttributes.Defaults().RGBA().DoubleBuffer().Depth(16).Stencil(8).SampleBuffers(1).Samplers(4).EndList(); + //glAttributes.PlatformDefaults().RGBA().DoubleBuffer().Depth(24).EndList(); + + + canvas = new C3DPlotCanvas(project, this, + project->GetHighlightState(), + var_info, col_ids, + m_splitter); + + control = new C3DControlPan(m_splitter, -1, wxDefaultPosition, + wxDefaultSize, wxCAPTION|wxDEFAULT_DIALOG_STYLE); + control->template_frame = this; + m_splitter->SplitVertically(control, canvas, 70); + UpdateTitle(); + + Show(true); +} + +C3DPlotFrame::~C3DPlotFrame() +{ +} + +void C3DPlotFrame::OnActivate(wxActivateEvent& event) +{ + if (event.GetActive()) { + RegisterAsActive("C3DPlotFrame", GetTitle()); + } +} + +void C3DPlotFrame::OnClose(wxCloseEvent& event) +{ + DeregisterAsActive(); + Destroy(); +} + +void C3DPlotFrame::OnMenuClose(wxCommandEvent& event) +{ + Close(); +} + +void C3DPlotFrame::MapMenus() +{ + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + // Map Options Menus + wxMenu* optMenu = wxXmlResource::Get()-> + LoadMenu("ID_3D_PLOT_VIEW_MENU_OPTIONS"); + canvas->AddTimeVariantOptionsToMenu(optMenu); + canvas->SetCheckMarks(optMenu); + GeneralWxUtils::ReplaceMenu(mb, "Options", optMenu); + UpdateOptionMenuItems(); +} + +void C3DPlotFrame::UpdateOptionMenuItems() +{ + TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu("Options"); + if (menu == wxNOT_FOUND) { + } else { + canvas->SetCheckMarks(mb->GetMenu(menu)); + } +} + +void C3DPlotFrame::OnHighlightColor(wxCommandEvent& event) +{ + wxColour new_color; + if ( GetColorFromUser(this, + canvas->highlight_color, + new_color, + "Highlight Color") ) { + canvas->SetHighlightColor(new_color); + } +} + +void C3DPlotFrame::OnCanvasBackgroundColor(wxCommandEvent& event) +{ + wxColour new_color; + if ( GetColorFromUser(this, + canvas->canvas_background_color, + new_color, + "Background Color") ) { + canvas->SetCanvasBackgroundColor(new_color); + } +} + +void C3DPlotFrame::OnSelectableFillColor(wxCommandEvent& event) +{ + wxColour new_color; + if ( GetColorFromUser(this, + canvas->selectable_fill_color, + new_color, + "Fill Color") ) { + canvas->SetSelectableFillColor(new_color); + } +} + +/** Implementation of TimeStateObserver interface */ +void C3DPlotFrame::update(TimeState* o) +{ + canvas->TimeChange(); + UpdateTitle(); +} + +void C3DPlotFrame::OnTimeSyncVariable(int var_index) +{ + if (!canvas) return; + canvas->TimeSyncVariableToggle(var_index); + UpdateOptionMenuItems(); +} + +void C3DPlotFrame::UpdateTitle() +{ + TemplateFrame::UpdateTitle(); + control->UpdateAxesLabels(canvas->GetNameWithTime(0), + canvas->GetNameWithTime(1), + canvas->GetNameWithTime(2)); +} + diff --git a/BuildTools/macosx/dep/3DPlotView.h b/BuildTools/macosx/dep/3DPlotView.h new file mode 100644 index 000000000..05bc3da85 --- /dev/null +++ b/BuildTools/macosx/dep/3DPlotView.h @@ -0,0 +1,179 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_3D_PLOT_VIEW_H__ +#define __GEODA_CENTER_3D_PLOT_VIEW_H__ + +#include +#include "../FramesManagerObserver.h" +#include "../HLStateInt.h" +#include "../HighlightStateObserver.h" +#include "../VarTools.h" +#include "../TemplateCanvas.h" +#include "../TemplateFrame.h" + +class Arcball; +class C3DControlPan; +class C3DPlotFrame; +class TableInterface; + +typedef boost::multi_array d_array_type; +typedef boost::multi_array b_array_type; + +class C3DPlotCanvas: public wxGLCanvas, public HighlightStateObserver +{ +public: + C3DPlotCanvas(Project* project, C3DPlotFrame* t_frame, + HLStateInt* highlight_state, + const std::vector& var_info, + const std::vector& col_ids, + wxWindow *parent, + const wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + virtual ~C3DPlotCanvas(); + + virtual void AddTimeVariantOptionsToMenu(wxMenu* menu); + virtual void SetCheckMarks(wxMenu* menu); + virtual wxString GetCanvasTitle(); + virtual wxString GetNameWithTime(int var); + virtual void TimeChange(); + void VarInfoAttributeChange(); + void UpdateScaledData(); + virtual void TimeSyncVariableToggle(int var_index); + + void SetCurrentTmStep(int t) { local_time_step = t; } + int GetCurrentTmStep() { return local_time_step; } + int local_time_step; // valid range always starts at 0? + + void OnPaint(wxPaintEvent& event); + void OnSize(wxSizeEvent& event); + void OnEraseBackground(wxEraseEvent& event); + void OnKeyEvent(wxKeyEvent& ev); + void OnMouse(wxMouseEvent& event); + void UpdateSelect(); + void SelectByRect(); + void InitGL(void); + + bool isInit; + + float m_ClearColorBlue; + float m_ClearColorGreen; + float m_ClearColorRed; + + int selection_mode; + int last[2]; + bool m_bRButton; + bool m_bLButton; + int height, width; + double bb_min[3], bb_max[3]; + + wxColour selectable_fill_color; + wxColour highlight_color; + wxColour canvas_background_color; + virtual void SetSelectableFillColor(wxColour color); + virtual void SetHighlightColor(wxColour color); + virtual void SetCanvasBackgroundColor(wxColour color); + + Arcball* ball; + double xs, xp, ys, yp, zs, zp; + + bool ShowFirst; + bool m_d; + bool m_z; + bool m_y; + bool m_x; + bool b_select; + bool m_brush; + void RenderScene(); + void apply_camera(); + void end_redraw(); + void begin_redraw(); + + /** Implementation of the HighlightStateObserver interface + update function. */ + virtual void update(HLStateInt* o); + TableInterface* table_int; + Project* project; + HLStateInt* highlight_state; + int num_obs; + int num_vars; + int num_time_vals; + int ref_var_index; + std::vector var_info; + std::vector data; + std::vector data_undef; + std::vector all_undefs; + + std::vector scaled_d; + std::vector< std::vector > data_stats; + std::vector var_min; // min over time + std::vector var_max; // max over time + bool is_any_time_variant; + bool is_any_sync_with_global_time; + + wxPoint select_start; + wxPoint select_end; + bool bSelect; + C3DControlPan *m_dlg; + C3DPlotFrame* c3d_plot_frame; + wxGLContext* m_context; + + DECLARE_EVENT_TABLE() +}; + + +class C3DPlotFrame: public TemplateFrame +{ +public: + C3DPlotFrame(wxFrame *parent, Project* project, + const std::vector& var_info, + const std::vector& col_ids, + const wxString& title, const wxPoint& pos, + const wxSize& size, const long style); + virtual ~C3DPlotFrame(); + + wxSplitterWindow* m_splitter; + C3DPlotCanvas* canvas; + C3DControlPan* control; + + void OnClose(wxCloseEvent& event); + void OnMenuClose(wxCommandEvent& event); + void OnActivate(wxActivateEvent& event); + virtual void MapMenus(); + virtual void UpdateOptionMenuItems(); + virtual void OnCanvasBackgroundColor(wxCommandEvent& event); + virtual void OnSelectableFillColor(wxCommandEvent& event); + virtual void OnHighlightColor(wxCommandEvent& event); + virtual void OnTimeSyncVariable(int var_index); + + /** Implementation of TimeStateObserver interface */ + virtual void update(TimeState* o); + + virtual void UpdateTitle(); + + DECLARE_EVENT_TABLE() +}; + + + + +#endif + diff --git a/BuildTools/ubuntu/GNUmakefile b/BuildTools/ubuntu/GNUmakefile index 0affad7ae..89ba1bb65 100644 --- a/BuildTools/ubuntu/GNUmakefile +++ b/BuildTools/ubuntu/GNUmakefile @@ -10,7 +10,7 @@ default: compile-geoda app: build-geoda-mac -compile-geoda: dataviewer-target dialogtools-target \ +compile-geoda: algorithms-target dataviewer-target dialogtools-target \ explore-target libgdiam-target regression-target \ shapeoperations-target resource-target varcalc-target \ geoda-target @@ -23,6 +23,9 @@ test1: resource-target: (cd $(GeoDa_ROOT)/rc; $(MAKE) xrc; $(MAKE)) +algorithms-target: + (cd $(GeoDa_ROOT)/Algorithms; $(MAKE)) + dataviewer-target: (cd $(GeoDa_ROOT)/DataViewer; $(MAKE)) diff --git a/BuildTools/ubuntu/build.sh b/BuildTools/ubuntu/build.sh index 8802998ff..b27d2bb48 100755 --- a/BuildTools/ubuntu/build.sh +++ b/BuildTools/ubuntu/build.sh @@ -107,7 +107,7 @@ echo "% Building: libiConv %" echo "%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="libiconv-1.14" - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libiconv-1.14.tar.gz" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/libiconv-1.14.tar.gz" LIB_CHECKER="libiconv.a" LIB_FILENAME="libiconv-1.14.tar.gz" echo $LIB_FILENAME @@ -149,7 +149,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%" LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -185,7 +185,7 @@ echo "% Building: Xerces %" echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="xerces-c-3.1.1" - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" LIB_CHECKER="libxerces-c.a" LIB_FILENAME=$(basename "$LIB_URL" ".tar") echo $LIB_FILENAME @@ -213,34 +213,34 @@ echo "%%%%%%%%%%%%%%%%%%%%" ######################################################################### # install GEOS ######################################################################### -install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### # libreadline, zlib echo "install libreadline, zlib" -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 @@ -254,7 +254,7 @@ echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="libkml" LIB_CHECKER="libkmlbase.a" - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libkml-r680.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME @@ -322,7 +322,7 @@ echo "% Building: Spatialite %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=libspatialite-4.0.0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz LIB_FILENAME=$LIB_NAME.tar.gz LIB_CHECKER=libspatialite.a echo $LIB_FILENAME @@ -356,7 +356,7 @@ echo "% Building: MySQL %" echo "%%%%%%%%%%%%%%%%%%%" { LIB_NAME=mysql-5.6.14 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a echo $LIB_NAME @@ -394,7 +394,7 @@ echo "% Building: Boost 1.57 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=boost_1_57_0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=boost_1_57_0.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -441,7 +441,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%" echo "% Building: JSON Spirit %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%" LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -449,7 +449,7 @@ echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip unzip $LIB_FILENAME fi @@ -490,7 +490,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -d "$CLAPACK_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz tar -xvf clapack.tgz fi @@ -605,7 +605,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" #sudo apt-get install libgtk2.0-dev libglu1-mesa-dev libgl1-mesa-dev { LIB_NAME=wxWidgets-3.0.2 - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.0.2.tar.bz2" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.0.2.tar.bz2" LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=wx-config diff --git a/BuildTools/ubuntu/build64.sh b/BuildTools/ubuntu/build64.sh index 3c35f9a78..4d7ec8e03 100755 --- a/BuildTools/ubuntu/build64.sh +++ b/BuildTools/ubuntu/build64.sh @@ -144,7 +144,7 @@ install_library c-ares-1.10.0 http://c-ares.haxx.se/download/c-ares-1.10.0.tar.g LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -180,7 +180,7 @@ echo "% Building: Xerces %" echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="xerces-c-3.1.1" - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" LIB_CHECKER="libxerces-c.a" LIB_FILENAME=$(basename "$LIB_URL" ".tar") echo $LIB_FILENAME @@ -209,34 +209,34 @@ echo "%%%%%%%%%%%%%%%%%%%%" ######################################################################### # install GEOS ######################################################################### -install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### # libreadline, zlib echo "install libreadline, zlib" -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 @@ -250,7 +250,7 @@ echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="libkml" LIB_CHECKER="libkmlbase.a" - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libkml-r680.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME @@ -318,7 +318,7 @@ echo "% Building: Spatialite %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=libspatialite-4.0.0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libspatialite.a echo $LIB_FILENAME @@ -352,7 +352,7 @@ echo "% Building: MySQL %" echo "%%%%%%%%%%%%%%%%%%%" { LIB_NAME=mysql-5.6.14 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a echo $LIB_NAME @@ -381,6 +381,36 @@ echo "%%%%%%%%%%%%%%%%%%%" fi } +######################################################################### +# Eigen3 +######################################################################### +LIB_NAME=eigen3 +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_CHECKER=Dense +LIB_FILENAME=$LIB_NAME.zip +echo $LIB_FILENAME +cd $DOWNLOAD_HOME + +if ! [ -f "$LIB_FILENAME" ] ; then + curl -O $LIB_URL +fi + +if ! [ -d "$LIB_NAME" ]; then + unzip $LIB_FILENAME +fi + +cd $DOWNLOAD_HOME/$LIB_NAME +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + mkdir bld + cd bld + cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX + make install +fi + +if ! [ -f "$PREFIX/include/eigen3/Eigen/$LIB_CHECKER" ] ; then + echo "Error! Exit" + exit +fi ######################################################################### # install boost library ######################################################################### @@ -390,7 +420,7 @@ echo "% Building: Boost 1.57 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=boost_1_57_0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=boost_1_57_0.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -437,7 +467,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%" echo "% Building: JSON Spirit %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%" LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -445,7 +475,7 @@ echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip unzip $LIB_FILENAME fi @@ -485,7 +515,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -d "$CLAPACK_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz tar -xvf clapack.tgz fi @@ -599,7 +629,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" # sudo apt-get install libgtk2.0-dev libglu1-mesa-dev libgl1-mesa-dev { LIB_NAME=wxWidgets-3.1.0 - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.1.0.tar.bz2" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.tar.bz2" LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=wx-config diff --git a/BuildTools/ubuntu/build_travis.sh b/BuildTools/ubuntu/build_travis.sh index 79f52fa43..6d4c46cfa 100755 --- a/BuildTools/ubuntu/build_travis.sh +++ b/BuildTools/ubuntu/build_travis.sh @@ -117,7 +117,7 @@ install_library c-ares-1.10.0 http://c-ares.haxx.se/download/c-ares-1.10.0.tar.g LIB_NAME=curl-7.46.0 LIB_CHECKER=libcurl.a -LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip +LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip LIB_FILENAME=curl-7.46.0.zip echo $LIB_NAME @@ -153,7 +153,7 @@ echo "% Building: Xerces %" echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="xerces-c-3.1.1" - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.tar.gz" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" LIB_CHECKER="libxerces-c.a" LIB_FILENAME=$(basename "$LIB_URL" ".tar") echo $LIB_FILENAME @@ -182,34 +182,34 @@ echo "%%%%%%%%%%%%%%%%%%%%" ######################################################################### # install GEOS ######################################################################### -install_library geos-3.3.8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2 libgeos.a +install_library geos-3.3.8 https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2 libgeos.a ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -install_library freexl-1.0.0f https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0f.tar.gz libfreexl.a +install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### # libreadline, zlib echo "install libreadline, zlib" -install_library postgresql-9.2.4 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://dl.dropboxusercontent.com/u/145979/geoda_libraries/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 @@ -223,7 +223,7 @@ echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="libkml" LIB_CHECKER="libkmlbase.a" - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libkml-r680.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME @@ -290,7 +290,7 @@ echo "% Building: Spatialite %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=libspatialite-4.0.0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libspatialite.a echo $LIB_FILENAME @@ -324,7 +324,7 @@ echo "% Building: MySQL %" echo "%%%%%%%%%%%%%%%%%%%" { LIB_NAME=mysql-5.6.14 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a echo $LIB_NAME @@ -362,7 +362,7 @@ echo "% Building: Boost 1.57 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=boost_1_57_0 - LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.tar.gz + LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz LIB_FILENAME=boost_1_57_0.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -409,7 +409,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%" echo "% Building: JSON Spirit %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%" LIB_NAME="json_spirit_v4.08" -LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -417,7 +417,7 @@ echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip unzip $LIB_FILENAME fi @@ -457,7 +457,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -d "$CLAPACK_NAME" ]; then - curl -O https://dl.dropboxusercontent.com/u/145979/geoda_libraries/clapack.tgz + curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz tar -xvf clapack.tgz fi @@ -570,7 +570,7 @@ echo "% Building wxWidgets 3.0.2 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=wxWidgets-3.0.2 - LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.0.2.tar.bz2" + LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.0.2.tar.bz2" LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=wx-config diff --git a/BuildTools/ubuntu/create_deb.sh b/BuildTools/ubuntu/create_deb.sh index dbea05027..7a88f66a1 100755 --- a/BuildTools/ubuntu/create_deb.sh +++ b/BuildTools/ubuntu/create_deb.sh @@ -32,6 +32,6 @@ if [ $MACHINE_TYPE == 'x86_64' ]; then mv product/DEBIAN/control64 product/DEBIAN/control fi -rm -f GeoDa-1.8-Ubuntu-XXbit.deb -dpkg -b product/ GeoDa-1.8-Ubuntu-XXbit.deb +rm -f GeoDa-1.10-Ubuntu-XXbit.deb +dpkg -b product/ GeoDa-1.10-Ubuntu-XXbit.deb diff --git a/BuildTools/ubuntu/package/DEBIAN/control b/BuildTools/ubuntu/package/DEBIAN/control index 535818781..3ab7f7146 100644 --- a/BuildTools/ubuntu/package/DEBIAN/control +++ b/BuildTools/ubuntu/package/DEBIAN/control @@ -1,5 +1,5 @@ Package: geoda -Version: 1.8 +Version: 1.10 Architecture: i386 Priority: optional Section: graphics diff --git a/BuildTools/ubuntu/package/DEBIAN/control64 b/BuildTools/ubuntu/package/DEBIAN/control64 index 1a872b25f..225181447 100644 --- a/BuildTools/ubuntu/package/DEBIAN/control64 +++ b/BuildTools/ubuntu/package/DEBIAN/control64 @@ -1,5 +1,5 @@ Package: geoda -Version: 1.8 +Version: 1.10 Architecture: amd64 Priority: optional Section: graphics diff --git a/BuildTools/windows/GeoDa.vcxproj b/BuildTools/windows/GeoDa.vcxproj index 44f8b132b..b63aa5aaa 100644 --- a/BuildTools/windows/GeoDa.vcxproj +++ b/BuildTools/windows/GeoDa.vcxproj @@ -1,6 +1,14 @@  + + Debug2017 + Win32 + + + Debug2017 + x64 + Debug Win32 @@ -22,6 +30,7 @@ {B3CB134F-61C6-48C7-B6E4-353AC473A467} GeoDa Win32Proj + 8.1 @@ -36,10 +45,18 @@ Application Windows7.1SDK + + Application + Windows7.1SDK + Application Windows7.1SDK + + Application + v141 + @@ -52,18 +69,30 @@ + + + + + + <_ProjectFileVersion>10.0.30319.1 Debug\ + Debug\ Debug\ + Debug\ Debug\ + Debug\ Debug\ + Debug\ true + true true + true Release\ Release\ Release\ @@ -74,7 +103,39 @@ Disabled - C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_dll\mswud;temp\json_spirit_v4.08;%(AdditionalIncludeDirectories) + C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_dll\mswud;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) + WIN32;DEBUG;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + 4996;4522;%(DisableSpecificWarnings) + /MP %(AdditionalOptions) + true + + + __WXMSW__;_UNICODE;_WINDOWS;NOPCH;WXUSINGDLL;%(PreprocessorDefinitions) + 0x0409 + temp\wxWidgets-3.1.0\include;%(AdditionalIncludeDirectories) + + + gdal_i.lib;libcurl.lib;libboost_thread-vc100-mt-gd-1_57.lib;BLAS.lib;clapack.lib;libf2c.lib;json_spirit_lib.lib;sqlite3_i.lib;GlU32.lib;OpenGL32.lib;wxmsw31ud.lib;wxmsw31ud_gl.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexud.lib;wxexpatd.lib;wsock32.lib;comctl32.lib;winmm.lib;rpcrt4.lib;%(AdditionalDependencies) + C:\OSGeo4W\lib;temp\wxWidgets-3.1.0\lib\vc_dll;temp\CLAPACK-3.1.1-VisualStudio\LIB\Win32;temp\boost_1_57_0\stage\lib;temp\json_spirit_v4.08\Debug;%(AdditionalLibraryDirectories) + false + %(IgnoreSpecificDefaultLibraries) + true + Windows + MachineX86 + /NODEFAULTLIB:library %(AdditionalOptions) + + + + + Disabled + C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_dll\mswud;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) WIN32;DEBUG;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) false EnableFastChecks @@ -106,7 +167,7 @@ Disabled - C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswud;temp\json_spirit_v4.08;%(AdditionalIncludeDirectories) + C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswud;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) WIN32;DEBUG;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) false EnableFastChecks @@ -139,9 +200,45 @@ false + + + Disabled + C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswud;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) + WIN32;DEBUG;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + ProgramDatabase + 4996;4522;%(DisableSpecificWarnings) + /MP %(AdditionalOptions) + true + false + + + __WXMSW__;_UNICODE;_WINDOWS;NOPCH;WXUSINGDLL;%(PreprocessorDefinitions) + 0x0409 + temp\wxWidgets-3.1.0\include;%(AdditionalIncludeDirectories) + + + gdal_i.lib;libcurl.lib;libboost_thread-vc140-mt-gd-1_57.lib;BLAS.lib;clapack.lib;libf2c.lib;json_spirit_lib.lib;sqlite3_i.lib;GlU32.lib;OpenGL32.lib;wxmsw31ud.lib;wxmsw31ud_gl.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexud.lib;wxexpatd.lib;wsock32.lib;comctl32.lib;winmm.lib;rpcrt4.lib;%(AdditionalDependencies) + C:\OSGeo4W\lib;temp\wxWidgets-3.1.0\lib\vc_x64_dll;temp\CLAPACK-3.1.1-VisualStudio\LIB\x64;temp\boost_1_57_0\stage\lib;temp\json_spirit_v4.08\Debug;%(AdditionalLibraryDirectories) + + + %(IgnoreSpecificDefaultLibraries) + true + Windows + + + %(AdditionalManifestFiles) + false + + - C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_dll\mswu;temp\json_spirit_v4.08;%(AdditionalIncludeDirectories) + C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_dll\mswu;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) WIN32;_WINDOWS;__WXMSW__;__NO_VC_CRTDBG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) MultiThreadedDLL @@ -168,7 +265,7 @@ - C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswu;temp\json_spirit_v4.08;%(AdditionalIncludeDirectories) + C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswu;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) WIN32;_WINDOWS;__WXMSW__;__NO_VC_CRTDBG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) MultiThreadedDLL @@ -202,18 +299,22 @@ - + + + + + @@ -232,6 +333,8 @@ + + @@ -262,6 +365,9 @@ + + + @@ -286,6 +392,8 @@ + + @@ -311,6 +419,9 @@ + + + @@ -508,7 +619,9 @@ 4996;%(DisableSpecificWarnings) + 4996;%(DisableSpecificWarnings) 4996;%(DisableSpecificWarnings) + 4996;%(DisableSpecificWarnings) 4996;%(DisableSpecificWarnings) 4996;%(DisableSpecificWarnings) diff --git a/BuildTools/windows/GeoDa.vcxproj.filters b/BuildTools/windows/GeoDa.vcxproj.filters index d18351f34..bda9bd21e 100644 --- a/BuildTools/windows/GeoDa.vcxproj.filters +++ b/BuildTools/windows/GeoDa.vcxproj.filters @@ -29,6 +29,9 @@ {efd46cf7-a968-4f71-9280-fd130105566c} + + {26d19d80-b064-41d9-80e5-37e967c05d8a} + @@ -49,7 +52,6 @@ rc - @@ -631,6 +633,30 @@ Explore + + Explore + + + Explore + + + Explore + + + DialogTools + + + DialogTools + + + Algorithms + + + Algorithms + + + Algorithms + @@ -1152,5 +1178,26 @@ Explore + + Explore + + + Explore + + + DialogTools + + + DialogTools + + + Algorithms + + + Algorithms + + + Algorithms + \ No newline at end of file diff --git a/BuildTools/windows/GeoDa.vs2017.sln b/BuildTools/windows/GeoDa.vs2017.sln index 9206e78ce..670512cbd 100644 --- a/BuildTools/windows/GeoDa.vs2017.sln +++ b/BuildTools/windows/GeoDa.vs2017.sln @@ -1,26 +1,34 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoDa", "GeoDa.vcxproj", "{B3CB134F-61C6-48C7-B6E4-353AC473A467}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|Win32.Build.0 = Debug|Win32 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|x64.ActiveCfg = Debug|x64 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|x64.Build.0 = Debug|x64 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|Win32.ActiveCfg = Release|Win32 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|Win32.Build.0 = Release|Win32 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|x64.ActiveCfg = Release|x64 - {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26401.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoDa", "GeoDa.vcxproj", "{B3CB134F-61C6-48C7-B6E4-353AC473A467}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Debug2017|Win32 = Debug2017|Win32 + Debug2017|x64 = Debug2017|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|Win32.ActiveCfg = Debug|Win32 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|Win32.Build.0 = Debug|Win32 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|x64.ActiveCfg = Debug|x64 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug|x64.Build.0 = Debug|x64 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug2017|Win32.ActiveCfg = Debug2017|Win32 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug2017|Win32.Build.0 = Debug2017|Win32 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug2017|x64.ActiveCfg = Debug2017|x64 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Debug2017|x64.Build.0 = Debug2017|x64 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|Win32.ActiveCfg = Release|Win32 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|Win32.Build.0 = Release|Win32 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|x64.ActiveCfg = Release|x64 + {B3CB134F-61C6-48C7-B6E4-353AC473A467}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/BuildTools/windows/build.bat b/BuildTools/windows/build.bat index d6ea2b287..6cf92868a 100644 --- a/BuildTools/windows/build.bat +++ b/BuildTools/windows/build.bat @@ -25,7 +25,9 @@ if %PROCESSOR_ARCHITECTURE% == x86 ( for /f "tokens=4 delims=;= " %%P in ('findstr /c:"version_major" ..\..\version.h') do set VER_MAJOR=%%P for /f "tokens=4 delims=;= " %%P in ('findstr /c:"version_minor" ..\..\version.h') do set VER_MINOR=%%P for /f "tokens=4 delims=;= " %%P in ('findstr /c:"version_build" ..\..\version.h') do set VER_BUILD=%%P -set GDA_VERSION=%VER_MAJOR%.%VER_MINOR%.%VER_BUILD% +for /f "tokens=4 delims=;= " %%P in ('findstr /c:"version_subbuild" ..\..\version.h') do set VER_SUBBUILD=%%P + +set GDA_VERSION=%VER_MAJOR%.%VER_MINOR%.%VER_BUILD%.%VER_SUBBUILD% echo. echo ##################################################### @@ -97,7 +99,7 @@ echo # build cURL (by default /MD) echo ##################################################### echo. set LIB_NAME=curl-7.46.0 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/curl-7.46.0.zip" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\libcurl.dll set ALL_EXIST=false @@ -131,11 +133,11 @@ if %GDA_BUILD% == BUILD_32 ( ) else ( rmdir %DOWNLOAD_HOME%\%LIB_NAME%\builds /s /q - nmake -f Makefile.vc mode=static CONFIG_NAME_LIB=curlib + nmake -f Makefile.vc mode=static CONFIG_NAME_LIB=curlib MACHINE=x64 copy /Y %DOWNLOAD_HOME%\%LIB_NAME%\builds\curlib\lib\libcurl_a.lib %LIBRARY_HOME%\%LIB_HM_LIB%\libcurl_a.lib rmdir %DOWNLOAD_HOME%\%LIB_NAME%\builds /s /q - nmake -f Makefile.vc mode=dll CONFIG_NAME_LIB=curlib + nmake -f Makefile.vc mode=dll CONFIG_NAME_LIB=curlib MACHINE=x64 copy /Y %DOWNLOAD_HOME%\%LIB_NAME%\builds\curlib\bin\libcurl.dll %LIBRARY_HOME%\%LIB_HM_LIB%\libcurl.dll copy /Y %DOWNLOAD_HOME%\%LIB_NAME%\builds\curlib\lib\libcurl.lib %LIBRARY_HOME%\%LIB_HM_LIB%\libcurl.lib @@ -158,7 +160,7 @@ echo # build libiconv echo ##################################################### echo. set LIB_NAME=libiconv-1.14 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libiconv-1.14.tar.gz" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/libiconv-1.14.tar.gz" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\iconv.lib set ALL_EXIST=false @@ -210,7 +212,7 @@ echo # build Xerces echo ##################################################### echo. set LIB_NAME=xerces-c-3.1.1 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/xerces-c-3.1.1.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.zip" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\xerces-c_static_3.lib set ALL_EXIST=false if %ALL_EXIST% == true ( @@ -264,7 +266,7 @@ echo # build GEOS echo ##################################################### echo. set LIB_NAME=geos-3.3.8 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/geos-3.3.8.tar.bz2" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/geos-3.3.8.tar.bz2" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\geos.dll set ALL_EXIST=false if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\geos.lib set ALL_EXIST=false @@ -323,7 +325,7 @@ echo # build PROJ4 (todo , MD,MT nmake.opt) echo ##################################################### echo. set LIB_NAME=proj-4.8.0 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/proj-4.8.0.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.zip" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\proj.dll set ALL_EXIST=false @@ -365,7 +367,7 @@ echo # build freeXL echo ##################################################### echo. set LIB_NAME=freexl-1.0.0e -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/freexl-1.0.0e.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0e.zip" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\freexl.dll set ALL_EXIST=false @@ -408,7 +410,7 @@ echo # build SQLite3 echo ##################################################### echo. set LIB_NAME=sqlite-amalgamation-3071700 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/sqlite-amalgamation-3071700.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-amalgamation-3071700.zip" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\sqlite.dll set ALL_EXIST=false @@ -477,7 +479,7 @@ echo # build SpatiaLite echo ##################################################### echo. set LIB_NAME=libspatialite-4.0.0 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/libspatialite-4.0.0.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.zip" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\spatialite.dll set ALL_EXIST=false @@ -528,9 +530,9 @@ echo ##################################################### echo. set LIB_NAME=postgresql-9.2.4 if %GDA_BUILD% == BUILD_32 ( - set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4-1-windows-binaries.zip" + set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4-1-windows-binaries.zip" ) else ( - set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/postgresql-9.2.4-1-windows-x64-binaries.zip" + set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4-1-windows-x64-binaries.zip" ) set ALL_EXIST=true @@ -579,10 +581,10 @@ echo ##################################################### echo. if %GDA_BUILD% == BUILD_32 ( set LIB_NAME=mysql-5.6.16-win32 - set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14-win32.zip" + set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14-win32.zip" ) else ( set LIB_NAME=mysql-5.6.16-winx64 - set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/mysql-5.6.14-winx64.zip" + set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14-winx64.zip" ) REM "The downloaded DLLs are /MT builds, which can't be used. I think build " @@ -630,7 +632,7 @@ echo # build CLAPACK echo ##################################################### echo. set LIB_NAME=CLAPACK-3.1.1-VisualStudio -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/CLAPACK-3.1.1-VisualStudio.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/CLAPACK-3.1.1-VisualStudio.zip" REM # We only test for a small subset of all the CLPACK generated libraries set ALL_EXIST=true @@ -692,7 +694,7 @@ echo # build wxWidgets echo ##################################################### echo. set LIB_NAME=wxWidgets-3.1.0 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/wxWidgets-3.1.0.7z" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/wxWidgets-3.1.0.7z" REM # We are only checking for a small subset of wxWidgets libraries set ALL_EXIST=true @@ -755,7 +757,7 @@ echo # build EXPAT echo ##################################################### echo. set LIB_NAME=expat-2.1.0 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/expat-2.1.0.tar.gz" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/expat-2.1.0.tar.gz" set ALL_EXIST=true if NOT EXIST %LIBRARY_HOME%\%LIB_HM_LIB%\expat.lib set ALL_EXIST=false @@ -855,7 +857,7 @@ echo # build Boost 1.57 echo ##################################################### echo. set LIB_NAME=boost_1_57_0 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/boost_1_57_0.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.zip" set ALL_EXIST=true if NOT EXIST %DOWNLOAD_HOME%\%LIB_NAME%\stage\lib\libboost_thread-vc100-mt-1_57.lib set ALL_EXIST=false @@ -877,7 +879,19 @@ echo %DOWNLOAD_HOME%\%LIB_NAME% set BOOST_HOME=%DOWNLOAD_HOME%\%LIB_NAME% echo BOOST_HOME: %BOOST_HOME% cd %BOOST_HOME% + call bootstrap.bat + +echo ############################################### +echo # for visual studio 2017 +echo edit project-config.jam +echo (content) +echo import option; +echo using msvc : 14.0 "c:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64\cl.exe"; +echo option.set keep-going : false ; +echo +echo Then, run b2 with --toolset=msvc-14.0 +echo ############################################### if %GDA_BUILD% == BUILD_32 ( call b2 --with-thread --with-date_time --with-chrono --with-system --toolset=msvc-10.0 --build-type=complete stage call b2 --with-thread --with-date_time --with-chrono --with-system --toolset=msvc-10.0 --build-type=complete --debug-symbols=on stage @@ -907,7 +921,7 @@ echo # build JSON Spirit echo ##################################################### echo. set LIB_NAME=json_spirit_v4.08 -set LIB_URL="https://dl.dropboxusercontent.com/u/145979/geoda_libraries/json_spirit_v4.08.zip" +set LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" set ALL_EXIST=true if NOT EXIST %DOWNLOAD_HOME%\%LIB_NAME%\Release\json_spirit_lib.lib set ALL_EXIST=false @@ -937,6 +951,32 @@ IF NOT EXIST %CHK_LIB% goto MISSING_TARGET_END :SKIP_JSON_SPIRIT_BUILD +:TO_EIGEN3_BUILD +echo. +echo ##################################################### +echo # build Eigen3 +echo ##################################################### +echo. +set LIB_NAME=eigen3 +set LIB_URL="https://bitbucket.org/eigen/eigen/get/3.3.3.zip" + +set ALL_EXIST=true +if NOT EXIST %DOWNLOAD_HOME%\%LIB_NAME% set ALL_EXIST=false +if %ALL_EXIST% == true ( + echo All %LIB_NAME% library targets exist, skipping build + goto SKIP_EIGEN3_BUILD +) +cd %DOWNLOAD_HOME% +IF NOT EXIST %LIB_NAME% ( + IF NOT EXIST %LIB_NAME%.zip %CURL_EXE% -# %LIB_URL% > %LIB_NAME%.zip + %UNZIP_EXE% %LIB_NAME%.zip + move eigen-eigen-* eigen3 +) + +set CHK_LIB=%DOWNLOAD_HOME%\%LIB_NAME%\Eigen +IF NOT EXIST %CHK_LIB% goto MISSING_TARGET_END +:SKIP_EIGEN3_BUILD + :TO_VISUAL_STUDIO_SETUP_BUILD echo. echo ##################################################### @@ -1079,8 +1119,10 @@ set CHK_LIB=%BUILD_HOME%\geoda_setup.exe IF NOT EXIST %CHK_LIB% goto MISSING_TARGET_END if %GDA_BUILD% == BUILD_32 ( move /Y %BUILD_HOME%\geoda_setup.exe %BUILD_HOME%\GeoDa-%GDA_VERSION%-Windows-32bit.exe + move %BUILD_HOME%\GeoDa-%GDA_VERSION%-Windows-32bit.exe \\Mac\Dropbox ) else ( move /Y %BUILD_HOME%\geoda_setup.exe %BUILD_HOME%\GeoDa-%GDA_VERSION%-Windows-64bit.exe + move %BUILD_HOME%\GeoDa-%GDA_VERSION%-Windows-64bit.exe \\Mac\Dropbox ) :SKIP_PACKAGE_BUILD diff --git a/BuildTools/windows/build_watch.py b/BuildTools/windows/build_watch.py new file mode 100644 index 000000000..0708f37c6 --- /dev/null +++ b/BuildTools/windows/build_watch.py @@ -0,0 +1,22 @@ +import os, time, sys, subprocess + + +path_to_watch = sys.argv[1] + +before = os.path.getmtime(path_to_watch) + +while 1: + time.sleep (10) + after = os.path.getmtime(path_to_watch) + if after != before: + f = open(path_to_watch, 'r') + version = f.readline().strip() + f.close() + print version + # call build script + if os.name == 'nt': + subprocess.check_call("call_git.bat") + subprocess.check_call("build.bat") + else: + subprocess.Popen(["./auto_build.10.7.sh", version, "10", "1"]) + before = after diff --git a/BuildTools/windows/call_git.bat b/BuildTools/windows/call_git.bat new file mode 100644 index 000000000..13e74ee51 --- /dev/null +++ b/BuildTools/windows/call_git.bat @@ -0,0 +1 @@ +c:\Users\xun\AppData\Local\GitHub\PortableGit_f02737a78695063deace08e96d5042710d3e32db\cmd\git.exe pull \ No newline at end of file diff --git a/DataViewer/DataSource.cpp b/DataViewer/DataSource.cpp index 02fd668d8..73a38b373 100644 --- a/DataViewer/DataSource.cpp +++ b/DataViewer/DataSource.cpp @@ -408,6 +408,12 @@ wxString FileDataSource::GetOGRConnectStr() error_msg << _("Data source (") << file_repository_path << _(") doesn't exist. Please check the project configuration file."); throw GdaException(error_msg.mb_str()); } + +wxString FileDataSource::ToString() +{ + return GetOGRConnectStr(); +} + //------------------------------------------------------------------------------ // WebServiceDataSource member functions //------------------------------------------------------------------------------ @@ -475,6 +481,11 @@ wxString WebServiceDataSource::GetJsonStr() return wxString(json_str); } + +wxString WebServiceDataSource::ToString() +{ + return GetOGRConnectStr(); +} //------------------------------------------------------------------------------ // DBDataSource member functions //------------------------------------------------------------------------------ @@ -557,6 +568,37 @@ wxString DBDataSource::GetOGRConnectStr() return ogr_conn_str; } +wxString DBDataSource::ToString() +{ + wxString str_temp; + + + if (ds_type == GdaConst::ds_oci) { + // Oracle examples + //ds_str = "OCI:oracle/abcd1234@ORA11"; + //ds_str = "OCI:oracle/abcd1234@129.219.93.200:1521/xe"; + //ds_str = "OCI:oracle/oracle@192.168.56.101:1521/xe:table1,table2"; + str_temp << GdaConst::datasrc_type_to_prefix[ds_type]; + str_temp << db_name; + + } else if (ds_type == GdaConst::ds_postgresql) { + // postgis: PG:"dbname='databasename' host='addr' port='5432' + // user='x' password='y' + str_temp << GdaConst::datasrc_type_to_prefix[ds_type]; + str_temp << "dbname='" << db_name << "' "; + + } else if (ds_type == GdaConst::ds_esri_arc_sde) { + // ArcSDE: SDE:server,instance,database,username,password[,layer] + str_temp << GdaConst::datasrc_type_to_prefix[ds_type]; + + } else if (ds_type == GdaConst::ds_mysql) { + // MYSQL:dbname,host=server,user=root,password=pwd,port=3306,table=test + str_temp << GdaConst::datasrc_type_to_prefix[ds_type]; + } + + return str_temp; +} + void DBDataSource::ReadPtree(const ptree& pt, const wxString& proj_path) { diff --git a/DataViewer/DataSource.h b/DataViewer/DataSource.h index eff3bc9f0..9f7e21514 100644 --- a/DataViewer/DataSource.h +++ b/DataViewer/DataSource.h @@ -70,6 +70,8 @@ class IDataSource : public PtreeInterface { virtual wxString GetJsonStr() = 0; + virtual wxString ToString() = 0; + /** * Read subtree starting from passed in node pt. * @param const ptree& pt: a subtree of "datasource" node @@ -161,6 +163,9 @@ class FileDataSource : public IDataSource { * Return file path. */ wxString GetFilePath() { return file_repository_path;} + + + virtual wxString ToString(); }; /** @@ -199,6 +204,8 @@ class WebServiceDataSource: public IDataSource{ virtual wxString GetJsonStr(); wxString GetURL() { return webservice_url; } + + virtual wxString ToString(); }; @@ -241,6 +248,8 @@ class DBDataSource: public IDataSource{ virtual wxString GetJsonStr(); + virtual wxString ToString(); + wxString GetDBName() { return db_name; } wxString GetDBHost() { return db_host; } wxString GetDBPort() { return db_port; } diff --git a/DataViewer/MergeTableDlg.cpp b/DataViewer/MergeTableDlg.cpp index 55163f9c7..1edb671d3 100644 --- a/DataViewer/MergeTableDlg.cpp +++ b/DataViewer/MergeTableDlg.cpp @@ -478,7 +478,7 @@ void MergeTableDlg::AppendNewField(wxString field_name, if ( ftype == GdaConst::string_type ) { int add_pos = table_int->InsertCol(ftype, field_name); vector data(n_rows); - vector undefs(n_rows); + vector undefs(n_rows, false); for (int i=0; i=0) { - data[i] = wxString(merge_layer_proxy->GetValueAt(import_rid,fid)); - undefs[i] = false; + if (merge_layer_proxy->IsUndefined(import_rid,fid)) { + data[i] = wxEmptyString; + undefs[i] = true; + } else { + data[i] = wxString(merge_layer_proxy->GetValueAt(import_rid,fid)); + undefs[i] = false; + } } else { data[i] = wxEmptyString; undefs[i] = true; @@ -508,9 +513,14 @@ void MergeTableDlg::AppendNewField(wxString field_name, import_rid = rowid_map.find(i) == rowid_map.end() ? -1 : rowid_map[i]; } if (import_rid >=0 ) { - OGRFeature* feat = merge_layer_proxy->GetFeatureAt(import_rid); - data[i] = feat->GetFieldAsInteger64(fid); - undefs[i] = false; + if (merge_layer_proxy->IsUndefined(import_rid,fid)) { + data[i] = 0; + undefs[i] = true; + } else { + OGRFeature* feat = merge_layer_proxy->GetFeatureAt(import_rid); + data[i] = feat->GetFieldAsInteger64(fid); + undefs[i] = false; + } } else { data[i] = 0; undefs[i] = true; @@ -529,9 +539,14 @@ void MergeTableDlg::AppendNewField(wxString field_name, import_rid = rowid_map.find(i) == rowid_map.end() ? -1 : rowid_map[i]; } if (import_rid >=0 ) { - OGRFeature* feat = merge_layer_proxy->GetFeatureAt(import_rid); - data[i] = feat->GetFieldAsDouble(fid); - undefs[i] = false; + if (merge_layer_proxy->IsUndefined(import_rid,fid)) { + data[i] = 0.0; + undefs[i] = true; + } else { + OGRFeature* feat = merge_layer_proxy->GetFeatureAt(import_rid); + data[i] = feat->GetFieldAsDouble(fid); + undefs[i] = false; + } } else { data[i] = 0.0; undefs[i] = true; diff --git a/DataViewer/TimeState.h b/DataViewer/TimeState.h index 777e467d9..309b9760b 100644 --- a/DataViewer/TimeState.h +++ b/DataViewer/TimeState.h @@ -45,6 +45,7 @@ class TimeState { wxString GetCurrTimeString(); void SetCurrTime(int t); int GetTimeSteps(); + wxString GetTimeString(int idx) { return time_ids[idx];} void SetTimeIds(const std::vector& time_ids); diff --git a/DialogTools/AutoUpdateDlg.cpp b/DialogTools/AutoUpdateDlg.cpp index 61dad3336..29ce667b4 100644 --- a/DialogTools/AutoUpdateDlg.cpp +++ b/DialogTools/AutoUpdateDlg.cpp @@ -97,6 +97,7 @@ string ReadUrlContent(const char* url) bool DownloadUrl(const char* url, const char* filepath) { + wxLogMessage("AutoUpdate::DownloadUrl()"); FILE* fp; CURL* curl = curl_easy_init(); CURLcode res; @@ -125,6 +126,7 @@ bool DownloadUrl(const char* url, const char* filepath) // return Version or empty string wxString AutoUpdate::CheckUpdate() { + wxLogMessage("AutoUpdate::CheckUpdate()"); bool isTestMode = false; std::vector test_mode = OGRDataAdapter::GetInstance().GetHistory("test_mode"); if (!test_mode.empty() && test_mode[0] == "yes") { @@ -143,7 +145,7 @@ wxString AutoUpdate::CheckUpdate() } wxString version = tokenizer.GetNextToken(); - wxString version_regex = "^[0-9]\\.[0-9]\\.[0-9]+(\\.[0-9]+)?$"; + wxString version_regex = "^[0-9]\\.[0-9]+\\.[0-9]+(\\.[0-9]+)?$"; wxRegEx regex; regex.Compile(version_regex); if (!regex.Matches(version)) { @@ -199,6 +201,7 @@ wxString AutoUpdate::CheckUpdate() wxString AutoUpdate::GetVersion(wxString checklist) { + wxLogMessage("AutoUpdate::GetVersion()"); wxStringTokenizer tokenizer; tokenizer.SetString(checklist, "\r\n"); @@ -215,6 +218,7 @@ wxString AutoUpdate::GetVersion(wxString checklist) wxString AutoUpdate::GetUpdateUrl(wxString checklist) { + wxLogMessage("AutoUpdate::GetUpdateUrl()"); wxStringTokenizer tokenizer; tokenizer.SetString(checklist, "\r\n"); @@ -236,6 +240,7 @@ wxString AutoUpdate::GetUpdateUrl(wxString checklist) wxString AutoUpdate::GetUpdateMsg(wxString checklist) { + wxLogMessage("AutoUpdate::GetUpdateMsg()"); wxStringTokenizer tokenizer; tokenizer.SetString(checklist, "\r\n"); @@ -260,6 +265,7 @@ wxString AutoUpdate::GetUpdateMsg(wxString checklist) wxString AutoUpdate::GetCheckList() { + wxLogMessage("AutoUpdate::GetCheckList()"); bool isTestMode = false; std::vector test_mode = OGRDataAdapter::GetInstance().GetHistory("test_mode"); if (!test_mode.empty() && test_mode[0] == "yes") { @@ -370,6 +376,7 @@ AutoUpdateDlg::AutoUpdateDlg(wxWindow* parent, void AutoUpdateDlg::OnOkClick( wxCommandEvent& event ) { + wxLogMessage("AutoUpdate::OnOkClick()"); bool success = false; try { @@ -436,7 +443,7 @@ void AutoUpdateDlg::OnOkClick( wxCommandEvent& event ) // should skip unless some criticle file if (filelen == size && - file_name.EndsWith("cache.sqlite") ) + !file_name.EndsWith("cache.sqlite") ) { success = true; @@ -508,5 +515,6 @@ void AutoUpdateDlg::OnSkipClick( wxCommandEvent& event ) } wxString AutoUpdateDlg::GetVersion() { + wxLogMessage("AutoUpdate::GetVersion()"); return version; } diff --git a/DialogTools/CatClassifDlg.cpp b/DialogTools/CatClassifDlg.cpp index da42bd587..6c07cfd4f 100644 --- a/DialogTools/CatClassifDlg.cpp +++ b/DialogTools/CatClassifDlg.cpp @@ -817,7 +817,7 @@ useScientificNotation(_useScientificNotation) ResetValuesToDefault(); EnableControls(false); } - + SetBackgroundColour(*wxWHITE); table_state->registerObserver(this); GetSizer()->Fit(this); GetSizer()->SetSizeHints(this); @@ -2210,9 +2210,10 @@ void CatClassifPanel::SetBrkTxtFromVec(const std::vector& brks) for (int i=0, sz=brks.size(); iChangeValue(GenUtils::DblToStr(brks[i])); } - if (IsAutomaticLabels()) { + if (IsAutomaticLabels() && + GetBreakValsTypeChoice() != CatClassification::unique_values_break_vals) { std::vector new_labels; - CatClassification::CatLabelsFromBreaks(brks, new_labels, useScientificNotation); + CatClassification::CatLabelsFromBreaks(brks, new_labels, cc_data.cat_classif_type, useScientificNotation); int sz = new_labels.size(); cc_data.names.resize(sz); for (int i=0; ids_file_path = fn; - wxCommandEvent ev; - m_pOwner->OnOkClick(ev); + //wxCommandEvent ev; + //m_pOwner->OnOkClick(ev); + m_pOwner->TriggerOKClick(); } return true; @@ -416,7 +417,6 @@ ConnectDatasourceDlg::ConnectDatasourceDlg(wxWindow* parent, const wxPoint& pos, InitSamplePanel(); } else { - recent_nb->Hide(); } m_drag_drop_box->SetDropTarget(new DnDFile(this)); @@ -484,7 +484,7 @@ void ConnectDatasourceDlg::AddRecentItem(wxBoxSizer* sizer, wxScrolledWindow* sc #ifdef __WIN32__ int pad_remove_btn = 10; - wxButton *remove = new wxButton(scrl, id, wxT("Delete"), wxDefaultPosition, wxSize(30,18), wxBORDER_NONE|wxBU_EXACTFIT); + wxButton *remove = new wxButton(scrl, id, wxT("Delete"), wxDefaultPosition, wxSize(36,18), wxBORDER_NONE|wxBU_EXACTFIT); remove->SetFont(*GdaConst::extra_small_font); #else int pad_remove_btn = 0; @@ -603,8 +603,16 @@ void ConnectDatasourceDlg::InitRecentPanel() void ConnectDatasourceDlg::CreateControls() { + if (showRecentPanel) { + wxXmlResource::Get()->LoadFrame(this, GetParent(),"IDD_CONNECT_DATASOURCE"); + recent_nb = XRCCTRL(*this, "IDC_DS_LIST", wxNotebook); + recent_nb->SetSelection(1); + recent_panel = XRCCTRL(*this, "dsRecentListSizer", wxPanel); + smaples_panel = XRCCTRL(*this, "dsSampleList", wxPanel); + } else { + wxXmlResource::Get()->LoadFrame(this, GetParent(),"IDD_CONNECT_DATASOURCE_SIMPLE"); + } - bool test = wxXmlResource::Get()->LoadFrame(this, GetParent(),"IDD_CONNECT_DATASOURCE"); FindWindow(XRCID("wxID_OK"))->Enable(true); // init db_table control that is unique in this class m_drag_drop_box = XRCCTRL(*this, "IDC_DRAG_DROP_BOX",wxStaticBitmap); @@ -616,14 +624,10 @@ void ConnectDatasourceDlg::CreateControls() m_database_table->Hide(); // don't need this XRCCTRL(*this, "IDC_STATIC_DB_TABLE", wxStaticText)->Hide(); - recent_nb = XRCCTRL(*this, "IDC_DS_LIST", wxNotebook); - - recent_nb->SetSelection(1); - recent_panel = XRCCTRL(*this, "dsRecentListSizer", wxPanel); - smaples_panel = XRCCTRL(*this, "dsSampleList", wxPanel); - noshow_recent = XRCCTRL(*this, "IDC_NOSHOW_RECENT_SAMPLES", wxCheckBox); + m_web_choice = XRCCTRL(*this, "ID_CDS_WEB_CHOICE", wxChoice); + noshow_recent = XRCCTRL(*this, "IDC_NOSHOW_RECENT_SAMPLES", wxCheckBox); noshow_recent->Bind(wxEVT_CHECKBOX, &ConnectDatasourceDlg::OnNoShowRecent, this); if (!showRecentPanel) { noshow_recent->Hide(); @@ -639,9 +643,9 @@ void ConnectDatasourceDlg::CreateControls() void ConnectDatasourceDlg::OnNoShowRecent( wxCommandEvent& event) { - recent_nb->Hide(); - noshow_recent->Hide(); - GetSizer()->Fit(this); + //recent_nb->Hide(); + //noshow_recent->Hide(); + //GetSizer()->Fit(this); showRecentPanel = false; GdaConst::show_recent_sample_connect_ds_dialog = false; @@ -702,6 +706,12 @@ void ConnectDatasourceDlg::OnLookupCartoDBTableBtn( wxCommandEvent& event ) } +void ConnectDatasourceDlg::TriggerOKClick() +{ + wxCommandEvent evt = wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ); + AddPendingEvent(evt); +} + /** * This function handles the event of user click OK button. * When user chooses a data source, validate it first, @@ -710,7 +720,7 @@ void ConnectDatasourceDlg::OnLookupCartoDBTableBtn( wxCommandEvent& event ) */ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) { - LOG_MSG("Entering ConnectDatasourceDlg::OnOkClick"); + wxLogMessage("Entering ConnectDatasourceDlg::OnOkClick"); try { // Open GeoDa project file direclty if (ds_file_path.GetExt().Lower() == "gda") { @@ -719,10 +729,14 @@ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) gda_frame->OpenProject(ds_file_path.GetFullPath()); wxLogMessage(_("Open project file:") + ds_file_path.GetFullPath()); try { + Project* project = gda_frame->GetProject(); + wxString layer_name; + if (project) layer_name = project->layername; + RecentDatasource recent_ds; - recent_ds.Add(ds_file_path.GetFullPath(), ds_file_path.GetFullPath(), ""); + recent_ds.Add(ds_file_path.GetFullPath(), ds_file_path.GetFullPath(), layer_name); } catch( GdaException ex) { - LOG_MSG(ex.what()); + wxLogMessage(ex.what()); } EndDialog(); } @@ -779,7 +793,7 @@ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) if (layer_name.IsEmpty()) layer_name = layername; - wxLogMessage(_("Open Datasource:") + datasource->GetOGRConnectStr()); + wxLogMessage(_("Open Datasource:") + datasource->ToString()); wxLogMessage(_("Open Layer:") + layername); SaveRecentDataSource(datasource, layer_name); @@ -798,7 +812,7 @@ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) wxMessageDialog dlg(this, msg , "Error", wxOK | wxICON_ERROR); dlg.ShowModal(); } - LOG_MSG("Exiting ConnectDatasourceDlg::OnOkClick"); + wxLogMessage("Exiting ConnectDatasourceDlg::OnOkClick"); } /** @@ -808,6 +822,7 @@ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) */ IDataSource* ConnectDatasourceDlg::CreateDataSource() { + wxLogMessage("ConnectDatasourceDlg::CreateDataSource()"); if (datasource) { delete datasource; datasource = NULL; @@ -967,18 +982,19 @@ IDataSource* ConnectDatasourceDlg::CreateDataSource() void ConnectDatasourceDlg::SaveRecentDataSource(IDataSource* ds, const wxString& layer_name) { - LOG_MSG("Entering ConnectDatasourceDlg::SaveRecentDataSource"); + wxLogMessage("Entering ConnectDatasourceDlg::SaveRecentDataSource"); try { RecentDatasource recent_ds; recent_ds.Add(ds, layer_name); } catch( GdaException ex) { LOG_MSG(ex.what()); } - LOG_MSG("Exiting ConnectDatasourceDlg::SaveRecentDataSource"); + wxLogMessage("Exiting ConnectDatasourceDlg::SaveRecentDataSource"); } void ConnectDatasourceDlg::InitSamplePanel() { + wxLogMessage("ConnectDatasourceDlg::InitSamplePanel()"); wxBoxSizer* sizer; sizer = new wxBoxSizer( wxVERTICAL ); @@ -1081,6 +1097,7 @@ void ConnectDatasourceDlg::AddSampleItem(wxBoxSizer* sizer, void ConnectDatasourceDlg::OnSample(wxCommandEvent& event) { + wxLogMessage("ConnectDatasourceDlg::OnSample()"); int xrcid = event.GetId(); int sample_idx = xrcid - base_xrcid_sample_thumb; diff --git a/DialogTools/ConnectDatasourceDlg.h b/DialogTools/ConnectDatasourceDlg.h index 98acca3ed..864c18f00 100644 --- a/DialogTools/ConnectDatasourceDlg.h +++ b/DialogTools/ConnectDatasourceDlg.h @@ -97,9 +97,10 @@ class ConnectDatasourceDlg: public DatasourceDlg bool showRecentPanel=GdaConst::show_recent_sample_connect_ds_dialog, int dialogType = 0); virtual ~ConnectDatasourceDlg(); - - void CreateControls(); + + void TriggerOKClick(); virtual void OnOkClick( wxCommandEvent& event ); + void CreateControls(); void OnLookupWSLayerBtn( wxCommandEvent& event ); void OnLookupDSTableBtn( wxCommandEvent& event ); void OnLookupCartoDBTableBtn( wxCommandEvent& event ); diff --git a/DialogTools/CsvFieldConfDlg.cpp b/DialogTools/CsvFieldConfDlg.cpp index 09153c00e..532c465c3 100644 --- a/DialogTools/CsvFieldConfDlg.cpp +++ b/DialogTools/CsvFieldConfDlg.cpp @@ -222,6 +222,7 @@ CsvFieldConfDlg::~CsvFieldConfDlg() void CsvFieldConfDlg::PrereadCSV(int HEADERS) { + wxLogMessage("CsvFieldConfDlg::PrereadCSV()"); const char* pszDsPath = GET_ENCODED_FILENAME(filepath); GDALDataset* poDS; @@ -322,13 +323,16 @@ void CsvFieldConfDlg::PrereadCSV(int HEADERS) void CsvFieldConfDlg::OnFieldSelected(wxCommandEvent& event) { + wxLogMessage("CsvFieldConfDlg::OnFieldSelected()"); fieldGrid->SaveEditControlValue(); fieldGrid->EnableCellEditControl(false); - + + int n_types = types.size(); int n_cols = col_names.size(); for (int r=0; r < n_cols; r++ ) { wxString type = fieldGrid->GetCellValue(r, 1); - types[r] = type; + if (r < n_types) + types[r] = type; } WriteCSVT(); @@ -342,6 +346,7 @@ void CsvFieldConfDlg::OnFieldSelected(wxCommandEvent& event) void CsvFieldConfDlg::UpdateFieldGrid( ) { + wxLogMessage("CsvFieldConfDlg::UpdateFieldGrid()"); fieldGrid->BeginBatch(); fieldGrid->ClearGrid(); @@ -371,6 +376,7 @@ void CsvFieldConfDlg::UpdateFieldGrid( ) void CsvFieldConfDlg::UpdateXYcombox( ) { + wxLogMessage("CsvFieldConfDlg::UpdateXYcombox()"); lat_box->Clear(); lng_box->Clear(); @@ -419,6 +425,7 @@ void CsvFieldConfDlg::UpdateXYcombox( ) void CsvFieldConfDlg::UpdatePreviewGrid( ) { + wxLogMessage("CsvFieldConfDlg::UpdatePreviewGrid()"); previewGrid->BeginBatch(); previewGrid->ClearGrid(); @@ -470,6 +477,7 @@ void CsvFieldConfDlg::UpdatePreviewGrid( ) void CsvFieldConfDlg::ReadCSVT() { + wxLogMessage("CsvFieldConfDlg::ReadCSVT()"); wxString csvt_path = filepath + "t"; if (wxFileExists(csvt_path)) { @@ -480,9 +488,10 @@ void CsvFieldConfDlg::ReadCSVT() // read the first line wxString str = csvt_file.GetFirstLine(); wxStringTokenizer tokenizer(str, ","); - + + int max_n_types = types.size(); int idx = 0; - while ( tokenizer.HasMoreTokens() ) + while ( tokenizer.HasMoreTokens() && idx < max_n_types) { wxString token = tokenizer.GetNextToken().Upper(); if (token.Contains("INTEGER64")) { @@ -491,9 +500,9 @@ void CsvFieldConfDlg::ReadCSVT() types[idx] = "Integer"; } else if (token.Contains("REAL")) { types[idx] = "Real"; - } else if (token.Contains("STRING")) { + } else { types[idx] = "String"; - } + } idx += 1; } } @@ -501,6 +510,7 @@ void CsvFieldConfDlg::ReadCSVT() void CsvFieldConfDlg::WriteCSVT() { + wxLogMessage("CsvFieldConfDlg::WriteCSVT()"); wxString lat_col_name = lat_box->GetValue(); wxString lng_col_name = lng_box->GetValue(); @@ -535,6 +545,7 @@ void CsvFieldConfDlg::WriteCSVT() void CsvFieldConfDlg::OnOkClick( wxCommandEvent& event ) { + wxLogMessage("CsvFieldConfDlg::OnOkClick()"); WriteCSVT(); GdaConst::gda_ogr_csv_header = HEADERS; @@ -543,11 +554,13 @@ void CsvFieldConfDlg::OnOkClick( wxCommandEvent& event ) void CsvFieldConfDlg::OnCancelClick( wxCommandEvent& event ) { + wxLogMessage("CsvFieldConfDlg::OnCancelClick()"); EndDialog(wxID_CANCEL); } void CsvFieldConfDlg::OnSetupLocale( wxCommandEvent& event ) { + wxLogMessage("CsvFieldConfDlg::OnSetupLocale()"); bool need_reopen = false; LocaleSetupDlg localeDlg(this, need_reopen); localeDlg.ShowModal(); @@ -558,6 +571,7 @@ void CsvFieldConfDlg::OnSetupLocale( wxCommandEvent& event ) void CsvFieldConfDlg::OnHeaderCmbClick( wxCommandEvent& event ) { + wxLogMessage("CsvFieldConfDlg::OnHeaderCmbClick()"); HEADERS = (int)(event.GetSelection()); PrereadCSV(HEADERS); @@ -570,6 +584,7 @@ void CsvFieldConfDlg::OnHeaderCmbClick( wxCommandEvent& event ) void CsvFieldConfDlg::OnSampleSpinClick( wxCommandEvent& event ) { + wxLogMessage("CsvFieldConfDlg::OnSampleSpinClick()"); n_max_rows = prev_spin->GetValue(); UpdatePreviewGrid(); } diff --git a/DialogTools/FieldNameCorrectionDlg.cpp b/DialogTools/FieldNameCorrectionDlg.cpp index 77952a0af..3a7f030df 100644 --- a/DialogTools/FieldNameCorrectionDlg.cpp +++ b/DialogTools/FieldNameCorrectionDlg.cpp @@ -384,7 +384,7 @@ wxString ScrolledWidgetsPane::RemoveIllegalChars(const wxString& old_name) return old_name; } wxString illegal_regex = GdaConst::datasrc_field_illegal_regex[ds_type]; - if (illegal_regex.empty()) return wxEmptyString; + if (illegal_regex.empty()) return old_name; wxString new_name = old_name; wxRegEx regex; @@ -440,7 +440,8 @@ bool ScrolledWidgetsPane::IsFieldNameValid(const wxString& col_name) } int field_len = GdaConst::datasrc_field_lens[ds_type]; - if ( field_len < col_name.length() ) return false; + if ( field_len == 0 || field_len < col_name.length() ) + return false; if (GdaConst::datasrc_field_regex.find(ds_type) == GdaConst::datasrc_field_regex.end() ) diff --git a/DialogTools/HClusterDlg.cpp b/DialogTools/HClusterDlg.cpp new file mode 100644 index 000000000..93af3574b --- /dev/null +++ b/DialogTools/HClusterDlg.cpp @@ -0,0 +1,1059 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "../Explore/MapNewView.h" +#include "../Project.h" +#include "../Algorithms/cluster.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" + +#include "SaveToTableDlg.h" +#include "HClusterDlg.h" + +BEGIN_EVENT_TABLE( HClusterDlg, wxDialog ) +EVT_CLOSE( HClusterDlg::OnClose ) +END_EVENT_TABLE() + + +HClusterDlg::HClusterDlg(wxFrame* parent_s, Project* project_s) +: frames_manager(project_s->GetFramesManager()), +wxDialog(NULL, -1, _("Hierarchical Clustering Settings"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +{ + wxLogMessage("Open HClusterDlg."); + + SetMinSize(wxSize(860,640)); + + parent = parent_s; + project = project_s; + + highlight_state = project->GetHighlightState(); + + bool init_success = Init(); + + if (init_success == false) { + EndDialog(wxID_CANCEL); + } else { + CreateControls(); + } + + frames_manager->registerObserver(this); + highlight_state->registerObserver(this); +} + +HClusterDlg::~HClusterDlg() +{ + frames_manager->removeObserver(this); + highlight_state->removeObserver(this); +} + +void HClusterDlg::Highlight(int id) +{ + vector& hs = highlight_state->GetHighlight(); + + for (int i=0; iSetEventType(HLStateInt::delta); + highlight_state->notifyObservers(this); +} + +bool HClusterDlg::Init() +{ + if (project == NULL) + return false; + + table_int = project->GetTableInt(); + if (table_int == NULL) + return false; + + + table_int->GetTimeStrings(tm_strs); + + return true; +} + +void HClusterDlg::CreateControls() +{ + wxPanel *panel = new wxPanel(this); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + wxStaticText* st = new wxStaticText (panel, wxID_ANY, _("Select Variables"), + wxDefaultPosition, wxDefaultSize); + + wxListBox* box = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(250,250), 0, NULL, + wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); + wxCheckBox* cbox = new wxCheckBox(panel, wxID_ANY, _("Use Geometric Centroids")); + wxStaticBoxSizer *hbox0 = new wxStaticBoxSizer(wxVERTICAL, panel, "Input:"); + hbox0->Add(st, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); + hbox0->Add(box, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); + hbox0->Add(cbox, 0, wxLEFT | wxRIGHT, 10); + + if (project->IsTableOnlyProject()) { + cbox->Disable(); + } + // Parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(5,2,5,0); + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Transformation:"), + wxDefaultPosition, wxSize(120,-1)); + const wxString _transform[3] = {"Raw", "Demean", "Standardize"}; + combo_tranform = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(120,-1), 3, _transform); + combo_tranform->SetSelection(2); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(combo_tranform, 1, wxEXPAND); + + wxStaticText* st12 = new wxStaticText(panel, wxID_ANY, _("Method:"), + wxDefaultPosition, wxSize(120,-1)); + wxString choices12[] = {"Single-linkage","Complete-linkage","Average-linkage","Centroid-linkage"}; + wxChoice* box12 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 4, choices12); + box12->SetSelection(1); + gbox->Add(st12, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box12, 1, wxEXPAND); + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:"), + wxDefaultPosition, wxSize(120,-1)); + wxString choices13[] = {"Distance", "--Euclidean", "--City-block", "Correlation", "--Pearson","--Absolute Pearson", "Cosine", "--Signed", "--Un-signed", "Rank", "--Spearman", "--Kendal"}; + wxChoice* box13 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(120,-1), 12, choices13); + box13->SetSelection(1); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box13, 1, wxEXPAND); + + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, "Parameters:"); + hbox->Add(gbox, 1, wxEXPAND); + + + // Output + wxFlexGridSizer* gbox1 = new wxFlexGridSizer(5,2,5,0); + + wxString choices[] = {"2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"}; + wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("Number of Clusters:"), + wxDefaultPosition, wxDefaultSize); + wxChoice* box1 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 19, choices); + box1->SetSelection(3); + gbox1->Add(st1, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(box1, 1, wxEXPAND); + + + wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:"), + wxDefaultPosition, wxDefaultSize); + wxTextCtrl *box3 = new wxTextCtrl(panel, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(120,-1)); + gbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(box3, 1, wxEXPAND); + + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, "Output:"); + hbox1->Add(gbox1, 1, wxEXPAND); + + // Buttons + wxButton *okButton = new wxButton(panel, wxID_OK, wxT("Run"), wxDefaultPosition, + wxSize(70, 30)); + saveButton = new wxButton(panel, wxID_SAVE, wxT("Save/Show Map"), wxDefaultPosition, wxDefaultSize); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, wxT("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 0, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(saveButton, 0, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 0, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox0, 1, wxEXPAND | wxALL, 10); + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox1, 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + + wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); + m_panel = new DendrogramPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(500,630)); + //m_panel->SetBackgroundColour(*wxWHITE); + vbox1->Add(m_panel, 1, wxEXPAND|wxALL,20); + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + container->Add(vbox1,1, wxEXPAND | wxALL); + + + panel->SetSizerAndFit(container); + + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(panel, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Content + InitVariableCombobox(box); + combo_n = box1; + m_textbox = box3; + combo_var = box; + m_use_centroids = cbox; + //m_iterations = box11; + m_method = box12; + m_distance = box13; + + + // Events + okButton->Bind(wxEVT_BUTTON, &HClusterDlg::OnOK, this); + saveButton->Bind(wxEVT_BUTTON, &HClusterDlg::OnSave, this); + + closeButton->Bind(wxEVT_BUTTON, &HClusterDlg::OnClickClose, this); + m_distance->Connect(wxEVT_CHOICE, + wxCommandEventHandler(HClusterDlg::OnDistanceChoice), + NULL, this); + combo_n->Connect(wxEVT_CHOICE, + wxCommandEventHandler(HClusterDlg::OnClusterChoice), + NULL, this); + + saveButton->Disable(); + combo_n->Disable(); +} + +void HClusterDlg::OnSave(wxCommandEvent& event ) +{ + wxString field_name = m_textbox->GetValue(); + if (field_name.IsEmpty()) { + wxString err_msg = _("Please enter a field name for saving clustering results."); + wxMessageDialog dlg(NULL, err_msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + + // save to table + int time=0; + int col = table_int->FindColId(field_name); + if ( col == wxNOT_FOUND) { + int col_insert_pos = table_int->GetNumberCols(); + int time_steps = 1; + int m_length_val = GdaConst::default_dbf_long_len; + int m_decimals_val = 0; + + col = table_int->InsertCol(GdaConst::long64_type, field_name, col_insert_pos, time_steps, m_length_val, m_decimals_val); + } else { + // detect if column is integer field, if not raise a warning + if (table_int->GetColType(col) != GdaConst::long64_type ) { + wxString msg = _("This field name already exists (non-integer type). Please input a unique name."); + wxMessageDialog dlg(this, msg, "Warning", wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return; + } + } + + if (col > 0) { + table_int->SetColData(col, time, clusters); + table_int->SetColUndefined(col, time, clusters_undef); + } + + // show a cluster map + if (project->IsTableOnlyProject()) { + return; + } + std::vector new_var_info; + std::vector new_col_ids; + new_col_ids.resize(1); + new_var_info.resize(1); + new_col_ids[0] = col; + new_var_info[0].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[0].name = field_name; + new_var_info[0].is_time_variant = table_int->IsColTimeVariant(col); + table_int->GetMinMaxVals(new_col_ids[0], new_var_info[0].min, new_var_info[0].max); + new_var_info[0].sync_with_global_time = new_var_info[0].is_time_variant; + new_var_info[0].fixed_scale = true; + + + MapFrame* nf = new MapFrame(parent, project, + new_var_info, new_col_ids, + CatClassification::unique_values, + MapCanvas::no_smoothing, 4, + boost::uuids::nil_uuid(), + wxDefaultPosition, + GdaConst::map_default_size); + +} + +void HClusterDlg::OnDistanceChoice(wxCommandEvent& event) +{ + + if (m_distance->GetSelection() == 0) { + m_distance->SetSelection(1); + } else if (m_distance->GetSelection() == 3) { + m_distance->SetSelection(4); + } else if (m_distance->GetSelection() == 6) { + m_distance->SetSelection(7); + } else if (m_distance->GetSelection() == 9) { + m_distance->SetSelection(10); + } +} + +void HClusterDlg::OnClusterChoice(wxCommandEvent& event) +{ + int sel_ncluster = combo_n->GetSelection() + 2; + + // update dendrogram + m_panel->UpdateCluster(sel_ncluster, clusters); +} + +void HClusterDlg::UpdateClusterChoice(int n, std::vector& _clusters) +{ + int sel = n - 2; + combo_n->SetSelection(sel); + for (int i=0; i col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + + var_box->InsertItems(items,0); +} + +void HClusterDlg::update(FramesManager* o) +{ +} + +void HClusterDlg::update(HLStateInt* o) +{ +} + +void HClusterDlg::OnClickClose(wxCommandEvent& event ) +{ + wxLogMessage("OnClickClose HClusterDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); +} + +void HClusterDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close HClusterDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + + + +void HClusterDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click HClusterDlg::OnOK"); + + int ncluster = combo_n->GetSelection() + 2; + + bool use_centroids = m_use_centroids->GetValue(); + + wxArrayInt selections; + combo_var->GetSelections(selections); + + int num_var = selections.size(); + if (num_var < 2 && !use_centroids) { + // show message box + wxString err_msg = _("Please select at least 2 variables."); + wxMessageDialog dlg(NULL, err_msg, "Info", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + col_ids.resize(num_var); + var_info.resize(num_var); + + for (int i=0; iGetString(idx)]; + + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data."), nm); wxMessageDialog dlg(NULL, err_msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + int tm = name_to_tm_id[combo_var->GetString(idx)]; + + col_ids[i] = col; + var_info[i].time = tm; + + // Set Primary GdaVarTools::VarInfo attributes + var_info[i].name = nm; + var_info[i].is_time_variant = table_int->IsColTimeVariant(idx); + + // var_info[i].time already set above + table_int->GetMinMaxVals(col_ids[i], var_info[i].min, var_info[i].max); + var_info[i].sync_with_global_time = var_info[i].is_time_variant; + var_info[i].fixed_scale = true; + } + + // Call function to set all Secondary Attributes based on Primary Attributes + GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); + + int rows = project->GetNumRecords(); + int columns = 0; + + std::vector data; // data[variable][time][obs] + data.resize(col_ids.size()); + for (int i=0; iGetColData(col_ids[i], data[i]); + } + // get columns (if time variables show) + for (int i=0; iGetSelection(); + char method = 's'; + char dist = 'e'; + + int transpose = 0; // row wise + int* clusterid = new int[rows]; + double* weight = new double[columns]; + for (int j=0; jGetSelection(); + char method_choices[] = {'s','m','a','c'}; + method = method_choices[method_sel]; + + + int dist_sel = m_distance->GetSelection(); + char dist_choices[] = {'e','e','b','c','c','a','u','u','x','s','s','k'}; + dist = dist_choices[dist_sel]; + + // init input_data[rows][cols] + double** input_data = new double*[rows]; + int** mask = new int*[rows]; + for (int i=0; i vals; + + for (int k=0; k< rows;k++) { // row + vals.push_back(data[i][j][k]); + } + + if (transform == 2) { + GenUtils::StandardizeData(vals); + } else if (transform == 1 ) { + GenUtils::DeviationFromMean(vals); + } + + for (int k=0; k< rows;k++) { // row + input_data[k][col_ii] = vals[k]; + } + col_ii += 1; + } + } + if (use_centroids) { + std::vector cents = project->GetCentroids(); + std::vector cent_xs; + std::vector cent_ys; + + for (int i=0; i< rows; i++) { + cent_xs.push_back(cents[i]->GetX()); + cent_ys.push_back(cents[i]->GetY()); + } + + if (transform == 2) { + GenUtils::StandardizeData(cent_xs ); + GenUtils::StandardizeData(cent_ys ); + } else if (transform == 1 ) { + GenUtils::DeviationFromMean(cent_xs ); + GenUtils::DeviationFromMean(cent_ys ); + } + + + for (int i=0; i< rows; i++) { + input_data[i][col_ii + 0] = cent_xs[i]; + input_data[i][col_ii + 1] = cent_ys[i]; + } + } + + GdaNode* htree = treecluster(rows, columns, input_data, mask, weight, transpose, dist, method, NULL); + + double cutoffDistance = cuttree (rows, htree, ncluster, clusterid); + + clusters.clear(); + clusters_undef.clear(); + + // clean memory + for (int i=0; i > cluster_ids(ncluster); + + for (int i=0; i < clusters.size(); i++) { + cluster_ids[ clusters[i] - 1 ].push_back(i); + } + + std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); + + for (int i=0; i < ncluster; i++) { + int c = i + 1; + for (int j=0; jSetup(htree, rows, ncluster, clusters, cutoffDistance); + // free(htree); should be freed in m_panel since drawing still needs it's instance + + + saveButton->Enable(); + combo_n->Enable(); +} + + + +IMPLEMENT_ABSTRACT_CLASS(DendrogramPanel, wxPanel) + +BEGIN_EVENT_TABLE(DendrogramPanel, wxPanel) +EVT_MOUSE_EVENTS(DendrogramPanel::OnEvent) +EVT_IDLE(DendrogramPanel::OnIdle) +END_EVENT_TABLE() + +DendrogramPanel::DendrogramPanel(wxWindow* parent, wxWindowID id, const wxPoint &pos, const wxSize &size) +: wxPanel(parent, id, pos, size) +{ + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + SetBackgroundColour(*wxWHITE); + Connect(wxEVT_PAINT, wxPaintEventHandler(DendrogramPanel::OnPaint)); + Connect(wxEVT_SIZE, wxSizeEventHandler(DendrogramPanel::OnSize)); + layer_bm = NULL; + root = NULL; + isResize = false; + isLeftDown = false; + isLeftMove = false; + split_line = NULL; + isMovingSplitLine= false; + isLayerValid = false; + maxDistance = 0.0; +} + +DendrogramPanel::~DendrogramPanel() +{ + for (int i=0; icontains(startPos)) { + isMovingSplitLine = true; + } + } + if (!isMovingSplitLine) { + // test end_nodes + for (int i=0;icontains(startPos)){ + // highlight i selected + wxWindow* parent = GetParent()->GetParent(); + HClusterDlg* dlg = static_cast(parent); + dlg->Highlight(end_nodes[i]->idx); + break; + } + } + } + } else if (event.Dragging()) { + if (isLeftDown) { + isLeftMove = true; + // moving + if (isMovingSplitLine && split_line) { + split_line->move(event.GetPosition(), startPos); + int x = split_line->getX(); + Refresh(); + OnSplitLineChange(x); + } + startPos = event.GetPosition(); + } + } else if (event.LeftUp()) { + if (isLeftMove) { + isLeftMove = false; + // stop move + isMovingSplitLine = false; + } else { + // only left click + } + isLeftDown = false; + } +} + +void DendrogramPanel::OnSize( wxSizeEvent& event) +{ + isResize = true; + event.Skip(); +} + +void DendrogramPanel::OnIdle(wxIdleEvent& event) +{ + if (isResize) { + isResize = false; + + wxSize sz = GetClientSize(); + if (layer_bm) { + delete layer_bm; + layer_bm = 0; + } + + double scale_factor = GetContentScaleFactor(); + layer_bm = new wxBitmap; + layer_bm->CreateScaled(sz.x, sz.y, 32, scale_factor); + + if (root) { + init(); + } + } + event.Skip(); +} + +void DendrogramPanel::OnPaint( wxPaintEvent& event ) +{ + + wxSize sz = GetClientSize(); + if (layer_bm && isLayerValid) { + wxMemoryDC dc; + dc.SelectObject(*layer_bm); + + wxPaintDC paint_dc(this); + paint_dc.Blit(0, 0, sz.x, sz.y, &dc, 0, 0); + if (split_line) { + split_line->draw(paint_dc); + } + dc.SelectObject(wxNullBitmap); + } else { + + wxAutoBufferedPaintDC dc(this); + dc.Clear(); + dc.SetPen(*wxTRANSPARENT_PEN); + wxBrush Brush; + Brush.SetColour(GdaConst::canvas_background_color); + dc.SetBrush(Brush); + dc.DrawRectangle(wxRect(0, 0, sz.x, sz.y)); + } + event.Skip(); +} + +void DendrogramPanel::Setup(GdaNode* _root, int _nelements, int _nclusters, std::vector& _clusters, double _cutoff) { + if (root && root != _root) { + // free previous tree in memory + free(root); + root = NULL; + } + root = _root; + nelements = _nelements; + clusters = _clusters; + nclusters = _nclusters; + cutoffDistance = _cutoff; + + color_vec.clear(); + CatClassification::PickColorSet(color_vec, CatClassification::unique_color_scheme, nclusters); + + // top Node will be nelements - 2 + accessed_node.clear(); + leaves = countLeaves(-(nelements-2) - 1); + level_node.clear(); + levels = countLevels(-(nelements-2) - 1, 0); + + maxDistance = root[nelements-2].distance; + + init(); +} + +void DendrogramPanel::OnSplitLineChange(int x) +{ + wxSize sz = this->GetClientSize(); + double hh = sz.y; + double ww = sz.x; + + cutoffDistance = maxDistance * (ww - margin - 30 - x) / (double) (ww - margin*2 - 30); + + for (int i = nelements-2; i >= 0; i--) + { + if (cutoffDistance >= root[i].distance) { + nclusters = nelements - i - 1; + break; + } + } + + if (nclusters > 20) nclusters = 20; + + int* clusterid = new int[nelements]; + cuttree (nelements, root, nclusters, clusterid); + + for (int i=0; i > cluster_ids(nclusters); + + for (int i=0; i < clusters.size(); i++) { + cluster_ids[ clusters[i] - 1 ].push_back(i); + } + + std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); + + for (int i=0; i < nclusters; i++) { + int c = i + 1; + for (int j=0; jGetParent(); + HClusterDlg* dlg = static_cast(parent); + dlg->UpdateClusterChoice(nclusters, clusters); + + color_vec.clear(); + CatClassification::PickColorSet(color_vec, CatClassification::unique_color_scheme, nclusters); + + init(); +} + +void DendrogramPanel::UpdateCluster(int _nclusters, std::vector& _clusters) +{ + nclusters = _nclusters; + + int* clusterid = new int[nelements]; + cutoffDistance = cuttree (nelements, root, nclusters, clusterid); + + for (int i=0; i > cluster_ids(nclusters); + + for (int i=0; i < clusters.size(); i++) { + cluster_ids[ clusters[i] - 1 ].push_back(i); + } + + std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); + + for (int i=0; i < nclusters; i++) { + int c = i + 1; + for (int j=0; jGetClientSize(); + double hh = sz.y; + double ww = sz.x; + + for (int i=0; iCreateScaled(ww, hh, 32, scale_factor); + } + + margin = 10.0; + + heightPerLeaf = (hh - margin - margin) / (double)leaves; + widthPerLevel = (ww - margin - margin)/ (double)levels; + + currentY = 10; + + wxMemoryDC dc; + dc.SelectObject(*layer_bm); + dc.Clear(); + dc.SetFont(*GdaConst::extra_small_font); + + int start_y = 0; + accessed_node.clear(); + doDraw(dc, -(nelements-2) - 1, start_y); + + // draw verticle line + if (!isMovingSplitLine) { + int v_start = ww - margin - 30 - (ww - 2*margin - 30) * cutoffDistance / maxDistance; + wxPoint v_p0(v_start, 0); + wxPoint v_p1(v_start, hh); + if (split_line == NULL) { + split_line = new DendroSplitLine(v_p0, v_p1); + } else { + split_line->update(v_p0, v_p1); + } + } + + + dc.SelectObject(wxNullBitmap); + + isLayerValid = true; + Refresh(); +} + +DendroColorPoint DendrogramPanel::doDraw(wxDC &dc, int node_idx, int y) +{ + + wxSize sz = this->GetClientSize(); + double hh = sz.y; + double ww = sz.x; + + if (node_idx >= 0) { + int x = ww - margin - 30; + + wxColour clr = color_vec[clusters[node_idx] -1]; + RectNode* end = new RectNode(node_idx, x, currentY, clr); + end->draw(dc); + end_nodes.push_back(end); + + int resultX = x; + int resultY = currentY; + + currentY += heightPerLeaf; + + wxPoint pt(resultX, resultY); + return DendroColorPoint(pt, clr); + } + + if (accessed_node.find(node_idx) != accessed_node.end()) { + // loop!!! + return DendroColorPoint(); + } + accessed_node[node_idx] = 1; + + DendroColorPoint cp0 = doDraw(dc, root[-node_idx -1].left, y); + DendroColorPoint cp1 = doDraw(dc, root[-node_idx -1].right, y+heightPerLeaf); + + wxPoint p0 = cp0.pt; + wxColour c0 = cp0.color; + + wxPoint p1 = cp1.pt; + wxColour c1 = cp1.color; + + //dc.DrawRectangle(wxRect(p0.x-2, p0.y-2, 4, 4)); + //dc.DrawRectangle(wxRect(p1.x-2, p1.y-2, 4, 4)); + + double dist = level_node[node_idx]; + int vx = ww - margin - 30 - (ww - 2*margin - 30) * dist / maxDistance ; + + wxPen pen0(c0); + dc.SetPen(pen0); + dc.DrawLine(vx, p0.y, p0.x, p0.y); + + wxPen pen1(c1); + dc.SetPen(pen1); + dc.DrawLine(vx, p1.y, p1.x, p1.y); + + if (c0 == c1) { + dc.DrawLine(vx, p0.y, vx, p1.y); + } else { + dc.SetPen(*wxBLACK_PEN); + dc.DrawLine(vx, p0.y, vx, p1.y); + } + dc.SetPen(*wxBLACK_PEN); + + wxPoint p(vx, p0.y+(p1.y - p0.y)/2); + + if (c0 == c1) { + return DendroColorPoint(p, c0); + } else { + return DendroColorPoint(p, *wxBLACK); + } +} + +int DendrogramPanel::countLevels(int node_idx, int cur_lvl) +{ + if (node_idx >= 0) { + return 1; + } + + if (level_node.find(node_idx) != level_node.end()) { + // loop!!! + return 1; + } + + level_node[node_idx] = root[-node_idx-1].distance; + + int left = countLevels(root[-node_idx-1].left, cur_lvl+1); + int right = countLevels(root[-node_idx-1].right, cur_lvl+1); + + int lvl = 1 + max(left, right); + + return lvl; +} + +int DendrogramPanel::countLeaves(int node_idx) +{ + if (node_idx >= 0) { + return 1; + } + if (accessed_node.find(node_idx) != accessed_node.end()) { + // loop!!! + return 0; + } + accessed_node[node_idx] = 1; + + return countLeaves(root[-node_idx-1].left) + countLeaves(root[-node_idx-1].right); +} + + +int DendrogramPanel::countLeaves(GdaNode* node) +{ + if (node->left >= 0 && node->right >= 0) { + return 2; + } + + if (node->left >= 0 && node->right < 0) { + return 1 + countLeaves(&root[-node->right-1]); + } + + if (node->left < 0 && node->right >= 0) { + return 1 + countLeaves(&root[-node->left-1]); + } + + return countLeaves(&root[-node->left-1]) + countLeaves(&root[-node->right-1]); +} + +int DendrogramPanel::countLevels(GdaNode* node) +{ + if (node->left >= 0 && node->right >= 0) { + return 1; + } + + if (node->left >= 0 && node->right < 0) { + return 1 + countLevels(&root[-node->right-1]); + } + + if (node->left < 0 && node->right >= 0) { + return 1 + countLevels(&root[-node->left-1]); + } + + return 1 + max(countLevels(&root[-node->left-1]), countLevels(&root[-node->right-1])); +} diff --git a/DialogTools/HClusterDlg.h b/DialogTools/HClusterDlg.h new file mode 100644 index 000000000..19a515953 --- /dev/null +++ b/DialogTools/HClusterDlg.h @@ -0,0 +1,286 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_HCLUSTER_DLG_H___ +#define __GEODA_CENTER_HCLUSTER_DLG_H___ + +#include +#include + +#include "../FramesManager.h" +#include "../VarTools.h" +#include "../logger.h" + +struct GdaNode; +class Project; +class TableInterface; + +class RectNode +{ +public: + RectNode(int _idx, int _x, int _y, const wxColour& _color) { + idx = _idx; + x = _x; + y = _y; + + w = 20; + h = 8; + + rec = wxRect(x + 8, y - 5,w,h); + color = _color; + } + ~RectNode() { + + } + + bool contains(const wxPoint& cur_pos) { + + return rec.Contains(cur_pos); + } + + void draw(wxDC& dc) { + wxBrush brush(color); + wxPen pen(color); + dc.SetBrush(brush); + dc.SetPen(pen); + dc.DrawRectangle(wxRect(x, y-2, 4, 4)); + + dc.DrawRectangle(rec); + dc.SetPen(*wxBLACK_PEN); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + } + + int idx; +private: + + int x; + int y; + int w; + int h; + + wxRect rec; + wxColour color; +}; + +class DendroSplitLine +{ +public: + DendroSplitLine(const wxPoint& _p0, const wxPoint& _p1){ + pt0 = _p0; + pt1 = _p1; + color = *wxRED; + + //int padding = 5; + + rec = wxRect(pt0.x -5, pt0.y, 10, pt1.y - pt0.y); + } + ~DendroSplitLine(){ + + } + + void update(const wxPoint& _p0, const wxPoint& _p1){ + pt0 = _p0; + pt1 = _p1; + + rec = wxRect(pt0.x -5, pt0.y, 10, pt1.y - pt0.y); + } + + bool contains(const wxPoint& cur_pos) { + + return rec.Contains(cur_pos); + } + + void move(const wxPoint& cur_pos, const wxPoint& old_pos) { + int offset_x = cur_pos.x - old_pos.x; + + pt0.x += offset_x; + pt1.x += offset_x; + + if (pt0.x < 5) pt0.x = 5; + if (pt1.x < 5) pt1.x = 5; + + rec = wxRect(pt0.x -5, pt0.y, 10, pt1.y - pt0.y); + } + + void draw(wxDC& dc) { + dc.SetPen(wxPen(color, 2, wxPENSTYLE_SHORT_DASH)); + dc.DrawLine(pt0, pt1); + } + + int getX() { + return pt0.x; + } + + wxPoint pt0; + wxPoint pt1; + wxColour color; + wxRect rec; +}; + +class DendroColorPoint +{ +public: + DendroColorPoint(){ + is_valid = false; + } + DendroColorPoint(const wxPoint& _pt, const wxColour& _clr){ + pt = _pt; + color = _clr; + is_valid = true; + } + ~DendroColorPoint() { + + } + + bool IsValid() { + return is_valid; + } + + int level; + wxPoint pt; + wxColour color; + bool is_valid; +}; + +class DendrogramPanel : public wxPanel +{ +public: + //DendrogramPanel(); + DendrogramPanel(wxWindow* parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize); + virtual ~DendrogramPanel(); + + void OnIdle(wxIdleEvent& event); + void OnEvent( wxMouseEvent& event ); + void OnSize( wxSizeEvent& event); + virtual void OnPaint( wxPaintEvent& event ); + void Setup(GdaNode* _root, int _nelements, int _nclusters, std::vector& _clusters, double _cutoff); + void UpdateCluster(int _nclusters, std::vector& _clusters); + void OnSplitLineChange(int x); + +private: + int leaves; + int levels; + int nelements; + int nclusters; + + double margin; + double currentY; + double heightPerLeaf; + double widthPerLevel; + double maxDistance; + double cutoffDistance; + + bool isResize; + wxBitmap* layer_bm; + + GdaNode* root; + + bool isLayerValid; + bool isLeftDown; + bool isLeftMove; + bool isMovingSplitLine; + wxPoint startPos; + + std::map accessed_node; + std::map level_node; + std::vector end_nodes; + std::vector clusters; + std::vector color_vec; + DendroSplitLine* split_line; + + int countLeaves(GdaNode* node); + + int countLevels(GdaNode* node); + + int countLeaves(int node_idx); + int countLevels(int node_idx, int lvl); + + DendroColorPoint doDraw(wxDC &dc, int node_idx, int y); + void init(); + + DECLARE_ABSTRACT_CLASS(DendrogramPanel) + DECLARE_EVENT_TABLE() +}; + +class HClusterDlg : public wxDialog, public FramesManagerObserver, public HighlightStateObserver +{ +public: + HClusterDlg(wxFrame *parent, Project* project); + virtual ~HClusterDlg(); + + void CreateControls(); + bool Init(); + + void OnSave(wxCommandEvent& event ); + void OnOK( wxCommandEvent& event ); + void OnClickClose( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnDistanceChoice(wxCommandEvent& event); + void OnClusterChoice(wxCommandEvent& event); + + void InitVariableCombobox(wxListBox* var_box); + + /** Implementation of FramesManagerObserver interface */ + virtual void update(FramesManager* o); + + virtual void update(HLStateInt* o); + + HLStateInt* highlight_state; + + void UpdateClusterChoice(int n, std::vector& clusters); + void Highlight(int id); + + std::vector var_info; + std::vector col_ids; + +private: + wxFrame *parent; + Project* project; + TableInterface* table_int; + std::vector tm_strs; + + FramesManager* frames_manager; + + double cutoffDistance; + vector clusters; + vector clusters_undef; + + wxButton *saveButton; + wxListBox* combo_var; + wxChoice* combo_n; + wxChoice* combo_cov; + wxTextCtrl* m_textbox; + wxCheckBox* m_use_centroids; + wxChoice* m_method; + wxChoice* m_distance; + DendrogramPanel* m_panel; + wxChoice* combo_tranform; + + std::map name_to_nm; + std::map name_to_tm_id; + + unsigned int row_lim; + unsigned int col_lim; + std::vector scores; + double thresh95; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/KMeansDlg.cpp b/DialogTools/KMeansDlg.cpp new file mode 100644 index 000000000..9f54f6588 --- /dev/null +++ b/DialogTools/KMeansDlg.cpp @@ -0,0 +1,647 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../Explore/MapNewView.h" +#include "../Project.h" +#include "../Algorithms/cluster.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "SaveToTableDlg.h" +#include "KMeansDlg.h" + + +BEGIN_EVENT_TABLE( KMeansDlg, wxDialog ) +EVT_CLOSE( KMeansDlg::OnClose ) +END_EVENT_TABLE() + +KMeansDlg::KMeansDlg(wxFrame* parent_s, Project* project_s) +: frames_manager(project_s->GetFramesManager()), +wxDialog(NULL, -1, _("K-Means Settings"), wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +{ + wxLogMessage("Open KMeanDlg."); + + SetMinSize(wxSize(360,750)); + + parent = parent_s; + project = project_s; + + bool init_success = Init(); + + if (init_success == false) { + EndDialog(wxID_CANCEL); + } else { + CreateControls(); + } + frames_manager->registerObserver(this); +} + +KMeansDlg::~KMeansDlg() +{ + frames_manager->removeObserver(this); +} + +bool KMeansDlg::Init() +{ + if (project == NULL) + return false; + + table_int = project->GetTableInt(); + if (table_int == NULL) + return false; + + + table_int->GetTimeStrings(tm_strs); + + return true; +} + +void KMeansDlg::update(FramesManager* o) +{ + +} + +void KMeansDlg::CreateControls() +{ + wxPanel *panel = new wxPanel(this); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + wxStaticText* st = new wxStaticText (panel, wxID_ANY, _("Select Variables"), + wxDefaultPosition, wxDefaultSize); + + wxListBox* box = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(250,250), 0, NULL, + wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); + wxCheckBox* cbox = new wxCheckBox(panel, wxID_ANY, _("Use Geometric Centroids")); + wxStaticBoxSizer *hbox0 = new wxStaticBoxSizer(wxVERTICAL, panel, "Input:"); + hbox0->Add(st, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); + hbox0->Add(box, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); + hbox0->Add(cbox, 0, wxLEFT | wxRIGHT, 10); + + if (project->IsTableOnlyProject()) { + cbox->Disable(); + } + // Parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(9,2,5,0); + + + wxString choices[] = {"2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"}; + wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("Number of Clusters:"), + wxDefaultPosition, wxSize(128,-1)); + wxChoice* box1 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(200,-1), 9, choices); + box1->SetSelection(3); + gbox->Add(st1, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box1, 1, wxEXPAND); + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Transformation:"), + wxDefaultPosition, wxSize(120,-1)); + const wxString _transform[3] = {"Raw", "Demean", "Standardize"}; + wxChoice* box01 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 3, _transform); + box01->SetSelection(2); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box01, 1, wxEXPAND); + + wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Initialization Method:"), + wxDefaultPosition, wxSize(128,-1)); + wxString choices16[] = {"KMeans++", "Random"}; + combo_method = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(200,-1), 2, choices16); + combo_method->SetSelection(0); + + gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(combo_method, 1, wxEXPAND); + + + wxStaticText* st10 = new wxStaticText(panel, wxID_ANY, _("Initialization Re-runs:"), + wxDefaultPosition, wxSize(128,-1)); + wxTextCtrl *box10 = new wxTextCtrl(panel, wxID_ANY, wxT("50"), wxDefaultPosition, wxSize(200,-1)); + gbox->Add(st10, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box10, 1, wxEXPAND); + + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:"), + wxDefaultPosition, wxSize(128,-1)); + wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); + chk_seed = new wxCheckBox(panel, wxID_ANY, ""); + seedButton = new wxButton(panel, wxID_OK, wxT("Change Seed")); + + hbox17->Add(chk_seed,0, wxALIGN_CENTER_VERTICAL); + hbox17->Add(seedButton,0,wxALIGN_CENTER_VERTICAL); + seedButton->Disable(); + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox17, 1, wxEXPAND); + + if (GdaConst::use_gda_user_seed) { + setrandomstate(GdaConst::gda_user_seed); + chk_seed->SetValue(true); + seedButton->Enable(); + } + + wxStaticText* st11 = new wxStaticText(panel, wxID_ANY, _("Maximal Iterations:"), + wxDefaultPosition, wxSize(128,-1)); + wxTextCtrl *box11 = new wxTextCtrl(panel, wxID_ANY, wxT("300"), wxDefaultPosition, wxSize(200,-1)); + gbox->Add(st11, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box11, 1, wxEXPAND); + + wxStaticText* st12 = new wxStaticText(panel, wxID_ANY, _("Method:"), + wxDefaultPosition, wxSize(128,-1)); + wxString choices12[] = {"Arithmetic Mean", "Arithmetic Median"}; + wxChoice* box12 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(200,-1), 2, choices12); + box12->SetSelection(0); + gbox->Add(st12, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box12, 1, wxEXPAND); + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:"), + wxDefaultPosition, wxSize(128,-1)); + wxString choices13[] = {"Distance", "--Euclidean", "--City-block", "Correlation", "--Pearson","--Absolute Pearson", "Cosine", "--Signed", "--Un-signed", "Rank", "--Spearman", "--Kendal"}; + wxChoice* box13 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 12, choices13); + box13->SetSelection(1); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box13, 1, wxEXPAND); + + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, "Parameters:"); + hbox->Add(gbox, 1, wxEXPAND); + + + // Output + wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:"), + wxDefaultPosition, wxDefaultSize); + wxTextCtrl *box3 = new wxTextCtrl(panel, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(158,-1)); + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, "Output:"); + //wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(box3, 1, wxALIGN_CENTER_VERTICAL); + + + // Buttons + wxButton *okButton = new wxButton(panel, wxID_OK, wxT("Run"), wxDefaultPosition, + wxSize(70, 30)); + //wxButton *saveButton = new wxButton(panel, wxID_SAVE, wxT("Save"), wxDefaultPosition, wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, wxT("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + //hbox2->Add(saveButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox0, 1, wxEXPAND | wxALL, 10); + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox1, 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + + panel->SetSizer(container); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(panel, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + + Centre(); + + + // Content + InitVariableCombobox(box); + combo_n = box1; + m_textbox = box3; + combo_var = box; + m_use_centroids = cbox; + m_iterations = box11; + m_pass = box10; + m_method = box12; + m_distance = box13; + combo_tranform = box01; + + + // Events + okButton->Bind(wxEVT_BUTTON, &KMeansDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &KMeansDlg::OnClickClose, this); + chk_seed->Bind(wxEVT_CHECKBOX, &KMeansDlg::OnSeedCheck, this); + seedButton->Bind(wxEVT_BUTTON, &KMeansDlg::OnChangeSeed, this); + + m_distance->Connect(wxEVT_CHOICE, + wxCommandEventHandler(KMeansDlg::OnDistanceChoice), + NULL, this); +} + +void KMeansDlg::OnSeedCheck(wxCommandEvent& event) +{ + bool use_user_seed = chk_seed->GetValue(); + + if (use_user_seed) { + seedButton->Enable(); + if (GdaConst::use_gda_user_seed == false && GdaConst::gda_user_seed == 0) { + OnChangeSeed(event); + return; + } + GdaConst::use_gda_user_seed = true; + setrandomstate(GdaConst::gda_user_seed); + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + seedButton->Disable(); + } +} + +void KMeansDlg::OnChangeSeed(wxCommandEvent& event) +{ + // prompt user to enter user seed (used globally) + wxString m; + m << "Enter a seed value for random number generator:"; + + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << GdaConst::gda_user_seed; + + wxTextEntryDialog dlg(NULL, m, "Enter a seed value", cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + uint64_t new_seed_val = val; + GdaConst::gda_user_seed = new_seed_val; + GdaConst::use_gda_user_seed = true; + setrandomstate(GdaConst::gda_user_seed); + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + wxString str_gda_user_seed; + str_gda_user_seed << GdaConst::gda_user_seed; + ogr_adapt.AddEntry("gda_user_seed", str_gda_user_seed.ToStdString()); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + wxString m; + m << "\"" << dlg_val << "\" is not a valid seed. Seed unchanged."; + wxMessageDialog dlg(NULL, m, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + } +} + +void KMeansDlg::OnDistanceChoice(wxCommandEvent& event) +{ + + if (m_distance->GetSelection() == 0) { + m_distance->SetSelection(1); + } else if (m_distance->GetSelection() == 3) { + m_distance->SetSelection(4); + } else if (m_distance->GetSelection() == 6) { + m_distance->SetSelection(7); + } else if (m_distance->GetSelection() == 9) { + m_distance->SetSelection(10); + } +} + +void KMeansDlg::InitVariableCombobox(wxListBox* var_box) +{ + wxArrayString items; + + std::vector col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + + var_box->InsertItems(items,0); +} + +void KMeansDlg::OnClickClose(wxCommandEvent& event ) +{ + wxLogMessage("OnClickClose KMeansDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void KMeansDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close HClusterDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +void KMeansDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click KMeansDlg::OnOK"); + + int ncluster = combo_n->GetSelection() + 2; + + bool use_centroids = m_use_centroids->GetValue(); + + wxArrayInt selections; + combo_var->GetSelections(selections); + + int num_var = selections.size(); + if (num_var < 2 && !use_centroids) { + // show message box + wxString err_msg = _("Please select at least 2 variables."); + wxMessageDialog dlg(NULL, err_msg, "Info", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + wxString field_name = m_textbox->GetValue(); + if (field_name.IsEmpty()) { + wxString err_msg = _("Please enter a field name for saving clustering results."); + wxMessageDialog dlg(NULL, err_msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + col_ids.resize(num_var); + var_info.resize(num_var); + + for (int i=0; iGetString(idx)]; + + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data."), nm); + wxMessageDialog dlg(NULL, err_msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + int tm = name_to_tm_id[combo_var->GetString(idx)]; + + col_ids[i] = col; + var_info[i].time = tm; + + // Set Primary GdaVarTools::VarInfo attributes + var_info[i].name = nm; + var_info[i].is_time_variant = table_int->IsColTimeVariant(idx); + + // var_info[i].time already set above + table_int->GetMinMaxVals(col_ids[i], var_info[i].min, var_info[i].max); + var_info[i].sync_with_global_time = var_info[i].is_time_variant; + var_info[i].fixed_scale = true; + } + + // Call function to set all Secondary Attributes based on Primary Attributes + GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); + + int rows = project->GetNumRecords(); + int columns = 0; + + std::vector data; // data[variable][time][obs] + data.resize(col_ids.size()); + for (int i=0; iGetColData(col_ids[i], data[i]); + } + // get columns (if time variables show) + for (int i=0; iGetSelection(); + char method = 'a'; // mean, 'm' median + char dist = 'e'; // euclidean + int npass = 10; + int n_maxiter = 300; // max iteration of EM + int transpose = 0; // row wise + int* clusterid = new int[rows]; + double* weight = new double[columns]; + for (int j=0; jGetValue(); + long value; + if(iterations.ToLong(&value)) { + n_maxiter = value; + } + + if (combo_method->GetSelection() == 0) method = 'b'; // mean with kmeans++ + + wxString str_pass = m_pass->GetValue(); + long value_pass; + if(str_pass.ToLong(&value_pass)) { + npass = value_pass; + } + + int method_sel = m_method->GetSelection(); + if (method_sel == 1) method = 'm'; + + int dist_sel = m_distance->GetSelection(); + char dist_choices[] = {'e','e','b','c','c','a','u','u','x','s','s','k'}; + dist = dist_choices[dist_sel]; + + // init input_data[rows][cols] + double** input_data = new double*[rows]; + int** mask = new int*[rows]; + for (int i=0; i vals; + + for (int k=0; k< rows;k++) { // row + vals.push_back(data[i][j][k]); + } + + if (transform == 2) { + GenUtils::StandardizeData(vals); + } else if (transform == 1 ) { + GenUtils::DeviationFromMean(vals); + } + + for (int k=0; k< rows;k++) { // row + input_data[k][col_ii] = vals[k]; + } + col_ii += 1; + } + } + if (use_centroids) { + std::vector cents = project->GetCentroids(); + std::vector cent_xs; + std::vector cent_ys; + + for (int i=0; i< rows; i++) { + cent_xs.push_back(cents[i]->GetX()); + cent_ys.push_back(cents[i]->GetY()); + } + + if (transform == 2) { + GenUtils::StandardizeData(cent_xs ); + GenUtils::StandardizeData(cent_ys ); + } else if (transform == 1 ) { + GenUtils::DeviationFromMean(cent_xs ); + GenUtils::DeviationFromMean(cent_ys ); + } + + for (int i=0; i< rows; i++) { + input_data[i][col_ii + 0] = cent_xs[i]; + input_data[i][col_ii + 1] = cent_ys[i]; + } + } + + double error; + int ifound; + kcluster(ncluster, rows, columns, input_data, mask, weight, transpose, npass, n_maxiter, method, dist, clusterid, &error, &ifound); + + vector clusters; + vector clusters_undef; + + // clean memory + for (int i=0; i > cluster_ids(ncluster); + + for (int i=0; i < clusters.size(); i++) { + cluster_ids[ clusters[i] - 1 ].push_back(i); + } + + std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); + + for (int i=0; i < ncluster; i++) { + int c = i + 1; + for (int j=0; jFindColId(field_name); + if ( col == wxNOT_FOUND) { + int col_insert_pos = table_int->GetNumberCols(); + int time_steps = 1; + int m_length_val = GdaConst::default_dbf_long_len; + int m_decimals_val = 0; + + col = table_int->InsertCol(GdaConst::long64_type, field_name, col_insert_pos, time_steps, m_length_val, m_decimals_val); + } else { + // detect if column is integer field, if not raise a warning + if (table_int->GetColType(col) != GdaConst::long64_type ) { + wxString msg = _("This field name already exists (non-integer type). Please input a unique name."); + wxMessageDialog dlg(this, msg, "Warning", wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return; + } + } + + if (col > 0) { + table_int->SetColData(col, time, clusters); + table_int->SetColUndefined(col, time, clusters_undef); + } + + // show a cluster map + if (project->IsTableOnlyProject()) { + return; + } + std::vector new_var_info; + std::vector new_col_ids; + new_col_ids.resize(1); + new_var_info.resize(1); + new_col_ids[0] = col; + new_var_info[0].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[0].name = field_name; + new_var_info[0].is_time_variant = table_int->IsColTimeVariant(col); + table_int->GetMinMaxVals(new_col_ids[0], new_var_info[0].min, new_var_info[0].max); + new_var_info[0].sync_with_global_time = new_var_info[0].is_time_variant; + new_var_info[0].fixed_scale = true; + + + MapFrame* nf = new MapFrame(parent, project, + new_var_info, new_col_ids, + CatClassification::unique_values, + MapCanvas::no_smoothing, 4, + boost::uuids::nil_uuid(), + wxDefaultPosition, + GdaConst::map_default_size); +} diff --git a/DialogTools/KMeansDlg.h b/DialogTools/KMeansDlg.h new file mode 100644 index 000000000..6a6868704 --- /dev/null +++ b/DialogTools/KMeansDlg.h @@ -0,0 +1,95 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_KMEAN_DLG_H___ +#define __GEODA_CENTER_KMEAN_DLG_H___ + +#include +#include +#include +#include + + +#include "../FramesManager.h" +#include "../VarTools.h" + +class Project; +class TableInterface; + +class KMeansDlg : public wxDialog, public FramesManagerObserver +{ +public: + KMeansDlg(wxFrame *parent, Project* project); + virtual ~KMeansDlg(); + + void CreateControls(); + bool Init(); + + void OnOK( wxCommandEvent& event ); + void OnClickClose( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + + void OnSeedCheck(wxCommandEvent& event); + void OnChangeSeed(wxCommandEvent& event); + void OnDistanceChoice(wxCommandEvent& event); + + void InitVariableCombobox(wxListBox* var_box); + + /** Implementation of FramesManagerObserver interface */ + virtual void update(FramesManager* o); + + std::vector var_info; + std::vector col_ids; + +private: + wxFrame *parent; + Project* project; + TableInterface* table_int; + std::vector tm_strs; + + FramesManager* frames_manager; + + wxCheckBox* chk_seed; + wxListBox* combo_var; + wxChoice* combo_method; + wxChoice* combo_tranform; + wxChoice* combo_n; + wxChoice* combo_cov; + wxTextCtrl* m_textbox; + wxCheckBox* m_use_centroids; + wxTextCtrl* m_iterations; + wxTextCtrl* m_pass; + + wxChoice* m_method; + wxChoice* m_distance; + + wxButton* seedButton; + + std::map name_to_nm; + std::map name_to_tm_id; + + unsigned int row_lim; + unsigned int col_lim; + std::vector scores; + double thresh95; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/LisaWhat2OpenDlg.cpp b/DialogTools/LisaWhat2OpenDlg.cpp index 401d95cec..df25aa5c3 100644 --- a/DialogTools/LisaWhat2OpenDlg.cpp +++ b/DialogTools/LisaWhat2OpenDlg.cpp @@ -104,4 +104,48 @@ void GetisWhat2OpenDlg::OnOkClick( wxCommandEvent& event ) event.Skip(); EndDialog(wxID_OK); -} \ No newline at end of file +} + +////////////////////////////////////////////////////////////////////////// +IMPLEMENT_CLASS( LocalGearyWhat2OpenDlg, wxDialog ) + +BEGIN_EVENT_TABLE( LocalGearyWhat2OpenDlg, wxDialog ) +EVT_BUTTON( wxID_OK, LocalGearyWhat2OpenDlg::OnOkClick ) +END_EVENT_TABLE() + +LocalGearyWhat2OpenDlg::LocalGearyWhat2OpenDlg( wxWindow* parent, wxWindowID id, + const wxString& caption, const wxPoint& pos, + const wxSize& size, long style ) +{ + m_RowStand = true; + SetParent(parent); + CreateControls(); + Centre(); +} + +void LocalGearyWhat2OpenDlg::CreateControls() +{ + wxXmlResource::Get()->LoadDialog(this, GetParent(), "IDD_LISAWINDOWS2OPEN"); + if (FindWindow(wxXmlResource::GetXRCID("IDC_CHECK1"))) + m_check1 = wxDynamicCast(FindWindow(XRCID("IDC_CHECK1")), wxCheckBox); + if (FindWindow(XRCID("IDC_CHECK2"))) + m_check2 = wxDynamicCast(FindWindow(XRCID("IDC_CHECK2")), wxCheckBox); + if (FindWindow(XRCID("IDC_CHECK3"))) { + m_check3 = wxDynamicCast(FindWindow(XRCID("IDC_CHECK3")), wxCheckBox); + m_check3->Hide(); + } + //if (FindWindow(XRCID("IDC_CHECK4"))) + // m_check4 = wxDynamicCast(FindWindow(XRCID("IDC_CHECK4")), wxCheckBox); +} + +void LocalGearyWhat2OpenDlg::OnOkClick( wxCommandEvent& event ) +{ + m_SigMap = m_check1->GetValue(); + m_ClustMap = m_check2->GetValue(); + //m_Moran = m_check3->GetValue(); + //m_RowStand = m_check4->GetValue(); + + event.Skip(); + EndDialog(wxID_OK); +} + diff --git a/DialogTools/LisaWhat2OpenDlg.h b/DialogTools/LisaWhat2OpenDlg.h index 1f079d948..4eda48d71 100644 --- a/DialogTools/LisaWhat2OpenDlg.h +++ b/DialogTools/LisaWhat2OpenDlg.h @@ -71,4 +71,29 @@ class GetisWhat2OpenDlg: public wxDialog bool m_NormMap; }; + + +class LocalGearyWhat2OpenDlg: public wxDialog +{ + DECLARE_CLASS( LocalGearyWhat2OpenDlg ) + DECLARE_EVENT_TABLE() + +public: + LocalGearyWhat2OpenDlg( wxWindow* parent, wxWindowID id = -1, + const wxString& caption = _("What windows to open?"), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCAPTION|wxDEFAULT_DIALOG_STYLE ); + void CreateControls(); + void OnOkClick( wxCommandEvent& event ); + + wxCheckBox* m_check1; + wxCheckBox* m_check2; + wxCheckBox* m_check3; + + bool m_SigMap; + bool m_ClustMap; + bool m_RowStand; +}; + #endif diff --git a/DialogTools/RangeSelectionDlg.cpp b/DialogTools/RangeSelectionDlg.cpp index 4f64be30d..f60be567c 100644 --- a/DialogTools/RangeSelectionDlg.cpp +++ b/DialogTools/RangeSelectionDlg.cpp @@ -465,15 +465,15 @@ void RangeSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) bool sel_checked = m_sel_check_box->GetValue() == 1; bool unsel_checked = m_unsel_check_box->GetValue() == 1; - double sel_c = 1; - if (sel_checked) { - wxString sel_c_str = m_sel_val_text->GetValue(); + double sel_c = 0; + wxString sel_c_str = m_sel_val_text->GetValue(); + if (sel_checked && !sel_c_str.IsEmpty()) { sel_c_str.Trim(false); sel_c_str.Trim(true); sel_c_str.ToDouble(&sel_c); } double unsel_c = 0; - if (unsel_checked) { - wxString unsel_c_str = m_unsel_val_text->GetValue(); + wxString unsel_c_str = m_unsel_val_text->GetValue(); + if (unsel_checked && !unsel_c_str.IsEmpty()) { unsel_c_str.Trim(false); unsel_c_str.Trim(true); unsel_c_str.ToDouble(&unsel_c); } @@ -492,18 +492,20 @@ void RangeSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) table_int->GetColData(write_col, sf_tm, t); table_int->GetColUndefined(write_col, sf_tm, undefined); if (sel_checked) { + bool flag = sel_c_str.IsEmpty(); for (int i=0; iGetColData(write_col, sf_tm, t); table_int->GetColUndefined(write_col, sf_tm, undefined); if (sel_checked) { + bool flag = sel_c_str.IsEmpty(); for (int i=0; iGetValue(); - bool sel_valid = sel_text.ToDouble(&val); + bool sel_valid = sel_text.ToDouble(&val) || sel_text.IsEmpty(); { wxTextAttr style(m_sel_val_text->GetDefaultStyle()); style.SetTextColour(*(sel_valid ? wxBLACK : wxRED)); m_sel_val_text->SetStyle(0, sel_text.length(), style); } wxString unsel_text = m_unsel_val_text->GetValue(); - bool unsel_valid = unsel_text.ToDouble(&val); + bool unsel_valid = unsel_text.ToDouble(&val) || unsel_text.IsEmpty(); { wxTextAttr style(m_unsel_val_text->GetDefaultStyle()); style.SetTextColour(*(unsel_valid ? wxBLACK : wxRED)); diff --git a/DialogTools/RegressionDlg.cpp b/DialogTools/RegressionDlg.cpp index 6507fa13e..f58a3f73a 100644 --- a/DialogTools/RegressionDlg.cpp +++ b/DialogTools/RegressionDlg.cpp @@ -161,6 +161,7 @@ regReportDlg(0) RegressionDlg::~RegressionDlg() { + wxLogMessage("RegressionDlg::~RegressionDlg()"); frames_manager->removeObserver(this); table_state->removeObserver(this); w_man_state->removeObserver(this); @@ -758,6 +759,7 @@ void RegressionDlg::OnRunClick( wxCommandEvent& event ) void RegressionDlg::DisplayRegression(wxString dump) { + wxLogMessage("RegressionDlg::DisplayRegression()"); wxDateTime now = wxDateTime::Now(); dump = ">>" + now.FormatDate() + " " + now.FormatTime() + _("\nREGRESSION\n----------\n") + dump; if (regReportDlg == 0) { @@ -772,6 +774,7 @@ void RegressionDlg::DisplayRegression(wxString dump) void RegressionDlg::SetupXNames(bool m_constant_term) { + wxLogMessage("RegressionDlg::SetupXNames()"); } void RegressionDlg::OnViewResultsClick( wxCommandEvent& event ) @@ -841,6 +844,7 @@ void RegressionDlg::OnSaveToTxtFileClick( wxCommandEvent& event ) void RegressionDlg::OnCListVarinDoubleClicked( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCListVarinDoubleClicked()"); if (lastSelection == 1) { OnCButton1Click(event); } else { @@ -850,11 +854,13 @@ void RegressionDlg::OnCListVarinDoubleClicked( wxCommandEvent& event ) void RegressionDlg::OnCListVaroutDoubleClicked( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCListVaroutDoubleClicked()"); OnCButton3Click(event); } void RegressionDlg::OnCButton1Click( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCButton1Click()"); if (m_varlist->GetCount() > 0) { if (m_varlist->GetSelection() >= 0) { wxString temp = m_dependent->GetValue(); @@ -874,6 +880,7 @@ void RegressionDlg::OnCButton1Click( wxCommandEvent& event ) void RegressionDlg::OnCButton2Click( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCButton2Click()"); if (m_varlist->GetCount() > 0) { if (m_varlist->GetSelection() >= 0) { int cur_sel = m_varlist->GetSelection(); @@ -916,6 +923,7 @@ void RegressionDlg::OnCResetClick( wxCommandEvent& event ) void RegressionDlg::OnCButton3Click( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCButton3Click()"); if (m_independentlist->GetCount() > 0) { if(m_independentlist->GetSelection() >= 0) { int cur_sel = m_independentlist->GetSelection(); @@ -924,8 +932,10 @@ void RegressionDlg::OnCButton3Click( wxCommandEvent& event ) if (cur_sel == m_independentlist->GetCount()) { cur_sel = m_independentlist->GetCount()-1; } - m_independentlist->SetSelection(cur_sel); - m_independentlist->SetFirstItem(m_independentlist->GetSelection()); + if (cur_sel >= 0) { + m_independentlist->SetSelection(cur_sel); + m_independentlist->SetFirstItem(m_independentlist->GetSelection()); + } m_nCount = 0; b_done1 = b_done2 = b_done3 = false; } @@ -936,6 +946,7 @@ void RegressionDlg::OnCButton3Click( wxCommandEvent& event ) void RegressionDlg::OnCButton4Click( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCButton4Click()"); for (unsigned int i=0; iGetCount(); i++) { m_independentlist->Append(m_varlist->GetString(i)); } @@ -949,6 +960,7 @@ void RegressionDlg::OnCButton4Click( wxCommandEvent& event ) void RegressionDlg::OnCButton5Click( wxCommandEvent& event ) { + wxLogMessage("RegressionDlg::OnCButton5Click()"); for (unsigned int i=0; iGetCount(); i++) { m_varlist->Append(m_independentlist->GetString(i)); } @@ -1056,6 +1068,7 @@ void RegressionDlg::OnCOpenWeightClick( wxCommandEvent& event ) void RegressionDlg::InitVariableList() { + wxLogMessage("RegressionDlg::InitVariableList()"); UpdateMessageBox(wxEmptyString); m_varlist->Clear(); diff --git a/DialogTools/ReportBugDlg.cpp b/DialogTools/ReportBugDlg.cpp index d6aca9bf5..7b6ce0f12 100644 --- a/DialogTools/ReportBugDlg.cpp +++ b/DialogTools/ReportBugDlg.cpp @@ -272,7 +272,7 @@ void PreferenceDlg::Init() grid_sizer1->Add(cbox9, 0, wxALIGN_RIGHT); cbox9->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnShowCsvInMerge, this); - wxString lbl10 = _("Enable High DPI/Retina support:"); + wxString lbl10 = _("Enable High DPI/Retina support (Mac only):"); wxStaticText* lbl_txt10 = new wxStaticText(vis_page, wxID_ANY, lbl10); cbox10 = new wxCheckBox(vis_page, XRCID("PREF_ENABLE_HDPI"), "", wxDefaultPosition); grid_sizer1->Add(lbl_txt10, 1, wxEXPAND); @@ -581,6 +581,27 @@ void PreferenceDlg::ReadFromCache() GdaConst::gdal_http_timeout = sel_l; } } + + // following are not in this UI, but still global variable + vector gda_user_seed = OGRDataAdapter::GetInstance().GetHistory("gda_user_seed"); + if (!gda_user_seed.empty()) { + long sel_l = 0; + wxString sel = gda_user_seed[0]; + if (sel.ToLong(&sel_l)) { + GdaConst::gda_user_seed = sel_l; + } + } + vector use_gda_user_seed = OGRDataAdapter::GetInstance().GetHistory("use_gda_user_seed"); + if (!use_gda_user_seed.empty()) { + long sel_l = 0; + wxString sel = use_gda_user_seed[0]; + if (sel.ToLong(&sel_l)) { + if (sel_l == 1) + GdaConst::use_gda_user_seed = true; + else if (sel_l == 0) + GdaConst::use_gda_user_seed = false; + } + } } void PreferenceDlg::OnTimeoutInput(wxCommandEvent& ev) @@ -1023,16 +1044,17 @@ bool ReportBugDlg::CreateIssue(wxString title, wxString body) body.Replace("\n", "\\n"); // get log file to body wxString logger_path; - logger_path << GenUtils::GetBasemapCacheDir() << "web_plugins" << wxFileName::GetPathSeparator() << "logger.txt"; - wxTextFile tfile; - tfile.Open(logger_path); - + logger_path << GenUtils::GetSamplesDir() << "logger.txt"; + body << "\\n"; - - while (!tfile.Eof()) - { - body << tfile.GetNextLine() << "\\n"; - } + + wxTextFile tfile; + if (tfile.Open(logger_path)) { + while (!tfile.Eof()) + { + body << tfile.GetNextLine() << "\\n"; + } + } body.Replace("\"", "'"); body.Replace("\t", ""); diff --git a/DialogTools/VariableSettingsDlg.cpp b/DialogTools/VariableSettingsDlg.cpp index 1b29fd199..605f26eed 100644 --- a/DialogTools/VariableSettingsDlg.cpp +++ b/DialogTools/VariableSettingsDlg.cpp @@ -1,3 +1,4 @@ + /** * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved * @@ -27,19 +28,29 @@ #include #include #include +#include +#include #include - +#include +#include #include "../DataViewer/TableInterface.h" #include "../DataViewer/TimeState.h" #include "../VarCalc/WeightsManInterface.h" #include "../Project.h" +#include "../GeneralWxUtils.h" +#include "../Algorithms/pca.h" +#include "../logger.h" +#include "../FramesManager.h" +#include "../FramesManagerObserver.h" +#include "SaveToTableDlg.h" #include "VariableSettingsDlg.h" -/** - * Belows are codes for DiffVarSettingDlg - * - */ - +//////////////////////////////////////////////////////////////////////////// +// +// +// Belows are codes for DiffVarSettingDlg +// +//////////////////////////////////////////////////////////////////////////// DiffMoranVarSettingDlg::DiffMoranVarSettingDlg(Project* project_s) : wxDialog(NULL, -1, _("Differential Moran Variable Settings"), wxDefaultPosition, wxSize(590, 230)) { @@ -278,6 +289,786 @@ boost::uuids::uuid DiffMoranVarSettingDlg::GetWeightsId() return weights_ids[sel]; } +//////////////////////////////////////////////////////////////////////////// +// +// PCASettingsDlg +// +//////////////////////////////////////////////////////////////////////////// + +BEGIN_EVENT_TABLE(SimpleReportTextCtrl, wxTextCtrl) +EVT_CONTEXT_MENU(SimpleReportTextCtrl::OnContextMenu) +END_EVENT_TABLE() + +void SimpleReportTextCtrl::OnContextMenu(wxContextMenuEvent& event) +{ + wxMenu* menu = new wxMenu; + // Some standard items + menu->Append(XRCID("SAVE_SIMPLE_REPORT"), _("&Save")); + menu->AppendSeparator(); + menu->Append(wxID_UNDO, _("&Undo")); + menu->Append(wxID_REDO, _("&Redo")); + menu->AppendSeparator(); + menu->Append(wxID_CUT, _("Cu&t")); + menu->Append(wxID_COPY, _("&Copy")); + menu->Append(wxID_PASTE, _("&Paste")); + menu->Append(wxID_CLEAR, _("&Delete")); + menu->AppendSeparator(); + menu->Append(wxID_SELECTALL, _("Select &All")); + + // Add any custom items here + Connect(XRCID("SAVE_SIMPLE_REPORT"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(SimpleReportTextCtrl::OnSaveClick)); + + PopupMenu(menu); +} + +void SimpleReportTextCtrl::OnSaveClick( wxCommandEvent& event ) +{ + wxLogMessage("In SimpleReportTextCtrl::OnSaveClick()"); + wxFileDialog dlg( this, "Save PCA results", wxEmptyString, + wxEmptyString, + "TXT files (*.txt)|*.txt", + wxFD_SAVE ); + if (dlg.ShowModal() != wxID_OK) return; + + wxFileName new_txt_fname(dlg.GetPath()); + wxString new_txt = new_txt_fname.GetFullPath(); + wxFFileOutputStream output(new_txt); + if (output.IsOk()) { + wxTextOutputStream txt_out( output ); + txt_out << this->GetValue(); + txt_out.Flush(); + output.Close(); + } +} + + +BEGIN_EVENT_TABLE( PCASettingsDlg, wxDialog ) +EVT_CLOSE( PCASettingsDlg::OnClose ) +END_EVENT_TABLE() + +PCASettingsDlg::PCASettingsDlg(Project* project_s) + : wxDialog(NULL, -1, _("PCA Settings"), wxDefaultPosition, wxSize(860, 600), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER), +frames_manager(project_s->GetFramesManager()) +{ + wxLogMessage("Open PCASettingsDlg."); + + SetMinSize(wxSize(860,600)); + + project = project_s; + + bool init_success = Init(); + + if (init_success == false) { + EndDialog(wxID_CANCEL); + } else { + CreateControls(); + } + frames_manager->registerObserver(this); +} + +PCASettingsDlg::~PCASettingsDlg() +{ + frames_manager->removeObserver(this); +} + +void PCASettingsDlg::update(FramesManager* o) +{ +} + +bool PCASettingsDlg::Init() +{ + if (project == NULL) + return false; + + table_int = project->GetTableInt(); + if (table_int == NULL) + return false; + + + table_int->GetTimeStrings(tm_strs); + + return true; +} + +void PCASettingsDlg::CreateControls() +{ + wxPanel *panel = new wxPanel(this); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // input + wxStaticText* st = new wxStaticText (panel, wxID_ANY, _("Select Variables"), + wxDefaultPosition, wxDefaultSize); + + wxListBox* box = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(250,250), 0, NULL, + wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); + + wxStaticBoxSizer *hbox0 = new wxStaticBoxSizer(wxVERTICAL, panel, "Input:"); + hbox0->Add(st, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); + hbox0->Add(box, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); + + // parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(5,2,10,0); + + wxStaticText* st12 = new wxStaticText(panel, wxID_ANY, _("Method:"), + wxDefaultPosition, wxSize(120,-1)); + const wxString _methods[2] = {"SVD", "Eigen"}; + wxChoice* box0 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 2, _methods); + gbox->Add(st12, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box0, 1, wxEXPAND); + + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Transformation:"), + wxDefaultPosition, wxSize(120,-1)); + const wxString _transform[3] = {"Raw", "Demean", "Standardize"}; + wxChoice* box01 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 3, _transform); + + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box01, 1, wxEXPAND); + + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, "Parameters:"); + hbox->Add(gbox, 1, wxEXPAND); + + // Output + wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("Components:"), + wxDefaultPosition, wxSize(140,-1)); + wxChoice* box1 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 0, NULL); + + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, "Output:"); + hbox1->Add(st1, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(box1, 1, wxALIGN_CENTER_VERTICAL); + + + + // buttons + wxButton *okButton = new wxButton(panel, wxID_OK, wxT("Run"), wxDefaultPosition, + wxSize(70, 30)); + saveButton = new wxButton(panel, wxID_SAVE, wxT("Save"), wxDefaultPosition, + wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, wxT("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(saveButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox0, 1, wxEXPAND | wxALL, 10); + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox1, 1, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 1, wxALIGN_CENTER | wxALL, 10); + + + wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); + m_textbox = new SimpleReportTextCtrl(panel, XRCID("ID_TEXTCTRL"), "", wxDefaultPosition, wxSize(320,830), wxTE_MULTILINE | wxTE_READONLY); + + if (GeneralWxUtils::isWindows()) { + wxFont font(8,wxFONTFAMILY_TELETYPE,wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + m_textbox->SetFont(font); + } else { + wxFont font(12,wxFONTFAMILY_TELETYPE,wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + m_textbox->SetFont(font); + + } + vbox1->Add(m_textbox, 1, wxEXPAND|wxALL,20); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + container->Add(vbox1,1, wxEXPAND | wxALL); + + panel->SetSizer(container); + + Centre(); + + // Content + InitVariableCombobox(box); + + saveButton->Enable(false); + combo_var = box; + combo_n = box1; + + combo_method = box0; + combo_transform = box01; + + combo_method->SetSelection(0); + combo_transform->SetSelection(2); + + // Events + okButton->Bind(wxEVT_BUTTON, &PCASettingsDlg::OnOK, this); + saveButton->Bind(wxEVT_BUTTON, &PCASettingsDlg::OnSave, this); + closeButton->Bind(wxEVT_BUTTON, &PCASettingsDlg::OnCloseClick, this); + + combo_method->Connect(wxEVT_CHOICE, + wxCommandEventHandler(PCASettingsDlg::OnMethodChoice), + NULL, this); + +} + +void PCASettingsDlg::OnMethodChoice(wxCommandEvent& event) +{ + /* + if (combo_method->GetSelection() == 0) { + combo_transform->Enable(); + } else if (combo_method->GetSelection() == 1) { + combo_transform->SetSelection(2); + combo_transform->Disable(); + } + */ +} + +void PCASettingsDlg::InitVariableCombobox(wxListBox* var_box) +{ + wxArrayString items; + + std::vector col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name;// table_int->GetColName(id, t); + name_to_tm_id[nm] = t; + items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + + var_box->InsertItems(items,0); +} + +void PCASettingsDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close HClusterDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +void PCASettingsDlg::OnCloseClick(wxCommandEvent& event ) +{ + wxLogMessage("Close PCASettingsDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void PCASettingsDlg::OnSave(wxCommandEvent& event ) +{ + wxLogMessage("OnSave PCASettingsDlg."); + + if (scores.size()==0) + return; + + // save to table + int new_col = combo_n->GetSelection() + 1; + + std::vector new_data(new_col); + std::vector > vals(new_col); + std::vector > undefs(new_col); + + for (unsigned int j = 0; j < new_col; ++j) { + vals[j].resize(row_lim); + undefs[j].resize(row_lim); + for (unsigned int i = 0; i < row_lim; ++i) { + vals[j][i] = double(scores[j + col_lim*i]); + undefs[j][i] = false; + } + new_data[j].d_val = &vals[j]; + new_data[j].label = wxString::Format("PC%d", j+1); + new_data[j].field_default = wxString::Format("PC%d", j+1); + new_data[j].type = GdaConst::double_type; + new_data[j].undefined = &undefs[j]; + } + + SaveToTableDlg dlg(project, this, new_data, + "Save Results: PCA", + wxDefaultPosition, wxSize(400,400)); + dlg.ShowModal(); + + event.Skip(); + +} + +void PCASettingsDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click PCASettingsDlg::OnOK"); + + wxArrayString sel_names; + int max_sel_name_len = 0; + + wxArrayInt selections; + combo_var->GetSelections(selections); + + int num_var = selections.size(); + if (num_var < 2) { + // show message box + wxString err_msg = _("Please select at least 2 variables."); + wxMessageDialog dlg(NULL, err_msg, "Info", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + int rows = project->GetNumRecords(); + int columns = num_var; + + col_ids.resize(num_var); + std::vector > data; + data.resize(num_var); + + var_info.resize(num_var); + + for (int i=0; iGetString(idx); + + sel_names.Add(sel_name); + if (sel_name.length() > max_sel_name_len) { + max_sel_name_len = sel_name.length(); + } + + wxString nm = name_to_nm[sel_name]; + + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data."), nm); wxMessageDialog dlg(NULL, err_msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + int tm = name_to_tm_id[sel_name]; + + data[i].resize(rows); + + table_int->GetColData(col, tm, data[i]); + } + + // Call function to set all Secondary Attributes based on Primary Attributes + //GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); + + + vector vec; + + for (int k=0; k< rows;k++) { + for (int i=0; iGetSelection() == 1; + + bool is_center = false; + bool is_scale = false; + + if (combo_transform->GetSelection() == 1) { + is_center = true; + is_scale = false; + + } else if (combo_transform->GetSelection() == 2) { + is_center = true; + is_scale = true; + } + + if (rows < columns && is_corr == true) { + wxString msg = _("SVD will be automatically used for PCA since the number of rows is less than the number of columns."); + wxMessageDialog dlg(NULL, msg, "Information", wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + combo_method->SetSelection(0); + is_corr = false; + } + + int init_result = pca.Calculate(vec, rows, columns, is_corr, is_center, is_scale); + if (0 != init_result) { + wxString msg = _("There is an error during PCA calculation. Please check if the data is valid."); + wxMessageDialog dlg(NULL, msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + vector sd = pca.sd(); + vector prop_of_var = pca.prop_of_var(); + vector cum_prop = pca.cum_prop(); + scores = pca.scores(); + + vector el_cols = pca.eliminated_columns(); + + float kaiser = pca.kaiser(); + thresh95 = pca.thresh95(); + + unsigned int ncols = pca.ncols(); + unsigned int nrows = pca.nrows(); + + wxString method = pca.method(); + + wxString pca_log; + //pca_log << "\n\nPCA method: " << method; + + pca_log << "\n\nStandard deviation:\n"; + for (int i=0; i 0 && (token[pos] == ' ' || pos == n_len-1) ) { + // end of a number + pca_log << wxString::Format("%*s%d", sub_len-1, "PC", pc_idx++); + sub_len = 1; + start = false; + } else { + if (!start && token[pos] != ' ') { + start = true; + } + sub_len += 1; + } + pos += 1; + } + header = true; + pca_log << "\n"; + } + } + + for (int k=0; kSetValue(pca_log); + + combo_n->Clear(); + for (int i=0; iAppend(wxString::Format("%d", i+1)); + } + combo_n->SetSelection((int)thresh95 -1); + + saveButton->Enable(true); +} + +//////////////////////////////////////////////////////////////////////////// +// +// MultiVariableSettingsDlg +// +//////////////////////////////////////////////////////////////////////////// + +MultiVariableSettingsDlg::MultiVariableSettingsDlg(Project* project_s) + : wxDialog(NULL, -1, _("Multi-Variable Settings"), wxDefaultPosition, wxSize(320, 430)) +{ + wxLogMessage("Open MultiVariableSettingsDlg."); + + combo_time1 = NULL; + + project = project_s; + + has_time = project->GetTimeState()->GetTimeSteps() > 1 ; + + bool init_success = Init(); + + if (init_success == false) { + EndDialog(wxID_CANCEL); + } else { + CreateControls(); + } +} + +MultiVariableSettingsDlg::~MultiVariableSettingsDlg() +{ +} + +bool MultiVariableSettingsDlg::Init() +{ + if (project == NULL) + return false; + + table_int = project->GetTableInt(); + if (table_int == NULL) + return false; + + + table_int->GetTimeStrings(tm_strs); + + return true; +} + +void MultiVariableSettingsDlg::CreateControls() +{ + wxPanel *panel = new wxPanel(this); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // label & listbox + wxStaticText* st = new wxStaticText (panel, wxID_ANY, _("Select Variables (Multi-Selection)"), + wxDefaultPosition, wxDefaultSize); + + wxListBox* box = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(320,200), 0, NULL, + wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); + + // weights + wxStaticText *st3 = new wxStaticText(panel, wxID_ANY, wxT("Weights:"), + wxDefaultPosition, wxSize(60,-1)); + wxChoice* box3 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(160,-1), 0, NULL); + wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(box3, 1, wxALIGN_CENTER_VERTICAL); + + // buttons + wxButton *okButton = new wxButton(panel, wxID_OK, wxT("OK"), wxDefaultPosition, + wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, wxT("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + vbox->Add(st, 1, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(box, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); + + // time + if (has_time) { + wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("Time:"), + wxDefaultPosition, wxSize(40,-1)); + wxChoice* box1 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(160,-1), 0, NULL); + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + hbox->Add(st1, 0, wxRIGHT | wxLEFT, 10); + hbox->Add(box1, 1, wxEXPAND); + combo_time1 = box1; + combo_time1->SetSelection(0); + vbox->Add(hbox, 1, wxALIGN_CENTER | wxALL, 10); + } + vbox->Add(hbox1, 1, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 1, wxALIGN_CENTER | wxALL, 10); + + + panel->SetSizer(vbox); + + Centre(); + + // Content + InitVariableCombobox(box); + if (has_time) { + InitTimeComboboxes(combo_time1); + } + InitWeightsCombobox(box3); + + combo_var = box; + + combo_weights = box3; + + // Events + okButton->Bind(wxEVT_BUTTON, &MultiVariableSettingsDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &MultiVariableSettingsDlg::OnClose, this); + if (combo_time1) { + combo_time1->Bind(wxEVT_CHOICE, &MultiVariableSettingsDlg::OnTimeSelect, this); + } +} + +void MultiVariableSettingsDlg::OnTimeSelect( wxCommandEvent& event ) +{ + wxLogMessage("MultiVariableSettingsDlg::OnTimeSelect"); + combo_var->Clear(); + + InitVariableCombobox(combo_var); +} + +void MultiVariableSettingsDlg::InitVariableCombobox(wxListBox* var_box) +{ + var_box->Clear(); + + wxArrayString items; + + std::vector col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + int t = combo_time1->GetSelection(); + if (t< 0) t = 0; + + wxString nm = name; + nm << " (" << project->GetTimeState()->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + + var_box->InsertItems(items,0); +} + +void MultiVariableSettingsDlg::InitTimeComboboxes(wxChoice* time1) +{ + for (size_t i=0, n=tm_strs.size(); i < n; i++ ) { + time1->Append(tm_strs[i]); + } + time1->SetSelection(0); +} + +void MultiVariableSettingsDlg::InitWeightsCombobox(wxChoice* weights_ch) +{ + WeightsManInterface* w_man_int = project->GetWManInt(); + w_man_int->GetIds(weights_ids); + + size_t sel_pos=0; + for (size_t i=0; iAppend(w_man_int->GetShortDispName(weights_ids[i])); + if (w_man_int->GetDefault() == weights_ids[i]) + sel_pos = i; + } + if (weights_ids.size() > 0) weights_ch->SetSelection(sel_pos); +} + +void MultiVariableSettingsDlg::OnClose(wxCommandEvent& event ) +{ + wxLogMessage("Close MultiVariableSettingsDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); +} + +void MultiVariableSettingsDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click MultiVariableSettingsDlg::OnOK"); + + wxArrayInt selections; + combo_var->GetSelections(selections); + + int num_var = selections.size(); + if (num_var < 2) { + // show message box + wxString err_msg = _("Please select at least 2 variables."); + wxMessageDialog dlg(NULL, err_msg, "Info", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + col_ids.resize(num_var); + var_info.resize(num_var); + + for (int i=0; iGetString(idx); + LOG_MSG(list_item); + wxString nm = name_to_nm[list_item]; + LOG_MSG(nm); + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data."), nm); wxMessageDialog dlg(NULL, err_msg, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + int tm = name_to_tm_id[combo_var->GetString(idx)]; + + col_ids[i] = col; + var_info[i].time = tm; + + // Set Primary GdaVarTools::VarInfo attributes + var_info[i].name = nm; + var_info[i].is_time_variant = table_int->IsColTimeVariant(col); + + // var_info[i].time already set above + table_int->GetMinMaxVals(col_ids[i], var_info[i].min, var_info[i].max); + var_info[i].sync_with_global_time = var_info[i].is_time_variant; + var_info[i].fixed_scale = true; + } + + // Call function to set all Secondary Attributes based on Primary Attributes + GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); + + + EndDialog(wxID_OK); + +} + +boost::uuids::uuid MultiVariableSettingsDlg::GetWeightsId() +{ + + int sel = combo_weights->GetSelection(); + if (sel < 0) sel = 0; + if (sel >= weights_ids.size()) sel = weights_ids.size()-1; + + return weights_ids[sel]; +} + + +//////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////// /** * Belows are codes for VariableSettingsDlg * @@ -302,7 +1093,7 @@ BEGIN_EVENT_TABLE(VariableSettingsDlg, wxDialog) EVT_LISTBOX(XRCID("ID_VARIABLE4"), VariableSettingsDlg::OnVar4Change) EVT_SPINCTRL(XRCID("ID_NUM_CATEGORIES_SPIN"), VariableSettingsDlg::OnSpinCtrl) - EVT_BUTTON(XRCID("wxID_OK"), VariableSettingsDlg::OnOkClick) + EVT_BUTTON(XRCID("wxID_OKBUTTON"), VariableSettingsDlg::OnOkClick) EVT_BUTTON(XRCID("wxID_CANCEL"), VariableSettingsDlg::OnCancelClick) END_EVENT_TABLE() diff --git a/DialogTools/VariableSettingsDlg.h b/DialogTools/VariableSettingsDlg.h index 1dde8559b..02b3f5270 100644 --- a/DialogTools/VariableSettingsDlg.h +++ b/DialogTools/VariableSettingsDlg.h @@ -21,9 +21,12 @@ #define __GEODA_CENTER_VARIABLE_SETTINGS_DLG_H___ #include +#include + #include #include #include +#include #include #include #include @@ -31,10 +34,17 @@ #include "../VarTools.h" #include "../Explore/CatClassification.h" #include "../VarCalc/WeightsMetaInfo.h" +#include "../FramesManagerObserver.h" class Project; class TableInterface; + +//////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////// class DiffMoranVarSettingDlg : public wxDialog { public: @@ -68,6 +78,127 @@ class DiffMoranVarSettingDlg : public wxDialog wxComboBox* combo_weights; }; +//////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////// + +class SimpleReportTextCtrl : public wxTextCtrl +{ +public: + SimpleReportTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value = "", + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, + long style = 0, const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxTextCtrlNameStr) + : wxTextCtrl(parent, id, value, pos, size, style, validator, name) {} +protected: + void OnContextMenu(wxContextMenuEvent& event); + void OnSaveClick( wxCommandEvent& event ); + DECLARE_EVENT_TABLE() +}; + +class PCASettingsDlg : public wxDialog, public FramesManagerObserver +{ +public: + PCASettingsDlg(Project* project); + virtual ~PCASettingsDlg(); + + void CreateControls(); + bool Init(); + + void OnOK( wxCommandEvent& event ); + void OnSave( wxCommandEvent& event ); + void OnCloseClick( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnMethodChoice( wxCommandEvent& event ); + + void InitVariableCombobox(wxListBox* var_box); + + //boost::uuids::uuid GetWeightsId(); + + /** Implementation of FramesManagerObserver interface */ + virtual void update(FramesManager* o); + + std::vector var_info; + std::vector col_ids; + +private: + FramesManager* frames_manager; + + Project* project; + TableInterface* table_int; + std::vector tm_strs; + //std::vector weights_ids; + + wxListBox* combo_var; + wxChoice* combo_n; + + SimpleReportTextCtrl* m_textbox; + wxButton *saveButton; + + wxChoice* combo_method; + wxChoice* combo_transform; + + + std::map name_to_nm; + std::map name_to_tm_id; + + unsigned int row_lim; + unsigned int col_lim; + std::vector scores; + float thresh95; + + DECLARE_EVENT_TABLE() +}; + +//////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////// +class MultiVariableSettingsDlg : public wxDialog +{ +public: + MultiVariableSettingsDlg(Project* project); + virtual ~MultiVariableSettingsDlg(); + + void CreateControls(); + bool Init(); + + void OnOK( wxCommandEvent& event ); + void OnClose( wxCommandEvent& event ); + void OnTimeSelect( wxCommandEvent& event ); + + void InitVariableCombobox(wxListBox* var_box); + void InitTimeComboboxes(wxChoice* time1); + void InitWeightsCombobox(wxChoice* weights_ch); + + boost::uuids::uuid GetWeightsId(); + + std::vector var_info; + std::vector col_ids; + +private: + bool has_time; + Project* project; + TableInterface* table_int; + std::vector tm_strs; + std::vector weights_ids; + + wxListBox* combo_var; + wxChoice* combo_time1; + wxChoice* combo_weights; + + std::map name_to_nm; + std::map name_to_tm_id; +}; + +//////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////// class VariableSettingsDlg: public wxDialog { diff --git a/DialogTools/WeightsManDlg.cpp b/DialogTools/WeightsManDlg.cpp index 2cd626e4e..f524f6817 100644 --- a/DialogTools/WeightsManDlg.cpp +++ b/DialogTools/WeightsManDlg.cpp @@ -56,7 +56,7 @@ w_man_int(project->GetWManInt()), w_man_state(project->GetWManState()), table_int(project->GetTableInt()), suspend_w_man_state_updates(false), create_btn(0), load_btn(0), remove_btn(0), w_list(0) { - LOG_MSG("Entering WeightsManFrame::WeightsManFrame"); + wxLogMessage("Entering WeightsManFrame::WeightsManFrame"); panel = new wxPanel(this); panel->SetBackgroundColour(*wxWHITE); @@ -156,7 +156,7 @@ create_btn(0), load_btn(0), remove_btn(0), w_list(0) w_man_state->registerObserver(this); Show(true); - LOG_MSG("Exiting WeightsManFrame::WeightsManFrame"); + wxLogMessage("Exiting WeightsManFrame::WeightsManFrame"); } WeightsManFrame::~WeightsManFrame() @@ -168,6 +168,7 @@ WeightsManFrame::~WeightsManFrame() void WeightsManFrame::OnHistogramBtn(wxCommandEvent& ev) { + wxLogMessage("WeightsManFrame::OnHistogramBtn()"); boost::uuids::uuid id = GetHighlightId(); if (id.is_nil()) return; ConnectivityHistFrame* f = new ConnectivityHistFrame(this, project_p, id); @@ -175,6 +176,7 @@ void WeightsManFrame::OnHistogramBtn(wxCommandEvent& ev) void WeightsManFrame::OnConnectMapBtn(wxCommandEvent& ev) { + wxLogMessage("WeightsManFrame::OnConnectMapBtn()"); boost::uuids::uuid id = GetHighlightId(); if (id.is_nil()) return; ConnectivityMapFrame* f = new ConnectivityMapFrame(this, project_p, id, wxDefaultPosition, GdaConst::conn_map_default_size); @@ -182,7 +184,7 @@ void WeightsManFrame::OnConnectMapBtn(wxCommandEvent& ev) void WeightsManFrame::OnActivate(wxActivateEvent& event) { - LOG_MSG("In WeightsManFrame::OnActivate"); + wxLogMessage("In WeightsManFrame::OnActivate"); if (event.GetActive()) { RegisterAsActive("WeightsManFrame", GetTitle()); } @@ -191,7 +193,7 @@ void WeightsManFrame::OnActivate(wxActivateEvent& event) void WeightsManFrame::OnWListItemSelect(wxListEvent& ev) { - LOG_MSG("In WeightsManFrame::OnWListItemSelect"); + wxLogMessage("In WeightsManFrame::OnWListItemSelect"); long item = ev.GetIndex(); SelectId(ids[item]); UpdateButtons(); @@ -210,12 +212,13 @@ void WeightsManFrame::OnWListItemDeselect(wxListEvent& ev) void WeightsManFrame::OnCreateBtn(wxCommandEvent& ev) { - LOG_MSG("In WeightsManFrame::OnCreateBtn"); + wxLogMessage("In WeightsManFrame::OnCreateBtn"); GdaFrame::GetGdaFrame()->OnToolsWeightsCreate(ev); } void WeightsManFrame::OnLoadBtn(wxCommandEvent& ev) { + wxLogMessage("In WeightsManFrame::OnLoadBtn"); wxFileName default_dir = project_p->GetWorkingDir(); wxString default_path = default_dir.GetPath(); wxFileDialog dlg( this, "Choose Weights File", default_path, "", @@ -302,7 +305,7 @@ void WeightsManFrame::OnLoadBtn(wxCommandEvent& ev) void WeightsManFrame::OnRemoveBtn(wxCommandEvent& ev) { - LOG_MSG("Entering WeightsManFrame::OnRemoveBtn"); + wxLogMessage("Entering WeightsManFrame::OnRemoveBtn"); boost::uuids::uuid id = GetHighlightId(); if (id.is_nil()) return; int nb = w_man_state->NumBlockingRemoveId(id); @@ -341,7 +344,7 @@ void WeightsManFrame::OnRemoveBtn(wxCommandEvent& ev) /** Implementation of WeightsManStateObserver interface */ void WeightsManFrame::update(WeightsManState* o) { - LOG_MSG("In WeightsManFrame::update(WeightsManState* o)"); + wxLogMessage("In WeightsManFrame::update(WeightsManState* o)"); if (suspend_w_man_state_updates) { return; } @@ -383,7 +386,7 @@ void WeightsManFrame::update(WeightsManState* o) void WeightsManFrame::OnShowAxes(wxCommandEvent& event) { - LOG_MSG("In WeightsManFrame::OnShowAxes"); + wxLogMessage("In WeightsManFrame::OnShowAxes"); if (conn_hist_canvas) { conn_hist_canvas->ShowAxes(!conn_hist_canvas->IsShowAxes()); UpdateOptionMenuItems(); @@ -392,7 +395,7 @@ void WeightsManFrame::OnShowAxes(wxCommandEvent& event) void WeightsManFrame::OnDisplayStatistics(wxCommandEvent& event) { - LOG_MSG("In WeightsManFrame::OnDisplayStatistics"); + wxLogMessage("In WeightsManFrame::OnDisplayStatistics"); if (conn_hist_canvas) { conn_hist_canvas->DisplayStatistics( !conn_hist_canvas->IsDisplayStats()); @@ -402,7 +405,7 @@ void WeightsManFrame::OnDisplayStatistics(wxCommandEvent& event) void WeightsManFrame::OnHistogramIntervals(wxCommandEvent& event) { - LOG_MSG("In WeightsManFrame::OnDisplayStatistics"); + wxLogMessage("In WeightsManFrame::OnDisplayStatistics"); if (conn_hist_canvas) { conn_hist_canvas->HistogramIntervals(); } @@ -410,7 +413,7 @@ void WeightsManFrame::OnHistogramIntervals(wxCommandEvent& event) void WeightsManFrame::OnSaveConnectivityToTable(wxCommandEvent& event) { - LOG_MSG("In WeightsManFrame::OnSaveConnectivityToTable"); + wxLogMessage("In WeightsManFrame::OnSaveConnectivityToTable"); if (conn_hist_canvas) { conn_hist_canvas->SaveConnectivityToTable(); } @@ -418,7 +421,7 @@ void WeightsManFrame::OnSaveConnectivityToTable(wxCommandEvent& event) void WeightsManFrame::OnSelectIsolates(wxCommandEvent& event) { - LOG_MSG("In WeightsManFrame::OnSelectIsolates"); + wxLogMessage("In WeightsManFrame::OnSelectIsolates"); if (conn_hist_canvas) { conn_hist_canvas->SelectIsolates(); } @@ -446,7 +449,7 @@ void WeightsManFrame::InitWeightsList() void WeightsManFrame::SetDetailsForId(boost::uuids::uuid id) { - LOG_MSG("In WeightsManFrame::SetDetailsForItem"); + wxLogMessage("In WeightsManFrame::SetDetailsForItem"); if (id.is_nil()) { SetDetailsWin(std::vector(0), std::vector(0)); return; @@ -636,5 +639,8 @@ void WeightsManFrame::UpdateButtons() if (remove_btn) remove_btn->Enable(any_sel); if (histogram_btn) histogram_btn->Enable(any_sel); if (connectivity_map_btn) connectivity_map_btn->Enable(any_sel); + if (project_p->isTableOnly) { + connectivity_map_btn->Disable(); + } } diff --git a/Explore/Basemap.cpp b/Explore/Basemap.cpp index 092f74837..c6624fd87 100644 --- a/Explore/Basemap.cpp +++ b/Explore/Basemap.cpp @@ -20,10 +20,13 @@ #include #include +/* #ifdef __WIN32__ #define _USE_MATH_DEFINES #include #endif +*/ +#include #include #include "stdio.h" @@ -34,6 +37,7 @@ #include #include #include +#include #include diff --git a/Explore/Basemap.h b/Explore/Basemap.h index aa130412d..61d85525e 100644 --- a/Explore/Basemap.h +++ b/Explore/Basemap.h @@ -20,10 +20,13 @@ #ifndef GeoDa_Basemap_h #define GeoDa_Basemap_h +/* #ifdef __WIN32__ #define _USE_MATH_DEFINES #include #endif +*/ +#include #include #include diff --git a/Explore/CartogramNewView.cpp b/Explore/CartogramNewView.cpp index a9a75c62f..57e5a46ce 100644 --- a/Explore/CartogramNewView.cpp +++ b/Explore/CartogramNewView.cpp @@ -1203,7 +1203,7 @@ void CartogramNewFrame::update(TimeState* o) { template_canvas->TimeChange(); UpdateTitle(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); } void CartogramNewFrame::OnNewCustomCatClassifA() diff --git a/Explore/CatClassification.cpp b/Explore/CatClassification.cpp index 0c62edefe..d1ff47288 100644 --- a/Explore/CatClassification.cpp +++ b/Explore/CatClassification.cpp @@ -128,6 +128,7 @@ double calc_gvf(const std::vector& b, const std::vector& v, void CatClassification::CatLabelsFromBreaks(const std::vector& breaks, std::vector& cat_labels, + const CatClassifType theme, bool useScientificNotation) { stringstream s; @@ -150,7 +151,10 @@ void CatClassification::CatLabelsFromBreaks(const std::vector& breaks, s << "> " << breaks[ival-1]; //s << "(" << breaks[ival-1] << ", inf)"; } else if (ival == cur_intervals-1 && cur_intervals == 2) { - s << ">= " << breaks[ival-1]; + if (theme == CatClassification::unique_values) + s << "=" << breaks[ival - 1]; + else + s << ">= " << breaks[ival-1]; //s << "[" << breaks[ival-1] << ", inf)"; } else { int num_breaks = cur_intervals-1; @@ -232,7 +236,7 @@ void CatClassification::SetBreakPoints(std::vector& breaks, Gda::percentile(((i+1.0)*100.0)/((double) num_cats), var); } } - CatLabelsFromBreaks(breaks, cat_labels, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); } else if (theme == percentile) { breaks[0] = Gda::percentile(1, var); @@ -258,7 +262,7 @@ void CatClassification::SetBreakPoints(std::vector& breaks, breaks[3] = stats.mean + 1.0 * stats.sd_with_bessel; breaks[4] = stats.mean + 2.0 * stats.sd_with_bessel; - CatLabelsFromBreaks(breaks, cat_labels, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); } else if (theme == unique_values) { std::vector v(num_obs); @@ -272,25 +276,32 @@ void CatClassification::SetBreakPoints(std::vector& breaks, create_unique_val_mapping(uv_mapping, v, v_undef); int num_unique_vals = uv_mapping.size(); + num_cats = num_unique_vals; if (num_unique_vals > 10) { num_cats = 10; - FindNaturalBreaks(num_cats, var, var_undef, breaks); - } else { - num_cats = num_unique_vals; - breaks.resize(num_cats-1); - for (int i=0; i 10) { + cat_labels[9] = "Others"; + } + + // don't need to correct for + //CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); } else if (theme == natural_breaks) { FindNaturalBreaks(num_cats, var, var_undef, breaks); - CatLabelsFromBreaks(breaks, cat_labels, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); } else if (theme == equal_intervals) { double min_val = var[0].first; @@ -314,7 +325,7 @@ void CatClassification::SetBreakPoints(std::vector& breaks, breaks[i] = min_val + (((double) i) + 1.0)*delta; } } - CatLabelsFromBreaks(breaks, cat_labels, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); } } @@ -509,24 +520,35 @@ PopulateCatClassifData(const CatClassifDef& cat_def, } labels_ext[0] = ss.str(); ss.str(""); + cat_data.SetCategoryMinMax(t, 0, p_min, extreme_lower); + ss << " [" << extreme_lower << " : " << hinge_stats[t].Q1 << "]"; labels_ext[1] = ss.str(); ss.str(""); + cat_data.SetCategoryMinMax(t, 1, extreme_lower, hinge_stats[t].Q1); + ss << " [" << hinge_stats[t].Q1 << " : " << hinge_stats[t].Q2 << "]"; labels_ext[2] = ss.str(); ss.str(""); + cat_data.SetCategoryMinMax(t, 2, hinge_stats[t].Q1, hinge_stats[t].Q2); + ss << " [" << hinge_stats[t].Q2 << " : " << hinge_stats[t].Q3 << "]"; labels_ext[3] = ss.str(); ss.str(""); + cat_data.SetCategoryMinMax(t, 3, hinge_stats[t].Q2, hinge_stats[t].Q3); + ss << " [" << hinge_stats[t].Q3 << " : " << extreme_upper << "]"; labels_ext[4] = ss.str(); ss.str(""); + cat_data.SetCategoryMinMax(t, 4, hinge_stats[t].Q3, extreme_upper); + if (cat_data.GetNumObsInCategory(t, num_cats-1) == 0 && p_max > extreme_upper) ss << " [" << extreme_upper << " : " << p_max << "]"; else ss << " [" << extreme_upper << " : inf]"; labels_ext[5] = ss.str(); + cat_data.SetCategoryMinMax(t, 5, extreme_upper, p_max); for (int cat=0; cat sz || to > sz) { + return; + } + wxBrush from_brush = categories[t].cat_vec[from].brush; + wxBrush to_brush = categories[t].cat_vec[to].brush; + wxPen from_pen = categories[t].cat_vec[from].pen; + wxPen to_pen = categories[t].cat_vec[to].pen; + + Category tmp = categories[t].cat_vec[from]; + categories[t].cat_vec[from] = categories[t].cat_vec[to]; + categories[t].cat_vec[to] = tmp; + + categories[t].cat_vec[from].brush = from_brush; + categories[t].cat_vec[to].brush = to_brush; + categories[t].cat_vec[from].pen = from_pen; + categories[t].cat_vec[to].pen = to_pen; + + } +} + void CatClassifData::AppendUndefCategory(int t, int count) { Category c_undef; diff --git a/Explore/CatClassification.h b/Explore/CatClassification.h index a6ba5067d..f6ce2565e 100644 --- a/Explore/CatClassification.h +++ b/Explore/CatClassification.h @@ -40,7 +40,8 @@ namespace CatClassification { enum CatClassifType { no_theme, hinge_15, hinge_30, quantile, percentile, stddev, excess_risk_theme, unique_values, natural_breaks, equal_intervals, lisa_categories, lisa_significance, - getis_ord_categories, getis_ord_significance, custom }; + getis_ord_categories, getis_ord_significance, + local_geary_categories, local_geary_significance,custom }; /** When CatClassifType != custom, BreakValsType is assumed to be by_cat_classif_type. Otherwise, if CatClassifType == custom, @@ -56,6 +57,7 @@ namespace CatClassification { void CatLabelsFromBreaks(const std::vector& breaks, std::vector& cat_labels, + const CatClassifType theme, bool useScientifcNotation=false); void SetBreakPoints(std::vector& breaks, @@ -214,6 +216,8 @@ struct CatClassifData { int GetCurrentCanvasTmStep(); void SetCurrentCanvasTmStep(int canvas_tm); int GetCanvasTmSteps(); + + void ExchangeLabels(int from, int to); }; #endif diff --git a/Explore/ConditionalClusterMapView.cpp b/Explore/ConditionalClusterMapView.cpp index 4c55f7bec..df848ce7b 100644 --- a/Explore/ConditionalClusterMapView.cpp +++ b/Explore/ConditionalClusterMapView.cpp @@ -28,8 +28,7 @@ #include #include #include -#include "CatClassifState.h" -#include "CatClassifManager.h" + #include "../DataViewer/TableInterface.h" #include "../DataViewer/TimeState.h" #include "../DialogTools/CatClassifDlg.h" @@ -38,9 +37,12 @@ #include "../GeoDa.h" #include "../Project.h" #include "../ShapeOperations/ShapeUtils.h" + +#include "CatClassifState.h" +#include "CatClassifManager.h" #include "LisaCoordinator.h" #include "GStatCoordinator.h" - +#include "LocalGearyCoordinator.h" #include "ConditionalClusterMapView.h" using namespace std; @@ -475,6 +477,8 @@ void ConditionalClusterMapCanvas::ResizeSelectableShps(int virtual_scrn_w, } if (bin_bm_redraw_needed) { + if (bin_w <= 0) bin_w = 1; + if (bin_h <= 0) bin_h = 1; bin_bm = new wxBitmap(bin_w, bin_h); wxMemoryDC dc(*bin_bm); dc.SetPen(*wxWHITE_PEN); @@ -865,6 +869,58 @@ ConditionalClusterMapFrame(wxFrame *parent, Project* project, Show(true); } +ConditionalClusterMapFrame:: +ConditionalClusterMapFrame(wxFrame *parent, Project* project, + const vector& var_info, + const vector& col_ids, + LocalGearyCoordinator* local_geary_coord, + const wxString& title, const wxPoint& pos, + const wxSize& size, const long style) +: ConditionalNewFrame(parent, project, var_info, col_ids, title, pos,size, style) +{ + + wxLogMessage("Open ConditionalNewFrame -- Local Geary."); + int width, height; + GetClientSize(&width, &height); + + + wxSplitterWindow* splitter_win = new wxSplitterWindow(this,-1, + wxDefaultPosition, wxDefaultSize, + wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + splitter_win->SetMinimumPaneSize(10); + + wxPanel* rpanel = new wxPanel(splitter_win); + template_canvas = new ConditionalLocalGearyClusterMapCanvas(rpanel, this, project, + var_info, col_ids, + local_geary_coord, + title, + wxDefaultPosition, + wxDefaultSize); + SetTitle(template_canvas->GetCanvasTitle()); + template_canvas->SetScrollRate(1,1); + wxBoxSizer* rbox = new wxBoxSizer(wxVERTICAL); + rbox->Add(template_canvas, 1, wxEXPAND); + rpanel->SetSizer(rbox); + + wxPanel* lpanel = new wxPanel(splitter_win); + template_legend = new ConditionalClusterMapLegend(lpanel, template_canvas, + wxPoint(0,0), wxSize(0,0)); + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); + template_legend->GetContainingSizer()->Detach(template_legend); + lbox->Add(template_legend, 1, wxEXPAND); + lpanel->SetSizer(lbox); + + splitter_win->SplitVertically(lpanel, rpanel, + GdaConst::map_default_legend_width); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + SetSizer(sizer); + splitter_win->SetSize(wxSize(width,height)); + SetAutoLayout(true); + DisplayStatusBar(true); + Show(true); +} + ConditionalClusterMapFrame::~ConditionalClusterMapFrame() { DeregisterAsActive(); @@ -925,7 +981,7 @@ void ConditionalClusterMapFrame::update(TimeState* o) { template_canvas->TimeChange(); UpdateTitle(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); } void ConditionalClusterMapFrame::OnNewCustomCatClassifA() @@ -1428,3 +1484,217 @@ void ConditionalGClusterMapCanvas::UpdateStatusBar() */ sb->SetStatusText(s); } + +/////////////////////////////////////////////////////////////////////////////// +// +// Local Geary Cluster +// +/////////////////////////////////////////////////////////////////////////////// +ConditionalLocalGearyClusterMapCanvas:: +ConditionalLocalGearyClusterMapCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + const vector& var_info, + const vector& col_ids, + LocalGearyCoordinator* local_geary_coordinator, + const wxString& title, + const wxPoint& pos, + const wxSize& size) +: ConditionalClusterMapCanvas(parent, t_frame, project, var_info, col_ids, title, pos, size), +local_geary_coord(local_geary_coordinator) +{ + Init(size); +} + +ConditionalLocalGearyClusterMapCanvas::~ConditionalLocalGearyClusterMapCanvas() +{ + +} + +void ConditionalLocalGearyClusterMapCanvas::CreateAndUpdateCategories() +{ + cat_var_sorted.clear(); + map_valid.resize(num_time_vals); + for (int t=0; tcluster_vecs[t][i]; + cat_var_sorted[t][i].second = i; + + cat_var_undef[t][i] = local_geary_coord->undef_data[0][t][i]; + } + } + + // Sort each vector in ascending order + sort(cat_var_sorted[0].begin(), + cat_var_sorted[0].end(), Gda::dbl_int_pair_cmp_less); + + if (is_any_sync_with_global_time) { + for (int t=1; tnum_time_vals; + int num_obs = local_geary_coord->num_obs; + cat_data.CreateEmptyCategories(num_time, num_obs); + + for (int t=0; tGetHasIsolates(t)) + num_cats++; + if (local_geary_coord->GetHasUndefined(t)) + num_cats++; + + num_cats += 5; + + cat_data.CreateCategoriesAtCanvasTm(num_cats, t); + + Shapefile::Header& hdr = project->main_data.header; + + cat_data.SetCategoryLabel(t, 0, "Not Significant"); + + if (hdr.shape_type == Shapefile::POINT_TYP) { + cat_data.SetCategoryColor(t, 0, wxColour(190, 190, 190)); + } else { + cat_data.SetCategoryColor(t, 0, wxColour(240, 240, 240)); + } + cat_data.SetCategoryLabel(t, 1, "High-High"); + cat_data.SetCategoryColor(t, 1, wxColour(178,24,43)); + cat_data.SetCategoryLabel(t, 2, "Low-Low"); + cat_data.SetCategoryColor(t, 2, wxColour(239,138,98)); + cat_data.SetCategoryLabel(t, 3, "Other Pos"); + cat_data.SetCategoryColor(t, 3, wxColour(253,219,199)); + cat_data.SetCategoryLabel(t, 4, "Negative"); + cat_data.SetCategoryColor(t, 4, wxColour(103,173,199)); + if (local_geary_coord->GetHasIsolates(t) && + local_geary_coord->GetHasUndefined(t)) { + isolates_cat = 5; + undefined_cat = 6; + } else if (local_geary_coord->GetHasUndefined(t)) { + undefined_cat = 5; + } else if (local_geary_coord->GetHasIsolates(t)) { + isolates_cat = 5; + } + + if (undefined_cat != -1) { + cat_data.SetCategoryLabel(t, undefined_cat, "Undefined"); + cat_data.SetCategoryColor(t, undefined_cat, wxColour(70, 70, 70)); + } + if (isolates_cat != -1) { + cat_data.SetCategoryLabel(t, isolates_cat, "Neighborless"); + cat_data.SetCategoryColor(t, isolates_cat, wxColour(140, 140, 140)); + } + + double cuttoff = local_geary_coord->significance_cutoff; + double* p = local_geary_coord->sig_local_geary_vecs[t]; + int* cluster = local_geary_coord->cluster_vecs[t]; + int* sigCat = local_geary_coord->sig_cat_vecs[t]; + + for (int i=0, iend=local_geary_coord->num_obs; i cuttoff && cluster[i] != 5 && cluster[i] != 6) { + cat_data.AppendIdToCategory(t, 0, i); // not significant + } else if (cluster[i] == 5) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 6) { + cat_data.AppendIdToCategory(t, undefined_cat, i); + } else { + cat_data.AppendIdToCategory(t, cluster[i], i); + } + } + for (int cat=0; catvar_info[0].sync_with_global_time = !local_geary_coord->var_info[0].sync_with_global_time; + + VarInfoAttributeChange(); + CreateAndUpdateCategories(); + PopulateCanvas(); +} + +void ConditionalLocalGearyClusterMapCanvas::UpdateStatusBar() +{ + wxStatusBar* sb = template_frame->GetStatusBar(); + if (!sb) return; + + //int t = var_info[CAT_VAR].time; + int t = 0; + + const vector& hl = highlight_state->GetHighlight(); + wxString s; + if (highlight_state->GetTotalHighlighted()> 0) { + int n_total_hl = highlight_state->GetTotalHighlighted(); + s << "#selected=" << n_total_hl << " "; + + int n_undefs = 0; + for (int i=0; i 0) { + s << "(undefined:" << n_undefs << ") "; + } + } + if (mousemode == select && selectstate == start) { + if (total_hover_obs >= 1) { + s << "hover obs " << hover_obs[0]+1 << " = "; + s << local_geary_coord->cluster_vecs[t][hover_obs[0]]; + } + if (total_hover_obs >= 2) { + s << ", "; + s << "obs " << hover_obs[1]+1 << " = "; + s << local_geary_coord->cluster_vecs[t][hover_obs[1]]; + } + if (total_hover_obs >= 3) { + s << ", "; + s << "obs " << hover_obs[2]+1 << " = "; + s << local_geary_coord->cluster_vecs[t][hover_obs[2]]; + } + if (total_hover_obs >= 4) { + s << ", ..."; + } + } + sb->SetStatusText(s); +} diff --git a/Explore/ConditionalClusterMapView.h b/Explore/ConditionalClusterMapView.h index a1954e563..b2e99c31a 100644 --- a/Explore/ConditionalClusterMapView.h +++ b/Explore/ConditionalClusterMapView.h @@ -28,6 +28,8 @@ using namespace std; class LisaCoordinator; class GStatCoordinator; +class LocalGearyCoordinator; + class ConditionalClusterMapFrame; class ConditionalClusterMapCanvas; class ConditionalClusterMapLegend; @@ -134,6 +136,14 @@ class ConditionalClusterMapFrame : public ConditionalNewFrame { const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const long style = wxDEFAULT_FRAME_STYLE); + ConditionalClusterMapFrame(wxFrame *parent, Project* project, + const vector& var_info, + const vector& col_ids, + LocalGearyCoordinator* local_geary_coord, + const wxString& title = _("Conditional Local Geary Map"), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + const long style = wxDEFAULT_FRAME_STYLE); virtual ~ConditionalClusterMapFrame(); void OnActivate(wxActivateEvent& event); @@ -226,4 +236,31 @@ class ConditionalGClusterMapCanvas : public ConditionalClusterMapCanvas { virtual void UpdateStatusBar(); }; +//////////////////////////////////////////////////////////////////////////////// +// +// LocalGeary Cluster Conditional map +// +//////////////////////////////////////////////////////////////////////////////// +class ConditionalLocalGearyClusterMapCanvas : public ConditionalClusterMapCanvas { + //DECLARE_CLASS(ConditionalLocalGearyClusterMapCanvas) +public: + + ConditionalLocalGearyClusterMapCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + const vector& var_info, + const vector& col_ids, + LocalGearyCoordinator* local_geary_coordinator, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + + virtual ~ConditionalLocalGearyClusterMapCanvas(); + + virtual void CreateAndUpdateCategories(); + virtual void TimeSyncVariableToggle(int var_index); + +protected: + LocalGearyCoordinator* local_geary_coord; + virtual void UpdateStatusBar(); +}; #endif diff --git a/Explore/ConditionalHistogramView.cpp b/Explore/ConditionalHistogramView.cpp index b0cf9e871..ca359e438 100644 --- a/Explore/ConditionalHistogramView.cpp +++ b/Explore/ConditionalHistogramView.cpp @@ -69,9 +69,11 @@ full_map_redraw_needed(true), show_axes(true), scale_x_over_time(true), scale_y_over_time(true) { int hist_var_tms = data[HIST_VAR].shape()[0]; + data_stats.resize(hist_var_tms); data_sorted.resize(hist_var_tms); + // create bins for histogram for (int t=0; t undefs(num_obs, false); + for (int j=0; j(MAX_INTERVALS, num_obs); cur_intervals = GenUtils::min(max_intervals, default_intervals); if (num_obs > 49) { @@ -175,7 +186,7 @@ void ConditionalHistogramCanvas::ResizeSelectableShps(int virtual_scrn_w, int vs_w=virtual_scrn_w, vs_h=virtual_scrn_h; if (vs_w <= 0 && vs_h <= 0) GetVirtualSize(&vs_w, &vs_h); - double image_width, image_height; + //double image_width, image_height; bool ftwm = GetFitToWindowMode(); // last_scale_trans is only used in calls made to ApplyLastResizeToShp diff --git a/Explore/ConditionalMapView.cpp b/Explore/ConditionalMapView.cpp index 666bb85b4..6a6381142 100644 --- a/Explore/ConditionalMapView.cpp +++ b/Explore/ConditionalMapView.cpp @@ -543,6 +543,8 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, } if (bin_bm_redraw_needed) { + if (bin_w <= 0) bin_w = 1; + if (bin_h <= 0) bin_h = 1; bin_bm = new wxBitmap(bin_w, bin_h); wxMemoryDC dc(*bin_bm); dc.SetPen(*wxWHITE_PEN); @@ -602,16 +604,42 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, GdaShape* s; int vt = var_info[VERT_VAR].time; - for (int row=0; rowTimeChange(); UpdateTitle(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); } void ConditionalMapFrame::OnNewCustomCatClassifA() diff --git a/Explore/ConditionalScatterPlotView.cpp b/Explore/ConditionalScatterPlotView.cpp index 356a88f78..9352c1314 100644 --- a/Explore/ConditionalScatterPlotView.cpp +++ b/Explore/ConditionalScatterPlotView.cpp @@ -186,7 +186,7 @@ void ConditionalScatterPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, GetVirtualSize(&vs_w, &vs_h); } - double image_width, image_height; + //double image_width, image_height; // last_scale_trans is only used in calls made to ApplyLastResizeToShp // which are made in ScaterNewPlotView diff --git a/Explore/ConnectivityMapView.cpp b/Explore/ConnectivityMapView.cpp index bad832ee6..431defe02 100644 --- a/Explore/ConnectivityMapView.cpp +++ b/Explore/ConnectivityMapView.cpp @@ -288,7 +288,7 @@ void ConnectivityMapCanvas::UpdateFromSharedCore() { sel_cores.clear(); std::vector& sc_hs = shared_core_hs->GetHighlight(); - for (size_t i=0, sz=sc_hs.size(); iGetTableInt(); for (int i=0; iGetColData(col_ids[i], data[i]); diff --git a/Explore/GStatCoordinator.h b/Explore/GStatCoordinator.h index 00b727843..a1733a91b 100644 --- a/Explore/GStatCoordinator.h +++ b/Explore/GStatCoordinator.h @@ -39,6 +39,8 @@ #include "../VarTools.h" #include "../ShapeOperations/GalWeight.h" #include "../ShapeOperations/WeightsManStateObserver.h" +#include "../ShapeOperations/OGRDataAdapter.h" + class GetisOrdMapFrame; // instead of GStatCoordinatorObserver class GStatCoordinator; @@ -92,10 +94,34 @@ class GStatCoordinator : public WeightsManStateObserver int GetSignificanceFilter() { return significance_filter; } int permutations; // any number from 9 to 99999, 99 will be default - uint64_t GetLastUsedSeed() { return last_seed_used; } - void SetLastUsedSeed(uint64_t seed) { last_seed_used = seed; } + uint64_t GetLastUsedSeed() { + return last_seed_used; + } + + void SetLastUsedSeed(uint64_t seed) { + reuse_last_seed = true; + last_seed_used = seed; + // update global one + GdaConst::use_gda_user_seed = true; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + GdaConst::gda_user_seed = last_seed_used; + wxString val; + val << last_seed_used; + OGRDataAdapter::GetInstance().AddEntry("gda_user_seed", val.ToStdString()); + } + bool IsReuseLastSeed() { return reuse_last_seed; } - void SetReuseLastSeed(bool reuse) { reuse_last_seed = reuse; } + void SetReuseLastSeed(bool reuse) { + reuse_last_seed = reuse; + // update global one + GdaConst::use_gda_user_seed = reuse; + if (reuse) { + last_seed_used = GdaConst::gda_user_seed; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + } else { + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "0"); + } + } /** Implementation of WeightsManStateObserver interface */ virtual void update(WeightsManState* o); diff --git a/Explore/GetisOrdMapNewView.cpp b/Explore/GetisOrdMapNewView.cpp index 4a10112e8..23add735d 100644 --- a/Explore/GetisOrdMapNewView.cpp +++ b/Explore/GetisOrdMapNewView.cpp @@ -581,7 +581,7 @@ void GetisOrdMapFrame::OnSpecifySeedDlg(wxCommandEvent& event) wxString cur_val; cur_val << last_seed; - wxTextEntryDialog dlg(NULL, m, "Enter a seed value", cur_val); + wxTextEntryDialog dlg(NULL, m, "\nEnter a seed value", cur_val); if (dlg.ShowModal() != wxID_OK) return; dlg_val = dlg.GetValue(); dlg_val.Trim(true); @@ -880,7 +880,7 @@ void GetisOrdMapFrame::update(GStatCoordinator* o) GetisOrdMapCanvas* lc = (GetisOrdMapCanvas*) template_canvas; lc->SyncVarInfoFromCoordinator(); lc->CreateAndUpdateCategories(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); SetTitle(lc->GetCanvasTitle()); lc->Refresh(); } diff --git a/Explore/LineChartView.cpp b/Explore/LineChartView.cpp index ed1af6531..e8eb569b7 100644 --- a/Explore/LineChartView.cpp +++ b/Explore/LineChartView.cpp @@ -620,7 +620,7 @@ void LineChartFrame::OnGroup1Choice(wxCommandEvent& event) if (time2_selection == time1_selection) { if (time1_selection -1 >=0) choice_time1->SetSelection(time1_selection-1); - else if (time1_selection + 1 < choice_time1->GetCount()) { + else if (time1_selection + 1 < (int)choice_time1->GetCount()) { choice_time2->SetSelection(time1_selection+1); } else { choice_time1->SetSelection(-1); @@ -660,7 +660,7 @@ void LineChartFrame::OnGroup2Choice(wxCommandEvent& event) if (time2_selection == time1_selection) { if (time2_selection -1 >=0) choice_time1->SetSelection(time2_selection-1); - else if (time2_selection + 1 < choice_time2->GetCount()) { + else if (time2_selection + 1 < (int)choice_time2->GetCount()) { choice_time2->SetSelection(time2_selection+1); } else { choice_time2->SetSelection(-1); diff --git a/Explore/LisaCoordinator.cpp b/Explore/LisaCoordinator.cpp index ccc8381b5..648d8bf0c 100644 --- a/Explore/LisaCoordinator.cpp +++ b/Explore/LisaCoordinator.cpp @@ -17,6 +17,9 @@ * along with this program. If not, see . */ +#include +#include + #include #include #include @@ -25,6 +28,7 @@ #include "../ShapeOperations/RateSmoothing.h" #include "../ShapeOperations/Randik.h" #include "../ShapeOperations/WeightsManState.h" +#include "../ShapeOperations/WeightUtils.h" #include "../VarCalc/WeightsManInterface.h" #include "../logger.h" #include "../Project.h" @@ -125,6 +129,10 @@ undef_data(var_info_s.size()), last_seed_used(0), reuse_last_seed(false), row_standardize(row_standardize_s) { + reuse_last_seed = GdaConst::use_gda_user_seed; + if ( GdaConst::use_gda_user_seed) { + last_seed_used = GdaConst::gda_user_seed; + } TableInterface* table_int = project->GetTableInt(); for (int i=0; iGetLongDispName(w_id); + + weights = w_man_int->GetGal(w_id); + SetSignificanceFilter(1); InitFromVarInfo(); @@ -143,9 +154,101 @@ row_standardize(row_standardize_s) } +LisaCoordinator:: +LisaCoordinator(wxString weights_path, + int n, + std::vector vals_1, + std::vector vals_2, + int lisa_type_s, + int permutations_s, + bool calc_significances_s, + bool row_standardize_s) +{ + num_obs = n; + num_time_vals = 1; + permutations = permutations_s; + calc_significances = calc_significances_s; + row_standardize = row_standardize_s; + last_seed_used = 0; + reuse_last_seed = false; + isBivariate = false; + + // std::vector var_info; + int num_vars = 1; + isBivariate = false; + + if (lisa_type_s == 0) { + lisa_type = univariate; + + } else if (lisa_type_s == 1) { + lisa_type = bivariate; + isBivariate = true; + num_vars = 2; + + } else if (lisa_type_s == 2) { + lisa_type = eb_rate_standardized; + num_vars = 2; + + } else if (lisa_type_s == 3) { + lisa_type = differential; + num_vars = 2; + } + + undef_tms.resize(num_time_vals); + data.resize(num_vars); + undef_data.resize(num_vars); + var_info.resize(num_vars); + + // don't handle time variable for now + for (int i=0; inum_obs = num_obs; + weights->wflnm = weights_path; + weights->id_field = "ogc_fid"; + weights->gal = tempGal; + + SetSignificanceFilter(1); + InitFromVarInfo(); +} + LisaCoordinator::~LisaCoordinator() { - w_man_state->removeObserver(this); + if (w_man_state) { + w_man_state->removeObserver(this); + } DeallocateVectors(); } @@ -413,7 +516,9 @@ void LisaCoordinator::StandardizeData() } if (isBivariate) { for (int i=0; i t ) { + undef_tms[t][i] = undef_tms[t][i] || undef_data[1][t][i]; + } } } } @@ -421,7 +526,8 @@ void LisaCoordinator::StandardizeData() for (int t=0; t t) + GenUtils::StandardizeData(num_obs, data2_vecs[t], undef_tms[t]); } } } @@ -448,7 +554,8 @@ void LisaCoordinator::CalcLisa() for (int i=0; i t) + is_undef = is_undef || undef_data[1][t][i]; } if (is_undef && !has_undef) { has_undef = true; @@ -460,14 +567,14 @@ void LisaCoordinator::CalcLisa() // local weights copy GalWeight* gw = NULL; if ( has_undef ) { - gw = new GalWeight(*w_man_int->GetGal(w_id)); + gw = new GalWeight(*weights); gw->Update(undefs); } else { - gw = w_man_int->GetGal(w_id); + gw = weights; } GalElement* W = gw->gal; Gal_vecs.push_back(gw); - Gal_vecs_orig.push_back(w_man_int->GetGal(w_id)); + Gal_vecs_orig.push_back(weights); for (int i=0; igal, undefs); + //CalcPseudoP_range(Gal_vecs[t]->gal, undefs, + // 0, num_obs-1, last_seed_used); } } @@ -555,17 +664,18 @@ void LisaCoordinator::CalcPseudoP_threaded(const GalElement* W, const std::vector& undefs) { int nCPUs = wxThread::GetCPUCount(); - + // mutext protects access to the worker_list wxMutex worker_list_mutex; // signals that worker_list is empty wxCondition worker_list_empty_cond(worker_list_mutex); - worker_list_mutex.Lock(); // mutex should be initially locked + // mutex should be initially locked + worker_list_mutex.Lock(); // List of all the threads currently alive. As soon as the thread // terminates, it removes itself from the list. std::list worker_list; - + // divide up work according to number of observations // and number of CPUs int work_chunk = num_obs / nCPUs; @@ -582,7 +692,10 @@ void LisaCoordinator::CalcPseudoP_threaded(const GalElement* W, int remainder = num_obs % nCPUs; int tot_threads = (quotient > 0) ? nCPUs : remainder; - if (!reuse_last_seed) last_seed_used = time(0); + boost::thread_group threadPool; + + if (!reuse_last_seed) + last_seed_used = time(0); for (int i=0; i" << b; msg << ", seed: " << seed_start << "->" << seed_end; + /* LisaWorkerThread* thread = new LisaWorkerThread(W, undefs, a, b, seed_start, this, &worker_list_mutex, @@ -611,7 +725,12 @@ void LisaCoordinator::CalcPseudoP_threaded(const GalElement* W, } else { worker_list.push_front(thread); } + */ + boost::thread* worker = new boost::thread(boost::bind(&LisaCoordinator::CalcPseudoP_range,this, W, undefs, a, b, seed_start)); + threadPool.add_thread(worker); } + threadPool.join_all(); + /* if (is_thread_error) { // fall back to single thread calculation mode CalcPseudoP_range(W, undefs, 0, num_obs-1, last_seed_used); @@ -628,6 +747,7 @@ void LisaCoordinator::CalcPseudoP_threaded(const GalElement* W, // alarm (sprious signal), the loop will exit. } } + */ } void LisaCoordinator::CalcPseudoP_range(const GalElement* W, @@ -719,7 +839,9 @@ void LisaCoordinator::SetSignificanceFilter(int filter_id) void LisaCoordinator::update(WeightsManState* o) { - weight_name = w_man_int->GetLongDispName(w_id); + if (w_man_int) { + weight_name = w_man_int->GetLongDispName(w_id); + } } int LisaCoordinator::numMustCloseToRemove(boost::uuids::uuid id) const diff --git a/Explore/LisaCoordinator.h b/Explore/LisaCoordinator.h index 73dc5e540..45cebf1b2 100644 --- a/Explore/LisaCoordinator.h +++ b/Explore/LisaCoordinator.h @@ -29,6 +29,8 @@ #include "../ShapeOperations/GeodaWeight.h" #include "../ShapeOperations/GalWeight.h" #include "../ShapeOperations/WeightsManStateObserver.h" +#include "../ShapeOperations/OGRDataAdapter.h" + class LisaCoordinatorObserver; class LisaCoordinator; @@ -74,7 +76,17 @@ class LisaCoordinator : public WeightsManStateObserver Project* project, const std::vector& var_info, const std::vector& col_ids, - LisaType lisa_type, bool calc_significances = true, + LisaType lisa_type, + bool calc_significances = true, + bool row_standardize_s = true); + + LisaCoordinator(wxString weights_path, + int n, + std::vector vals_1, + std::vector vals_2, + int lisa_type_s = 0, + int permutations_s = 599, + bool calc_significances_s = true, bool row_standardize_s = true); virtual ~LisaCoordinator(); @@ -94,11 +106,31 @@ class LisaCoordinator : public WeightsManStateObserver uint64_t GetLastUsedSeed() { return last_seed_used; } - void SetLastUsedSeed(uint64_t seed) { last_seed_used = seed; } + void SetLastUsedSeed(uint64_t seed) { + reuse_last_seed = true; + last_seed_used = seed; + // update global one + GdaConst::use_gda_user_seed = true; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + GdaConst::gda_user_seed = last_seed_used; + wxString val; + val << last_seed_used; + OGRDataAdapter::GetInstance().AddEntry("gda_user_seed", val.ToStdString()); + } bool IsReuseLastSeed() { return reuse_last_seed; } - void SetReuseLastSeed(bool reuse) { reuse_last_seed = reuse; } + void SetReuseLastSeed(bool reuse) { + reuse_last_seed = reuse; + // update global one + GdaConst::use_gda_user_seed = reuse; + if (reuse) { + last_seed_used = GdaConst::gda_user_seed; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + } else { + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "0"); + } + } /** Implementation of WeightsManStateObserver interface */ virtual void update(WeightsManState* o); @@ -195,6 +227,8 @@ class LisaCoordinator : public WeightsManStateObserver WeightsManState* w_man_state; WeightsManInterface* w_man_int; + + GalWeight* weights; }; #endif diff --git a/Explore/LisaMapNewView.cpp b/Explore/LisaMapNewView.cpp index f9333cbdc..c6c8cdef0 100644 --- a/Explore/LisaMapNewView.cpp +++ b/Explore/LisaMapNewView.cpp @@ -576,7 +576,7 @@ void LisaMapFrame::OnSpecifySeedDlg(wxCommandEvent& event) wxString m; m << "The last seed used by the pseudo random\nnumber "; m << "generator was " << last_seed << ".\n"; - m << "Enter a seed value to use between\n0 and "; + m << "\nEnter a seed value to use between\n0 and "; m << std::numeric_limits::max() << "."; long long unsigned int val; wxString dlg_val; @@ -876,7 +876,7 @@ void LisaMapFrame::update(LisaCoordinator* o) LisaMapCanvas* lc = (LisaMapCanvas*) template_canvas; lc->SyncVarInfoFromCoordinator(); lc->CreateAndUpdateCategories(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); SetTitle(lc->GetCanvasTitle()); lc->Refresh(); } diff --git a/Explore/LisaScatterPlotView.cpp b/Explore/LisaScatterPlotView.cpp index c95e26a26..39706287d 100644 --- a/Explore/LisaScatterPlotView.cpp +++ b/Explore/LisaScatterPlotView.cpp @@ -62,7 +62,8 @@ lisa_coord(lisa_coordinator), is_bi(lisa_coordinator->lisa_type == LisaCoordinator::bivariate), is_rate(lisa_coordinator->lisa_type == LisaCoordinator::eb_rate_standardized), is_diff(lisa_coordinator->lisa_type == LisaCoordinator::differential), -rand_dlg(0) +is_show_regimes_regression(false), +rand_dlg(0), morans_sel_text(NULL), morans_unsel_text(NULL) { show_reg_selected = false; show_reg_excluded = false; @@ -98,6 +99,12 @@ LisaScatterPlotCanvas::~LisaScatterPlotCanvas() } } +void LisaScatterPlotCanvas::ShowRegimesRegression(bool flag) +{ + is_show_regimes_regression = flag; + PopulateCanvas(); +} + void LisaScatterPlotCanvas::OnRandDlgClose( wxWindowDestroyEvent& event) { rand_dlg = 0; @@ -229,6 +236,10 @@ void LisaScatterPlotCanvas::SetCheckMarks(wxMenu* menu) GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_USE_SPECIFIED_SEED"), lisa_coord->IsReuseLastSeed()); + + + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_VIEW_REGIMES_REGRESSION"), + is_show_regimes_regression); } void LisaScatterPlotCanvas::TimeChange() @@ -446,19 +457,17 @@ void LisaScatterPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, void LisaScatterPlotCanvas::PopulateCanvas() { - int n_hl = highlight_state->GetTotalHighlighted(); - // need to modify var_info temporarily for PopulateCanvas since - var_info_orig = var_info; - var_info = sp_var_info; + // need to modify var_info temporarily for PopulateCanvas since + var_info_orig = var_info; + var_info = sp_var_info; + ScatterNewPlotCanvas::PopulateCanvas(); - // sel vs unsel moran calculation - // for regressionXYselected and regressionXYexcluded - // UpdateRegSelectedLine - // UpdateRegExcludedLine - if (n_hl > 0) { + int n_hl = highlight_state->GetTotalHighlighted(); + + if (is_show_regimes_regression) { const std::vector& hl = highlight_state->GetHighlight(); int t = project->GetTimeState()->GetCurrTime(); int num_obs = lisa_coord->num_obs; @@ -482,8 +491,6 @@ void LisaScatterPlotCanvas::PopulateCanvas() (Y[i] - axis_scale_y.scale_min) * scaleY); pt->setPen(wxPen(wxColour(245,140,140))); pt->setBrush(*wxTRANSPARENT_BRUSH); - //ApplyLastResizeToShp(pt); - pt->applyScaleTrans(sub_scale); foreground_shps.insert(foreground_shps.begin(), pt); @@ -505,7 +512,6 @@ void LisaScatterPlotCanvas::PopulateCanvas() ex_scale.calcAffineParams(); for (int i=0; i& undefs, lisa_coord->GetRawData(t, data1, data2); - GenUtils::StandardizeData(num_obs, data1, undefs); + GenUtils::StandardizeData(num_obs, data1); if (lisa_coord->isBivariate) { - GenUtils::StandardizeData(num_obs, data2, undefs); + GenUtils::StandardizeData(num_obs, data2); } std::vector XY_undefs; @@ -724,19 +731,86 @@ void LisaScatterPlotCanvas::RegimeMoran(std::vector& undefs, } void LisaScatterPlotCanvas::UpdateSelection(bool shiftdown, bool pointsel) -{ +{ + int n_hl = highlight_state->GetTotalHighlighted(); + if (n_hl > 0 && is_show_regimes_regression) { + /* + const std::vector& hl = highlight_state->GetHighlight(); + + int t = project->GetTimeState()->GetCurrTime(); + int num_obs = lisa_coord->num_obs; + + std::vector undefs(num_obs, false); + for (int i=0; iundef_tms[t][i] || !hl[i]; + foreground_shps.pop_front(); + } + std::vector X; + std::vector Y; + RegimeMoran(undefs, regressionXYselected, X, Y); + + GdaScaleTrans sub_scale; + sub_scale = last_scale_trans; + sub_scale.right_margin= sub_scale.screen_width - sub_scale.trans_x + 50; + sub_scale.left_margin = 40; + sub_scale.calcAffineParams(); + + for (int i=0; isetPen(wxPen(wxColour(245,140,140))); + pt->setBrush(*wxTRANSPARENT_BRUSH); + pt->applyScaleTrans(sub_scale); + + foreground_shps.insert(foreground_shps.begin(), pt); + } + + undefs.clear(); + undefs.resize(num_obs, false); + for (int i=0; iundef_tms[t][i] || hl[i]; + } + std::vector X_ex; + std::vector Y_ex; + RegimeMoran(undefs, regressionXYexcluded, X_ex, Y_ex); + + GdaScaleTrans ex_scale; + ex_scale = last_scale_trans; + ex_scale.left_margin= ex_scale.trans_x + ex_scale.data_x_max * ex_scale.scale_x + 45; + ex_scale.right_margin = 5; + ex_scale.calcAffineParams(); + + for (int i=0; isetPen(wxPen(wxColour(100,100,100))); + pt->setBrush(*wxTRANSPARENT_BRUSH); + pt->applyScaleTrans(ex_scale); + foreground_shps.insert(foreground_shps.begin(),pt); + } + + + UpdateRegSelectedLine(); + UpdateRegExcludedLine(); + + if (morans_sel_text) { + wxString str = wxString::Format("selected: %.4f", regressionXYselected.beta); + morans_sel_text->setText(str); + } + if (morans_unsel_text) { + wxString str1 = wxString::Format("unselected: %.4f", regressionXYexcluded.beta); + morans_unsel_text->setText(str1); + } + //Refresh(); + */ + PopulateCanvas(); + } TemplateCanvas::UpdateSelection(shiftdown, pointsel); - - invalidateBms(); - PopulateCanvas(); - - // Call TemplateCanvas::update to redraw objects as needed. - //TemplateCanvas::update(highlight_stateo); - - Refresh(); } + void LisaScatterPlotCanvas::update(HLStateInt* o) { invalidateBms(); @@ -920,6 +994,13 @@ LisaScatterPlotFrame::~LisaScatterPlotFrame() } } +void LisaScatterPlotFrame::OnViewRegimesRegression( wxCommandEvent& event) +{ + ((LisaScatterPlotCanvas*) template_canvas)->ShowRegimesRegression(event.IsChecked()); + + UpdateOptionMenuItems(); +} + void LisaScatterPlotFrame::OnUseSpecifiedSeed(wxCommandEvent& event) { lisa_coord->SetReuseLastSeed(!lisa_coord->IsReuseLastSeed()); @@ -946,7 +1027,7 @@ void LisaScatterPlotFrame::OnSpecifySeedDlg(wxCommandEvent& event) if (dlg_val.IsEmpty()) return; if (dlg_val.ToULongLong(&val)) { if (!lisa_coord->IsReuseLastSeed()) - lisa_coord->SetLastUsedSeed(true); + lisa_coord->SetReuseLastSeed(true); uint64_t new_seed_val = val; lisa_coord->SetLastUsedSeed(new_seed_val); } else { diff --git a/Explore/LisaScatterPlotView.h b/Explore/LisaScatterPlotView.h index 2997cacc3..54887ae8b 100644 --- a/Explore/LisaScatterPlotView.h +++ b/Explore/LisaScatterPlotView.h @@ -58,12 +58,16 @@ class LisaScatterPlotCanvas : public ScatterNewPlotCanvas void UpdateRegSelectedLine(); void UpdateRegExcludedLine(); + void ShowRegimesRegression(bool flag); + + protected: void RegimeMoran(std::vector& undefs, SimpleLinearRegression& regime_lreg, std::vector& X, std::vector& Y); void OnRandDlgClose( wxWindowDestroyEvent& event); + virtual void PopulateCanvas(); virtual void PopCanvPreResizeShpsHook(); LisaCoordinator* lisa_coord; @@ -74,6 +78,9 @@ class LisaScatterPlotCanvas : public ScatterNewPlotCanvas std::vector var_info_orig; RandomizationDlg* rand_dlg; GdaShapeText* morans_i_text; + bool is_show_regimes_regression; + GdaShapeText* morans_sel_text; + GdaShapeText* morans_unsel_text; DECLARE_EVENT_TABLE() }; @@ -86,7 +93,7 @@ class LisaScatterPlotFrame : public ScatterNewPlotFrame, LisaScatterPlotFrame(wxFrame *parent, Project* project, LisaCoordinator* lisa_coordinator, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxSize(860, 530), + const wxSize& size = wxSize(600, 360), const long style = wxDEFAULT_FRAME_STYLE); virtual ~LisaScatterPlotFrame(); @@ -97,6 +104,7 @@ class LisaScatterPlotFrame : public ScatterNewPlotFrame, void OnUseSpecifiedSeed(wxCommandEvent& event); void OnSpecifySeedDlg(wxCommandEvent& event); + void OnViewRegimesRegression(wxCommandEvent& event); void RanXPer(int permutation); void OnRan99Per(wxCommandEvent& event); diff --git a/Explore/LocalGearyCoordinator.cpp b/Explore/LocalGearyCoordinator.cpp new file mode 100644 index 000000000..f76ee65fa --- /dev/null +++ b/Explore/LocalGearyCoordinator.cpp @@ -0,0 +1,1122 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include "../DataViewer/TableInterface.h" +#include "../ShapeOperations/RateSmoothing.h" +#include "../ShapeOperations/Randik.h" +#include "../ShapeOperations/WeightsManState.h" +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/WeightUtils.h" + +#include "../logger.h" +#include "../Project.h" +#include "LocalGearyCoordinatorObserver.h" +#include "LocalGearyCoordinator.h" + +LocalGearyWorkerThread::LocalGearyWorkerThread(const GalElement* W_, + const std::vector& undefs_, + int obs_start_s, int obs_end_s, + uint64_t seed_start_s, + LocalGearyCoordinator* local_geary_coord_s, + wxMutex* worker_list_mutex_s, + wxCondition* worker_list_empty_cond_s, + std::list *worker_list_s, + int thread_id_s) +: wxThread(), +W(W_), +undefs(undefs_), +obs_start(obs_start_s), obs_end(obs_end_s), seed_start(seed_start_s), +local_geary_coord(local_geary_coord_s), +worker_list_mutex(worker_list_mutex_s), +worker_list_empty_cond(worker_list_empty_cond_s), +worker_list(worker_list_s), +thread_id(thread_id_s) +{ +} + +LocalGearyWorkerThread::~LocalGearyWorkerThread() +{ +} + +wxThread::ExitCode LocalGearyWorkerThread::Entry() +{ + LOG_MSG(wxString::Format("LocalGearyWorkerThread %d started", thread_id)); + + // call work for assigned range of observations + local_geary_coord->CalcPseudoP_range(W, undefs, obs_start, obs_end, seed_start); + + wxMutexLocker lock(*worker_list_mutex); + + // remove ourself from the list + worker_list->remove(this); + + // if empty, signal on empty condition since only main thread + // should be waiting on this condition + if (worker_list->empty()) { + worker_list_empty_cond->Signal(); + } + + return NULL; +} + +/** + Since the user has the ability to synchronise either variable over time, + we must be able to reapply weights and recalculate local_geary values as needed. + + 1. We will have original data as complete space-time data for both variables + + 2. From there we will work from info in var_info for both variables. Must + determine number of time_steps for canvas. + + 3. Adjust data1(2)_vecs sizes and initialize from data. + + 3.5. Resize localGeary, siglocalGeary, sigCat, and cluster arrays + + 4. If rates, then calculate rates for working_data1 + + 5. Standardize working_data1 (and 2 if bivariate) + + 6. Compute LocalGeary for all time-stesp and save in localGeary sp/time array + + 7. Calc Pseudo P for all time periods. Results saved in siglocalGeary, + sigCat and cluster arrays + + 8. Notify clients that values have been updated. + + */ + +LocalGearyCoordinator:: +LocalGearyCoordinator(boost::uuids::uuid weights_id, + Project* project, + const std::vector& var_info_s, + const std::vector& col_ids, + LocalGearyType local_geary_type_s, + bool calc_significances_s, + bool row_standardize_s) +: w_man_state(project->GetWManState()), +w_man_int(project->GetWManInt()), +w_id(weights_id), +num_obs(project->GetNumRecords()), +permutations(999), +local_geary_type(local_geary_type_s), +calc_significances(calc_significances_s), +isBivariate(local_geary_type_s == bivariate), +var_info(var_info_s), +data(var_info_s.size()), +undef_data(var_info_s.size()), +last_seed_used(0), reuse_last_seed(false), +row_standardize(row_standardize_s) +{ + reuse_last_seed = GdaConst::use_gda_user_seed; + if ( GdaConst::use_gda_user_seed) { + last_seed_used = GdaConst::gda_user_seed; + } + + TableInterface* table_int = project->GetTableInt(); + for (int i=0; iGetColData(col_ids[i], data[i]); + table_int->GetColUndefined(col_ids[i], undef_data[i]); + var_info[i].is_moran = true; + } + + num_vars = var_info.size(); + + weight_name = w_man_int->GetLongDispName(w_id); + + weights = w_man_int->GetGal(w_id); + + SetSignificanceFilter(1); + + InitFromVarInfo(); + w_man_state->registerObserver(this); +} + +LocalGearyCoordinator:: +LocalGearyCoordinator(wxString weights_path, + int n, + std::vector >& vars, + int permutations_s, + bool calc_significances_s, + bool row_standardize_s) +{ + reuse_last_seed = GdaConst::use_gda_user_seed; + if ( GdaConst::use_gda_user_seed) { + last_seed_used = GdaConst::gda_user_seed; + } + + isBivariate = false; + num_obs = n; + num_time_vals = 1; + permutations = permutations_s; + calc_significances = calc_significances_s; + row_standardize = row_standardize_s; + last_seed_used = 0; + reuse_last_seed = false; + + // std::vector var_info; + num_vars = vars.size(); + + if (num_vars == 1) { + local_geary_type = univariate; + } else { + local_geary_type = multivariate; + } + undef_tms.resize(num_time_vals); + data.resize(num_vars); + undef_data.resize(num_vars); + var_info.resize(num_vars); + + // don't handle time variable for now + for (int i=0; inum_obs = num_obs; + weights->wflnm = weights_path; + weights->id_field = "ogc_fid"; + weights->gal = tempGal; + + SetSignificanceFilter(1); + InitFromVarInfo(); +} + +LocalGearyCoordinator::~LocalGearyCoordinator() +{ + if (w_man_state) { + w_man_state->removeObserver(this); + } + DeallocateVectors(); +} + +void LocalGearyCoordinator::DeallocateVectors() +{ + for (int i=0; i undef_res(num_obs, false); + double* smoothed_results = new double[num_obs]; + double* E = new double[num_obs]; // E corresponds to var_info[0] + double* P = new double[num_obs]; // P corresponds to var_info[1] + // we will only fill data1 for eb_rate_standardized and + // further local_geary calcs will treat as univariate + for (int t=0; t undef_res(num_obs, false); + double* smoothed_results = new double[num_obs]; + double* E = new double[num_obs]; // E corresponds to var_info[0] + double* P = new double[num_obs]; // P corresponds to var_info[1] + // we will only fill data1 for eb_rate_standardized and + // further local_geary calcs will treat as univariate + for (int i=0; i undefs; + bool has_undef = false; + for (int i=0; iUpdate(undefs); + } else { + gw = weights; + } + GalElement* W = gw->gal; + Gal_vecs.push_back(gw); + Gal_vecs_orig.push_back(weights); + + + // local geary + lags = lags_vecs[t]; + localGeary = local_geary_vecs[t]; + cluster = cluster_vecs[t]; + has_isolates[t] = false; + + std::vector local_t; + for (int v=0; v 0) { + cluster[i] = 0; // don't assign cluster in multi-var settings + //if (data1[i] > 0 && lags[i] > 0) cluster[i] = 1; + //else if (data1[i] < 0 && lags[i] > 0) cluster[i] = 3; + //else if (data1[i] < 0 && lags[i] < 0) cluster[i] = 2; + //else cluster[i] = 4; //data1[i] > 0 && lags[i] < 0 + } else { + has_isolates[t] = true; + cluster[i] = 2; // neighborless + } + } + } +} + +/** assumes StandardizeData already called on data1 and data2 */ +void LocalGearyCoordinator::CalcLocalGeary() +{ + for (int t=0; t undefs; + bool has_undef = false; + for (int i=0; iUpdate(undefs); + } else { + gw = weights; + } + GalElement* W = gw->gal; + Gal_vecs.push_back(gw); + Gal_vecs_orig.push_back(weights); + + for (int i=0; i 0) { + if (data1[i] > 0 && Wdata > 0) cluster[i] = 1; + else if (data1[i] < 0 && Wdata > 0) cluster[i] = 3; + else if (data1[i] < 0 && Wdata < 0) cluster[i] = 2; + else cluster[i] = 4; //data1[i] > 0 && Wdata < 0 + } else { + has_isolates[t] = true; + cluster[i] = 5; // neighborless + } + } + } +} + +void LocalGearyCoordinator::CalcPseudoP() +{ + if (!calc_significances) return; + wxStopWatch sw; + int nCPUs = wxThread::GetCPUCount(); + + // To ensure thread safety, only work on one time slice of data + // at a time. For each time period t: + // 1. copy data for time period t into data1 and data2 arrays + // 2. Perform multi-threaded computation + // 3. copy results into results array + + if (local_geary_type == multivariate) { + current_data.resize(num_vars); + current_data_square.resize(num_vars); + } + + for (int t=0; t& undefs = undef_tms[t]; + + if (local_geary_type == multivariate) { + for (int v=0; vgal, undefs, 0, num_obs-1, last_seed_used); + } else { + CalcPseudoP_threaded(Gal_vecs[t]->gal, undefs); + } + } + + + { + wxString m; + m << "LocalGeary on " << num_obs << " obs with " << permutations; + m << " perms over " << num_time_vals << " time periods took "; + m << sw.Time() << " ms. Last seed used: " << last_seed_used; + } + LOG_MSG("Exiting LocalGearyCoordinator::CalcPseudoP"); +} + +void LocalGearyCoordinator::CalcPseudoP_threaded(const GalElement* W, + const std::vector& undefs) +{ + int nCPUs = wxThread::GetCPUCount(); + + // mutext protects access to the worker_list + wxMutex worker_list_mutex; + // signals that worker_list is empty + wxCondition worker_list_empty_cond(worker_list_mutex); + worker_list_mutex.Lock(); // mutex should be initially locked + + // List of all the threads currently alive. As soon as the thread + // terminates, it removes itself from the list. + std::list worker_list; + + // divide up work according to number of observations + // and number of CPUs + int work_chunk = num_obs / nCPUs; + + if (work_chunk == 0) { + work_chunk = 1; + } + + int obs_start = 0; + int obs_end = obs_start + work_chunk; + + bool is_thread_error = false; + int quotient = num_obs / nCPUs; + int remainder = num_obs % nCPUs; + int tot_threads = (quotient > 0) ? nCPUs : remainder; + + boost::thread_group threadPool; + + if (!reuse_last_seed) last_seed_used = time(0); + for (int i=0; i" << b; + msg << ", seed: " << seed_start << "->" << seed_end; + + /* + LocalGearyWorkerThread* thread = + new LocalGearyWorkerThread(W, undefs, a, b, seed_start, this, + &worker_list_mutex, + &worker_list_empty_cond, + &worker_list, thread_id); + if ( thread->Create() != wxTHREAD_NO_ERROR ) { + delete thread; + is_thread_error = true; + } else { + worker_list.push_front(thread); + } + */ + boost::thread* worker = new boost::thread(boost::bind(&LocalGearyCoordinator::CalcPseudoP_range,this, W, undefs, a, b, seed_start)); + threadPool.add_thread(worker); + } + threadPool.join_all(); + /* + if (is_thread_error) { + // fall back to single thread calculation mode + CalcPseudoP_range(W, undefs, 0, num_obs-1, last_seed_used); + } else { + std::list::iterator it; + for (it = worker_list.begin(); it != worker_list.end(); it++) { + (*it)->Run(); + } + + while (!worker_list.empty()) { + // wait until thread_list might be empty + worker_list_empty_cond.Wait(); + // We have been woken up. If this was not a false + // alarm (sprious signal), the loop will exit. + } + } + */ +} + +void LocalGearyCoordinator::CalcPseudoP_range(const GalElement* W, + const std::vector& undefs, + int obs_start, int obs_end, + uint64_t seed_start) +{ + GeoDaSet workPermutation(num_obs); + //Randik rng; + int max_rand = num_obs-1; + for (int cnt=obs_start; cnt<=obs_end; cnt++) { + + if (undefs[cnt]) + continue; + + uint64_t countLarger = 0; + const int numNeighbors = W[cnt].Size(); + + double *gci = new double[permutations]; + double gci_sum = 0.0; + + uint64_t o_seed = seed_start; + + for (int perm=0; perm 2 && cluster[cnt] < 5) // ignore neighborless & undefined + cluster[cnt] = 3; + } + } else { + // negative lisasign[cnt] = -1 + for (int perm=0; perm localGeary[cnt]) { + countLarger++; + } + } + if (local_geary_type == multivariate) { + if (cluster[cnt] < 2) // ignore neighborless & undefined + cluster[cnt] = 0; // for multivar, only show significant positive (similar) + } else { + // negative + if (cluster[cnt] < 5) // ignore neighborless & undefined + cluster[cnt] = 4; + } + } + + int kp = local_geary_type == multivariate ? num_vars : 1; + siglocalGeary[cnt] = (countLarger+1.0)/(permutations+1); + + // 'significance' of local Moran + if (siglocalGeary[cnt] <= 0.0001 / kp) sigCat[cnt] = 4; + else if (siglocalGeary[cnt] <= 0.001 / kp) sigCat[cnt] = 3; + else if (siglocalGeary[cnt] <= 0.01 / kp) sigCat[cnt] = 2; + else if (siglocalGeary[cnt] <= 0.05 / kp) sigCat[cnt]= 1; + else sigCat[cnt]= 0; + + // observations with no neighbors get marked as isolates + // NOTE: undefined should be marked as well, however, since undefined_cat has covered undefined category, we don't need to handle here + if (numNeighbors == 0) { + sigCat[cnt] = 5; + } + } +} + +void LocalGearyCoordinator::SetSignificanceFilter(int filter_id) +{ + // 0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + if (filter_id < 1 || filter_id > 4) return; + significance_filter = filter_id; + + int kp = local_geary_type == multivariate ? num_vars : 1; + + if (filter_id == 1) significance_cutoff = 0.05 / kp; + if (filter_id == 2) significance_cutoff = 0.01 / kp; + if (filter_id == 3) significance_cutoff = 0.001 / kp; + if (filter_id == 4) significance_cutoff = 0.0001 / kp; +} + +void LocalGearyCoordinator::update(WeightsManState* o) +{ + if (w_man_int) { + weight_name = w_man_int->GetLongDispName(w_id); + } +} + +int LocalGearyCoordinator::numMustCloseToRemove(boost::uuids::uuid id) const +{ + return id == w_id ? observers.size() : 0; +} + +void LocalGearyCoordinator::closeObserver(boost::uuids::uuid id) +{ + if (numMustCloseToRemove(id) == 0) return; + std::list obs_cpy = observers; + for (std::list::iterator i=obs_cpy.begin(); + i != obs_cpy.end(); ++i) { + (*i)->closeObserver(this); + } +} + +void LocalGearyCoordinator::registerObserver(LocalGearyCoordinatorObserver* o) +{ + observers.push_front(o); +} + +void LocalGearyCoordinator::removeObserver(LocalGearyCoordinatorObserver* o) +{ + LOG_MSG("Entering LocalGearyCoordinator::removeObserver"); + observers.remove(o); + LOG(observers.size()); + if (observers.size() == 0) { + delete this; + } + LOG_MSG("Exiting LocalGearyCoordinator::removeObserver"); +} + +void LocalGearyCoordinator::notifyObservers() +{ + for (std::list::iterator it=observers.begin(); + it != observers.end(); ++it) { + (*it)->update(this); + } +} + diff --git a/Explore/LocalGearyCoordinator.h b/Explore/LocalGearyCoordinator.h new file mode 100644 index 000000000..94eee7d47 --- /dev/null +++ b/Explore/LocalGearyCoordinator.h @@ -0,0 +1,244 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_LOCALGEARY_COORDINATOR_H__ +#define __GEODA_CENTER_LOCALGEARY_COORDINATOR_H__ + +#include +#include +#include +#include +#include +#include "../VarTools.h" +#include "../ShapeOperations/GeodaWeight.h" +#include "../ShapeOperations/GalWeight.h" +#include "../ShapeOperations/WeightsManStateObserver.h" +#include "../ShapeOperations/OGRDataAdapter.h" + + +class LocalGearyCoordinatorObserver; +class LocalGearyCoordinator; +class Project; +class WeightsManState; +typedef boost::multi_array d_array_type; +typedef boost::multi_array b_array_type; + +class LocalGearyWorkerThread : public wxThread +{ +public: + LocalGearyWorkerThread(const GalElement* W, + const std::vector& undefs, + int obs_start, int obs_end, uint64_t seed_start, + LocalGearyCoordinator* local_geary_coord, + wxMutex* worker_list_mutex, + wxCondition* worker_list_empty_cond, + std::list *worker_list, + int thread_id); + virtual ~LocalGearyWorkerThread(); + virtual void* Entry(); // thread execution starts here + + const GalElement* W; + const std::vector& undefs; + int obs_start; + int obs_end; + uint64_t seed_start; + int thread_id; + + LocalGearyCoordinator* local_geary_coord; + wxMutex* worker_list_mutex; + wxCondition* worker_list_empty_cond; + std::list *worker_list; +}; + +class LocalGearyCoordinator : public WeightsManStateObserver +{ +public: + // #9 + enum LocalGearyType { univariate, bivariate, eb_rate_standardized, differential, multivariate }; + + LocalGearyCoordinator(boost::uuids::uuid weights_id, + Project* project, + const std::vector& var_info, + const std::vector& col_ids, + LocalGearyType local_geary_type, bool calc_significances = true, + bool row_standardize_s = true); + + LocalGearyCoordinator(wxString weights_path, + int n, + std::vector >& vars, + int permutations_s = 599, + bool calc_significances_s = true, + bool row_standardize_s = true); + + virtual ~LocalGearyCoordinator(); + + bool IsOk() { return true; } + wxString GetErrorMessage() { return "Error Message"; } + + int significance_filter; // 0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + + double significance_cutoff; // either 0.05, 0.01, 0.001 or 0.0001 + + void SetSignificanceFilter(int filter_id); + + int GetSignificanceFilter() { return significance_filter; } + + int permutations; // any number from 9 to 99999, 99 will be default + + uint64_t GetLastUsedSeed() { return last_seed_used; } + + void SetLastUsedSeed(uint64_t seed) { + reuse_last_seed = true; + last_seed_used = seed; + // update global one + GdaConst::use_gda_user_seed = true; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + GdaConst::gda_user_seed = last_seed_used; + wxString val; + val << last_seed_used; + OGRDataAdapter::GetInstance().AddEntry("gda_user_seed", val.ToStdString()); + } + + bool IsReuseLastSeed() { return reuse_last_seed; } + + void SetReuseLastSeed(bool reuse) { + reuse_last_seed = reuse; + // update global one + GdaConst::use_gda_user_seed = reuse; + if (reuse) { + last_seed_used = GdaConst::gda_user_seed; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + } else { + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "0"); + } + } + + /** Implementation of WeightsManStateObserver interface */ + virtual void update(WeightsManState* o); + + virtual int numMustCloseToRemove(boost::uuids::uuid id) const; + + virtual void closeObserver(boost::uuids::uuid id); + +protected: + // The following seven are just temporary pointers into the corresponding + // space-time data arrays below + double* lags; + double* localGeary; // The LocalGeary + double* siglocalGeary; // The significances / pseudo p-vals + // The significance category, generated from siglocalGeary and + // significance cuttoff values below. When saving results to Table, + // only results below significance_cuttoff are non-zero, but sigCat + // results themeslves never change. + //0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + int* sigCat; + // not-sig=0 HH=1, LL=2, HL=3, LH=4, isolate=5, undef=6. Note: value of + // 0 never appears in cluster itself, it only appears when + // saving results to the Table and indirectly in the map legend + int* cluster; + double* data1; + double* data1_square; + double* data2; + + std::vector current_data; + std::vector current_data_square; + +public: + std::vector lags_vecs; + std::vector local_geary_vecs; + std::vector sig_local_geary_vecs; + std::vector sig_cat_vecs; + std::vector cluster_vecs; + + std::vector data1_vecs; + std::vector data1_square_vecs; + std::vector data2_vecs; + + boost::uuids::uuid w_id; + std::vector Gal_vecs; + std::vector Gal_vecs_orig; + //const GalElement* W; + + wxString weight_name; + bool isBivariate; + LocalGearyType local_geary_type; + + int num_vars; + int num_obs; // total # obs including neighborless obs + int num_time_vals; // number of valid time periods based on var_info + + // These two variables should be empty for LocalGearyMapCanvas + std::vector data; // data[variable][time][obs] + std::vector undef_data; // undef_data[variable][time][obs] + + std::vector > undef_tms; + + // These are for multi variable LocalGeary + std::vector > data_vecs; + std::vector > data_square_vecs; + + // All LocalGearyMapCanvas objects synchronize themselves + // from the following 6 variables. + int ref_var_index; + std::vector var_info; + bool is_any_time_variant; + bool is_any_sync_with_global_time; + std::vector map_valid; + std::vector map_error_message; + + bool GetHasIsolates(int time) { return has_isolates[time]; } + bool GetHasUndefined(int time) { return has_undefined[time]; } + + void registerObserver(LocalGearyCoordinatorObserver* o); + void removeObserver(LocalGearyCoordinatorObserver* o); + void notifyObservers(); + /** The list of registered observer objects. */ + std::list observers; + + void CalcPseudoP(); + void CalcPseudoP_range(const GalElement* W, const std::vector& undefs, + int obs_start, int obs_end, uint64_t seed_start); + + void InitFromVarInfo(); + void VarInfoAttributeChange(); + + void GetRawData(int time, double* data1, double* data2); + +protected: + void DeallocateVectors(); + void AllocateVectors(); + + void CalcPseudoP_threaded(const GalElement* W, const std::vector& undefs); + void CalcLocalGeary(); + void CalcMultiLocalGeary(); + void StandardizeData(); + std::vector has_undefined; + std::vector has_isolates; + bool row_standardize; + bool calc_significances; // if false, then p-vals will never be needed + uint64_t last_seed_used; + bool reuse_last_seed; + + WeightsManState* w_man_state; + WeightsManInterface* w_man_int; + + GalWeight* weights; +}; + +#endif diff --git a/Explore/LocalGearyCoordinatorObserver.h b/Explore/LocalGearyCoordinatorObserver.h new file mode 100644 index 000000000..f17edae12 --- /dev/null +++ b/Explore/LocalGearyCoordinatorObserver.h @@ -0,0 +1,32 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_LOCALGEARY_COORDINATOR_OBSERVER_H__ +#define __GEODA_CENTER_LOCALGEARY_COORDINATOR_OBSERVER_H__ + +class LocalGearyCoordinator; // forward declaration + +class LocalGearyCoordinatorObserver { +public: + virtual void update(LocalGearyCoordinator* o) = 0; + /** Request for the Observer to close itself */ + virtual void closeObserver(LocalGearyCoordinator* o) = 0; +}; + +#endif diff --git a/Explore/LocalGearyMapNewView.cpp b/Explore/LocalGearyMapNewView.cpp new file mode 100644 index 000000000..8bea89a93 --- /dev/null +++ b/Explore/LocalGearyMapNewView.cpp @@ -0,0 +1,979 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include "../DataViewer/TableInterface.h" +#include "../DataViewer/TimeState.h" +#include "../GeneralWxUtils.h" +#include "../GeoDa.h" +#include "../logger.h" +#include "../Project.h" +#include "../DialogTools/PermutationCounterDlg.h" +#include "../DialogTools/SaveToTableDlg.h" +#include "../DialogTools/VariableSettingsDlg.h" +#include "ConditionalClusterMapView.h" +#include "LocalGearyCoordinator.h" +#include "LocalGearyMapNewView.h" +#include "../ShpFile.h" + +IMPLEMENT_CLASS(LocalGearyMapCanvas, MapCanvas) +BEGIN_EVENT_TABLE(LocalGearyMapCanvas, MapCanvas) + EVT_PAINT(TemplateCanvas::OnPaint) + EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) + EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) + EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) +END_EVENT_TABLE() + +using namespace std; + +LocalGearyMapCanvas::LocalGearyMapCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + LocalGearyCoordinator* local_geary_coordinator, + CatClassification::CatClassifType theme_type_s, + bool isBivariate, bool isEBRate, + const wxPoint& pos, const wxSize& size) +:MapCanvas(parent, t_frame, project, + vector(0), vector(0), + CatClassification::no_theme, + no_smoothing, 1, boost::uuids::nil_uuid(), pos, size), +local_geary_coord(local_geary_coordinator), +is_clust(theme_type_s==CatClassification::local_geary_categories), +is_bi(isBivariate), +is_rate(isEBRate), +is_diff(local_geary_coordinator->local_geary_type == LocalGearyCoordinator::differential) +{ + LOG_MSG("Entering LocalGearyMapCanvas::LocalGearyMapCanvas"); + + cat_classif_def.cat_classif_type = theme_type_s; + // must set var_info times from LocalGearyCoordinator initially + var_info = local_geary_coordinator->var_info; + template_frame->ClearAllGroupDependencies(); + for (int t=0, sz=var_info.size(); tAddGroupDependancy(var_info[t].name); + } + CreateAndUpdateCategories(); + + LOG_MSG("Exiting LocalGearyMapCanvas::LocalGearyMapCanvas"); +} + +LocalGearyMapCanvas::~LocalGearyMapCanvas() +{ + LOG_MSG("In LocalGearyMapCanvas::~LocalGearyMapCanvas"); +} + +void LocalGearyMapCanvas::DisplayRightClickMenu(const wxPoint& pos) +{ + LOG_MSG("Entering LocalGearyMapCanvas::DisplayRightClickMenu"); + // Workaround for right-click not changing window focus in OSX / wxW 3.0 + wxActivateEvent ae(wxEVT_NULL, true, 0, wxActivateEvent::Reason_Mouse); + ((LocalGearyMapFrame*) template_frame)->OnActivate(ae); + + wxMenu* optMenu = wxXmlResource::Get()-> + LoadMenu("ID_LISAMAP_NEW_VIEW_MENU_OPTIONS"); + AddTimeVariantOptionsToMenu(optMenu); + SetCheckMarks(optMenu); + + template_frame->UpdateContextMenuItems(optMenu); + template_frame->PopupMenu(optMenu, pos + GetPosition()); + template_frame->UpdateOptionMenuItems(); + LOG_MSG("Exiting LocalGearyMapCanvas::DisplayRightClickMenu"); +} + +wxString LocalGearyMapCanvas::GetCanvasTitle() +{ + wxString local_geary_t; + if (is_clust && !is_bi) local_geary_t = " LocalGeary Cluster Map"; + if (is_clust && is_bi) local_geary_t = " BiLocalGeary Cluster Map"; + if (is_clust && is_diff) local_geary_t = " Differential LocalGeary Cluster Map"; + + if (!is_clust && !is_bi) local_geary_t = " LocalGeary Significance Map"; + if (!is_clust && is_bi) local_geary_t = " BiLocalGeary Significance Map"; + if (!is_clust && is_diff) local_geary_t = " Differential Significance Map"; + + wxString field_t; + if (is_bi) { + field_t << GetNameWithTime(0) << " w/ " << GetNameWithTime(1); + } else if (is_diff) { + field_t << GetNameWithTime(0) << " - " << GetNameWithTime(1); + } else if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { + for (int i=0; inum_vars; i++) { + field_t << GetNameWithTime(i); + if (i < local_geary_coord->num_vars -1 ) + field_t << "/"; + } + + } else { + field_t << "C_" << GetNameWithTime(0); + } + if (is_rate) { + field_t << "EB Rate: " << GetNameWithTime(0); + field_t << " / " << GetNameWithTime(1); + } + + wxString ret; + ret << local_geary_t << ": " << local_geary_coord->weight_name << ", "; + ret << field_t << " (" << local_geary_coord->permutations << " perm)"; + return ret; +} + +/** This method definition is empty. It is here to override any call + to the parent-class method since smoothing and theme changes are not + supported by LocalGeary maps */ +bool +LocalGearyMapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, + SmoothingType new_map_smoothing) +{ + LOG_MSG("In LocalGearyMapCanvas::ChangeMapType"); + return false; +} + +void LocalGearyMapCanvas::SetCheckMarks(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + + MapCanvas::SetCheckMarks(menu); + + int sig_filter = local_geary_coord->GetSignificanceFilter(); + + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_05"), + sig_filter == 1); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_01"), + sig_filter == 2); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_001"), + sig_filter == 3); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_0001"), + sig_filter == 4); + + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_USE_SPECIFIED_SEED"), + local_geary_coord->IsReuseLastSeed()); +} + +void LocalGearyMapCanvas::TimeChange() +{ + LOG_MSG("Entering LocalGearyMapCanvas::TimeChange"); + if (!is_any_sync_with_global_time) return; + + int cts = project->GetTimeState()->GetCurrTime(); + int ref_time = var_info[ref_var_index].time; + int ref_time_min = var_info[ref_var_index].time_min; + int ref_time_max = var_info[ref_var_index].time_max; + + if ((cts == ref_time) || + (cts > ref_time_max && ref_time == ref_time_max) || + (cts < ref_time_min && ref_time == ref_time_min)) return; + if (cts > ref_time_max) { + ref_time = ref_time_max; + } else if (cts < ref_time_min) { + ref_time = ref_time_min; + } else { + ref_time = cts; + } + for (int i=0; iGetHasIsolates(t)) + num_cats++; + if (local_geary_coord->GetHasUndefined(t)) + num_cats++; + if (is_clust) { + if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { + num_cats += 2; + } else if (local_geary_coord->local_geary_type == LocalGearyCoordinator::bivariate) { + num_cats += 3; + } else { + num_cats += 5; + } + } else { + // significance map + // 0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + int s_f = local_geary_coord->GetSignificanceFilter(); + num_cats += 6 - s_f; + + // issue #474 only show significance levels that can be mapped for the given number of permutations, e.g., for 99 it would stop at 0.01, for 999 at 0.001, etc. + double sig_cutoff = local_geary_coord->significance_cutoff; + int set_perm = local_geary_coord->permutations; + stop_sig = 1.0 / (1.0 + set_perm); + + if ( sig_cutoff >= 0.0001 && stop_sig > 0.0001) { + num_cats -= 1; + } + if ( sig_cutoff >= 0.001 && stop_sig > 0.001 ) { + num_cats -= 1; + } + if ( sig_cutoff >= 0.01 && stop_sig > 0.01 ) { + num_cats -= 1; + } + } + cat_data.CreateCategoriesAtCanvasTm(num_cats, t); + + Shapefile::Header& hdr = project->main_data.header; + + if (is_clust) { + cat_data.SetCategoryLabel(t, 0, "Not Significant"); + + if (hdr.shape_type == Shapefile::POINT_TYP) { + cat_data.SetCategoryColor(t, 0, wxColour(190, 190, 190)); + } else { + cat_data.SetCategoryColor(t, 0, wxColour(240, 240, 240)); + } + if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { + cat_data.SetCategoryLabel(t, 1, "Positive"); + cat_data.SetCategoryColor(t, 1, wxColour(51,110,161)); + + if (local_geary_coord->GetHasIsolates(t) && + local_geary_coord->GetHasUndefined(t)) { + isolates_cat = 2; + undefined_cat = 3; + } else if (local_geary_coord->GetHasUndefined(t)) { + undefined_cat = 2; + } else if (local_geary_coord->GetHasIsolates(t)) { + isolates_cat = 2; + } + + } else if (local_geary_coord->local_geary_type == LocalGearyCoordinator::bivariate) { + cat_data.SetCategoryLabel(t, 1, "Positive"); + cat_data.SetCategoryColor(t, 1, wxColour(51,110,161)); + cat_data.SetCategoryLabel(t, 2, "Negative"); + cat_data.SetCategoryColor(t, 2, wxColour(113,250,142)); + + if (local_geary_coord->GetHasIsolates(t) && + local_geary_coord->GetHasUndefined(t)) { + isolates_cat = 3; + undefined_cat = 4; + } else if (local_geary_coord->GetHasUndefined(t)) { + undefined_cat = 3; + } else if (local_geary_coord->GetHasIsolates(t)) { + isolates_cat = 3; + } + + } else { + cat_data.SetCategoryLabel(t, 1, "High-High"); + cat_data.SetCategoryColor(t, 1, wxColour(178,24,43)); + cat_data.SetCategoryLabel(t, 2, "Low-Low"); + cat_data.SetCategoryColor(t, 2, wxColour(239,138,98)); + cat_data.SetCategoryLabel(t, 3, "Other Pos"); + cat_data.SetCategoryColor(t, 3, wxColour(253,219,199)); + cat_data.SetCategoryLabel(t, 4, "Negative"); + cat_data.SetCategoryColor(t, 4, wxColour(103,173,199)); + + if (local_geary_coord->GetHasIsolates(t) && + local_geary_coord->GetHasUndefined(t)) { + isolates_cat = 5; + undefined_cat = 6; + } else if (local_geary_coord->GetHasUndefined(t)) { + undefined_cat = 5; + } else if (local_geary_coord->GetHasIsolates(t)) { + isolates_cat = 5; + } + } + + + } else { + // 0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + int s_f = local_geary_coord->GetSignificanceFilter(); + cat_data.SetCategoryLabel(t, 0, "Not Significant"); + + if (hdr.shape_type == Shapefile::POINT_TYP) { + cat_data.SetCategoryColor(t, 0, wxColour(190, 190, 190)); + } else { + cat_data.SetCategoryColor(t, 0, wxColour(240, 240, 240)); + } + + int skip_cat = 0; + if (s_f <=4 && stop_sig <= 0.0001) { + cat_data.SetCategoryLabel(t, 5-s_f, "p = 0.0001"); + cat_data.SetCategoryColor(t, 5-s_f, wxColour(1, 70, 3)); + } else skip_cat++; + + if (s_f <= 3 && stop_sig <= 0.001) { + cat_data.SetCategoryLabel(t, 4-s_f, "p = 0.001"); + cat_data.SetCategoryColor(t, 4-s_f, wxColour(3, 116, 6)); + } else skip_cat++; + + if (s_f <= 2 && stop_sig <= 0.01) { + cat_data.SetCategoryLabel(t, 3-s_f, "p = 0.01"); + cat_data.SetCategoryColor(t, 3-s_f, wxColour(6, 196, 11)); + } else skip_cat++; + + if (s_f <= 1) { + cat_data.SetCategoryLabel(t, 2-s_f, "p = 0.05"); + cat_data.SetCategoryColor(t, 2-s_f, wxColour(75, 255, 80)); + } + if (local_geary_coord->GetHasIsolates(t) && + local_geary_coord->GetHasUndefined(t)) { + isolates_cat = 6 - s_f - skip_cat; + undefined_cat = 7 - s_f - skip_cat; + + } else if (local_geary_coord->GetHasUndefined(t)) { + undefined_cat = 6 -s_f - skip_cat; + + } else if (local_geary_coord->GetHasIsolates(t)) { + isolates_cat = 6 - s_f -skip_cat; + + } + } + if (undefined_cat != -1) { + cat_data.SetCategoryLabel(t, undefined_cat, "Undefined"); + cat_data.SetCategoryColor(t, undefined_cat, wxColour(70, 70, 70)); + } + if (isolates_cat != -1) { + cat_data.SetCategoryLabel(t, isolates_cat, "Neighborless"); + cat_data.SetCategoryColor(t, isolates_cat, wxColour(140, 140, 140)); + } + + double cuttoff = local_geary_coord->significance_cutoff; + double* p = local_geary_coord->sig_local_geary_vecs[t]; + int* cluster = local_geary_coord->cluster_vecs[t]; + int* sigCat = local_geary_coord->sig_cat_vecs[t]; + + if (is_clust) { + if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { + for (int i=0, iend=local_geary_coord->num_obs; i cuttoff && cluster[i] != 2 && cluster[i] != 3) { + cat_data.AppendIdToCategory(t, 0, i); // not significant + } else if (cluster[i] == 2) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 3) { + cat_data.AppendIdToCategory(t, undefined_cat, i); + } else { + cat_data.AppendIdToCategory(t, cluster[i], i); + } + } + } else { + for (int i=0, iend=local_geary_coord->num_obs; i cuttoff && cluster[i] != 5 && cluster[i] != 6) { + cat_data.AppendIdToCategory(t, 0, i); // not significant + } else if (cluster[i] == 5) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 6) { + cat_data.AppendIdToCategory(t, undefined_cat, i); + } else { + cat_data.AppendIdToCategory(t, cluster[i], i); + } + } + } + } else { + int s_f = local_geary_coord->GetSignificanceFilter(); + if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { + for (int i=0, iend=local_geary_coord->num_obs; i cuttoff && cluster[i] != 2 && cluster[i] != 3) { + cat_data.AppendIdToCategory(t, 0, i); // not significant + } else if (cluster[i] == 2) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 3) { + cat_data.AppendIdToCategory(t, undefined_cat, i); + } else { + cat_data.AppendIdToCategory(t, (sigCat[i]-s_f)+1, i); + } + } + } else { + for (int i=0, iend=local_geary_coord->num_obs; i cuttoff && cluster[i] != 5 && cluster[i] != 6) { + cat_data.AppendIdToCategory(t, 0, i); // not significant + } else if (cluster[i] == 5) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 6) { + cat_data.AppendIdToCategory(t, undefined_cat, i); + } else { + cat_data.AppendIdToCategory(t, (sigCat[i]-s_f)+1, i); + } + } + } + } + for (int cat=0; catmy_times(var_info.size()); + for (int t=0; tvar_info; + template_frame->ClearAllGroupDependencies(); + for (int t=0; tAddGroupDependancy(var_info[t].name); + } + is_any_time_variant = local_geary_coord->is_any_time_variant; + is_any_sync_with_global_time = local_geary_coord->is_any_sync_with_global_time; + ref_var_index = local_geary_coord->ref_var_index; + num_time_vals = local_geary_coord->num_time_vals; + map_valid = local_geary_coord->map_valid; + map_error_message = local_geary_coord->map_error_message; +} + +void LocalGearyMapCanvas::TimeSyncVariableToggle(int var_index) +{ + LOG_MSG("In LocalGearyMapCanvas::TimeSyncVariableToggle"); + local_geary_coord->var_info[var_index].sync_with_global_time = + !local_geary_coord->var_info[var_index].sync_with_global_time; + for (int i=0; ivar_info[i].time = var_info[i].time; + } + local_geary_coord->VarInfoAttributeChange(); + local_geary_coord->InitFromVarInfo(); + local_geary_coord->notifyObservers(); +} + + +IMPLEMENT_CLASS(LocalGearyMapFrame, MapFrame) + BEGIN_EVENT_TABLE(LocalGearyMapFrame, MapFrame) + EVT_ACTIVATE(LocalGearyMapFrame::OnActivate) +END_EVENT_TABLE() + +LocalGearyMapFrame::LocalGearyMapFrame(wxFrame *parent, Project* project, + LocalGearyCoordinator* local_geary_coordinator, + bool isClusterMap, bool isBivariate, + bool isEBRate, + const wxPoint& pos, const wxSize& size, + const long style) +: MapFrame(parent, project, pos, size, style), +local_geary_coord(local_geary_coordinator) +{ + LOG_MSG("Entering LocalGearyMapFrame::LocalGearyMapFrame"); + + int width, height; + GetClientSize(&width, &height); + + wxSplitterWindow* splitter_win = new wxSplitterWindow(this,-1, + wxDefaultPosition, wxDefaultSize, + wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + splitter_win->SetMinimumPaneSize(10); + + CatClassification::CatClassifType theme_type_s = isClusterMap ? CatClassification::local_geary_categories : CatClassification::local_geary_significance; + + wxPanel* rpanel = new wxPanel(splitter_win); + template_canvas = new LocalGearyMapCanvas(rpanel, this, project, + local_geary_coordinator, + theme_type_s, + isBivariate, + isEBRate, + wxDefaultPosition, + wxDefaultSize); + template_canvas->SetScrollRate(1,1); + wxBoxSizer* rbox = new wxBoxSizer(wxVERTICAL); + rbox->Add(template_canvas, 1, wxEXPAND); + rpanel->SetSizer(rbox); + + wxPanel* lpanel = new wxPanel(splitter_win); + template_legend = new MapNewLegend(lpanel, template_canvas, + wxPoint(0,0), wxSize(0,0)); + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); + template_legend->GetContainingSizer()->Detach(template_legend); + lbox->Add(template_legend, 1, wxEXPAND); + lpanel->SetSizer(lbox); + + splitter_win->SplitVertically(lpanel, rpanel, GdaConst::map_default_legend_width); + + wxPanel* toolbar_panel = new wxPanel(this,-1, wxDefaultPosition); + wxBoxSizer* toolbar_sizer= new wxBoxSizer(wxVERTICAL); + wxToolBar* tb = wxXmlResource::Get()->LoadToolBar(toolbar_panel, "ToolBar_MAP"); + SetupToolbar(); + toolbar_sizer->Add(tb, 0, wxEXPAND|wxALL); + toolbar_panel->SetSizerAndFit(toolbar_sizer); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(toolbar_panel, 0, wxEXPAND|wxALL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + SetSizer(sizer); + //splitter_win->SetSize(wxSize(width,height)); + SetAutoLayout(true); + + DisplayStatusBar(true); + SetTitle(template_canvas->GetCanvasTitle()); + + + local_geary_coord->registerObserver(this); + Show(true); + LOG_MSG("Exiting LocalGearyMapFrame::LocalGearyMapFrame"); +} + +LocalGearyMapFrame::~LocalGearyMapFrame() +{ + LOG_MSG("In LocalGearyMapFrame::~LocalGearyMapFrame"); + if (local_geary_coord) { + local_geary_coord->removeObserver(this); + local_geary_coord = 0; + } +} + +void LocalGearyMapFrame::OnActivate(wxActivateEvent& event) +{ + LOG_MSG("In LocalGearyMapFrame::OnActivate"); + if (event.GetActive()) { + RegisterAsActive("LocalGearyMapFrame", GetTitle()); + } + if ( event.GetActive() && template_canvas ) template_canvas->SetFocus(); +} + +void LocalGearyMapFrame::MapMenus() +{ + LOG_MSG("In LocalGearyMapFrame::MapMenus"); + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + // Map Options Menus + wxMenu* optMenu = wxXmlResource::Get()-> + LoadMenu("ID_LISAMAP_NEW_VIEW_MENU_OPTIONS"); + ((MapCanvas*) template_canvas)-> + AddTimeVariantOptionsToMenu(optMenu); + ((MapCanvas*) template_canvas)->SetCheckMarks(optMenu); + GeneralWxUtils::ReplaceMenu(mb, "Options", optMenu); + UpdateOptionMenuItems(); +} + +void LocalGearyMapFrame::UpdateOptionMenuItems() +{ + TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu("Options"); + if (menu == wxNOT_FOUND) { + LOG_MSG("LocalGearyMapFrame::UpdateOptionMenuItems: " + "Options menu not found"); + } else { + ((LocalGearyMapCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); + } +} + +void LocalGearyMapFrame::UpdateContextMenuItems(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + + TemplateFrame::UpdateContextMenuItems(menu); // set common items +} + +void LocalGearyMapFrame::RanXPer(int permutation) +{ + if (permutation < 9) permutation = 9; + if (permutation > 99999) permutation = 99999; + local_geary_coord->permutations = permutation; + local_geary_coord->CalcPseudoP(); + local_geary_coord->notifyObservers(); +} + +void LocalGearyMapFrame::OnRan99Per(wxCommandEvent& event) +{ + RanXPer(99); +} + +void LocalGearyMapFrame::OnRan199Per(wxCommandEvent& event) +{ + RanXPer(199); +} + +void LocalGearyMapFrame::OnRan499Per(wxCommandEvent& event) +{ + RanXPer(499); +} + +void LocalGearyMapFrame::OnRan999Per(wxCommandEvent& event) +{ + RanXPer(999); +} + +void LocalGearyMapFrame::OnRanOtherPer(wxCommandEvent& event) +{ + PermutationCounterDlg dlg(this); + if (dlg.ShowModal() == wxID_OK) { + long num; + dlg.m_number->GetValue().ToLong(&num); + RanXPer(num); + } +} + +void LocalGearyMapFrame::OnUseSpecifiedSeed(wxCommandEvent& event) +{ + local_geary_coord->SetReuseLastSeed(!local_geary_coord->IsReuseLastSeed()); +} + +void LocalGearyMapFrame::OnSpecifySeedDlg(wxCommandEvent& event) +{ + uint64_t last_seed = local_geary_coord->GetLastUsedSeed(); + wxString m; + m << "The last seed used by the pseudo random\nnumber "; + m << "generator was " << last_seed << ".\n"; + m << "Enter a seed value to use between\n0 and "; + m << std::numeric_limits::max() << "."; + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << last_seed; + + wxTextEntryDialog dlg(NULL, m, "Enter a seed value", cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + if (!local_geary_coord->IsReuseLastSeed()) local_geary_coord->SetLastUsedSeed(true); + uint64_t new_seed_val = val; + local_geary_coord->SetLastUsedSeed(new_seed_val); + } else { + wxString m; + m << "\"" << dlg_val << "\" is not a valid seed. Seed unchanged."; + wxMessageDialog dlg(NULL, m, "Error", wxOK | wxICON_ERROR); + dlg.ShowModal(); + } +} + +void LocalGearyMapFrame::SetSigFilterX(int filter) +{ + if (filter == local_geary_coord->GetSignificanceFilter()) return; + local_geary_coord->SetSignificanceFilter(filter); + local_geary_coord->notifyObservers(); + UpdateOptionMenuItems(); +} + +void LocalGearyMapFrame::OnSigFilter05(wxCommandEvent& event) +{ + SetSigFilterX(1); +} + +void LocalGearyMapFrame::OnSigFilter01(wxCommandEvent& event) +{ + SetSigFilterX(2); +} + +void LocalGearyMapFrame::OnSigFilter001(wxCommandEvent& event) +{ + SetSigFilterX(3); +} + +void LocalGearyMapFrame::OnSigFilter0001(wxCommandEvent& event) +{ + SetSigFilterX(4); +} + +void LocalGearyMapFrame::OnSaveLocalGeary(wxCommandEvent& event) +{ + + int t = template_canvas->cat_data.GetCurrentCanvasTmStep(); + LocalGearyMapCanvas* lc = (LocalGearyMapCanvas*)template_canvas; + + std::vector data; + + if (lc->is_diff) { + data.resize(4); + } else { + data.resize(3); + } + + std::vector undefs(local_geary_coord->num_obs, false); + for (int i=0; iundef_data[0][t].size(); i++){ + undefs[i] = undefs[i] || local_geary_coord->undef_data[0][t][i]; + } + + std::vector tempLocalMoran(local_geary_coord->num_obs); + for (int i=0, iend=local_geary_coord->num_obs; ilocal_geary_vecs[t][i]; + } + data[0].d_val = &tempLocalMoran; + data[0].label = "LocalGeary Indices"; + data[0].field_default = "LocalGeary_I"; + data[0].type = GdaConst::double_type; + data[0].undefined = &undefs; + + double cuttoff = local_geary_coord->significance_cutoff; + double* p = local_geary_coord->sig_local_geary_vecs[t]; + int* cluster = local_geary_coord->cluster_vecs[t]; + std::vector clust(local_geary_coord->num_obs); + for (int i=0, iend=local_geary_coord->num_obs; i cuttoff && cluster[i] != 5 && cluster[i] != 6) { + clust[i] = 0; // not significant + } else { + clust[i] = cluster[i]; + } + } + data[1].l_val = &clust; + data[1].label = "Clusters"; + data[1].field_default = "LocalGeary_CL"; + data[1].type = GdaConst::long64_type; + data[1].undefined = &undefs; + + std::vector sig(local_geary_coord->num_obs); + std::vector diff(local_geary_coord->num_obs); + + for (int i=0, iend=local_geary_coord->num_obs; iis_diff ) { + int t0 = local_geary_coord->var_info[0].time; + int t1 = local_geary_coord->var_info[1].time; + diff[i] = local_geary_coord->data[0][t0][i] - local_geary_coord->data[0][t1][i]; + } + } + + data[2].d_val = &sig; + data[2].label = "Significance"; + data[2].field_default = "LocalGeary_P"; + data[2].type = GdaConst::double_type; + data[2].undefined = &undefs; + + if (lc->is_diff) { + data[3].d_val = &diff; + data[3].label = "Diff Values"; + data[3].field_default = "DIFF_VAL2"; + data[3].type = GdaConst::double_type; + data[3].undefined = &undefs; + } + + SaveToTableDlg dlg(project, this, data, + "Save Results: LocalGeary", + wxDefaultPosition, wxSize(400,400)); + dlg.ShowModal(); +} + +void LocalGearyMapFrame::CoreSelectHelper(const std::vector& elem) +{ + HighlightState* highlight_state = project->GetHighlightState(); + std::vector& hs = highlight_state->GetHighlight(); + bool selection_changed = false; + + for (int i=0; inum_obs; i++) { + if (!hs[i] && elem[i]) { + hs[i] = true; + selection_changed = true; + } else if (hs[i] && !elem[i]) { + hs[i] = false; + selection_changed = true; + } + } + if (selection_changed) { + highlight_state->SetEventType(HLStateInt::delta); + highlight_state->notifyObservers(); + } +} + +void LocalGearyMapFrame::OnSelectCores(wxCommandEvent& event) +{ + LOG_MSG("Entering LocalGearyMapFrame::OnSelectCores"); + + std::vector elem(local_geary_coord->num_obs, false); + int ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); + int* clust = local_geary_coord->cluster_vecs[ts]; + int* sig_cat = local_geary_coord->sig_cat_vecs[ts]; + int sf = local_geary_coord->significance_filter; + + // add all cores to elem list. + for (int i=0; inum_obs; i++) { + if (clust[i] >= 1 && clust[i] <= 4 && sig_cat[i] >= sf) { + elem[i] = true; + } + } + CoreSelectHelper(elem); + + LOG_MSG("Exiting LocalGearyMapFrame::OnSelectCores"); +} + +void LocalGearyMapFrame::OnSelectNeighborsOfCores(wxCommandEvent& event) +{ + LOG_MSG("Entering LocalGearyMapFrame::OnSelectNeighborsOfCores"); + + std::vector elem(local_geary_coord->num_obs, false); + int ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); + int* clust = local_geary_coord->cluster_vecs[ts]; + int* sig_cat = local_geary_coord->sig_cat_vecs[ts]; + int sf = local_geary_coord->significance_filter; + const GalElement* W = local_geary_coord->Gal_vecs_orig[ts]->gal; + + // add all cores and neighbors of cores to elem list + for (int i=0; inum_obs; i++) { + if (clust[i] >= 1 && clust[i] <= 4 && sig_cat[i] >= sf) { + elem[i] = true; + const GalElement& e = W[i]; + for (int j=0, jend=e.Size(); jnum_obs; i++) { + if (clust[i] >= 1 && clust[i] <= 4 && sig_cat[i] >= sf) { + elem[i] = false; + } + } + CoreSelectHelper(elem); + + LOG_MSG("Exiting LocalGearyMapFrame::OnSelectNeighborsOfCores"); +} + +void LocalGearyMapFrame::OnSelectCoresAndNeighbors(wxCommandEvent& event) +{ + LOG_MSG("Entering LocalGearyMapFrame::OnSelectCoresAndNeighbors"); + + std::vector elem(local_geary_coord->num_obs, false); + int ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); + int* clust = local_geary_coord->cluster_vecs[ts]; + int* sig_cat = local_geary_coord->sig_cat_vecs[ts]; + int sf = local_geary_coord->significance_filter; + const GalElement* W = local_geary_coord->Gal_vecs_orig[ts]->gal; + + // add all cores and neighbors of cores to elem list + for (int i=0; inum_obs; i++) { + if (clust[i] >= 1 && clust[i] <= 4 && sig_cat[i] >= sf) { + elem[i] = true; + const GalElement& e = W[i]; + for (int j=0, jend=e.Size(); jcat_data.GetCurrentCanvasTmStep(); + GalWeight* gal_weights = local_geary_coord->Gal_vecs_orig[ts]; + + HighlightState& hs = *project->GetHighlightState(); + std::vector& h = hs.GetHighlight(); + int nh_cnt = 0; + std::vector add_elem(gal_weights->num_obs, false); + + std::vector new_highlight_ids; + + for (int i=0; inum_obs; i++) { + if (h[i]) { + GalElement& e = gal_weights->gal[i]; + for (int j=0, jend=e.Size(); j 0) { + hs.SetEventType(HLStateInt::delta); + hs.notifyObservers(); + } +} + +void LocalGearyMapFrame::OnShowAsConditionalMap(wxCommandEvent& event) +{ + VariableSettingsDlg dlg(project, VariableSettingsDlg::bivariate, + false, false, + _("Conditional LocalGeary Map Variables"), + _("Horizontal Cells"), + _("Vertical Cells")); + + if (dlg.ShowModal() != wxID_OK) { + return; + } + + LocalGearyMapCanvas* lc = (LocalGearyMapCanvas*) template_canvas; + wxString title = lc->GetCanvasTitle(); + ConditionalClusterMapFrame* subframe = + new ConditionalClusterMapFrame(this, project, + dlg.var_info, dlg.col_ids, local_geary_coord, + title, wxDefaultPosition, + GdaConst::cond_view_default_size); +} + +/** Called by LocalGearyCoordinator to notify that state has changed. State changes + can include: + - variable sync change and therefore all local_geary categories have changed + - significance level has changed and therefore categories have changed + - new randomization for p-vals and therefore categories have changed */ +void LocalGearyMapFrame::update(LocalGearyCoordinator* o) +{ + LocalGearyMapCanvas* lc = (LocalGearyMapCanvas*) template_canvas; + lc->SyncVarInfoFromCoordinator(); + lc->CreateAndUpdateCategories(); + if (template_legend) template_legend->Recreate(); + SetTitle(lc->GetCanvasTitle()); + lc->Refresh(); +} + +void LocalGearyMapFrame::closeObserver(LocalGearyCoordinator* o) +{ + LOG_MSG("In LocalGearyMapFrame::closeObserver(LocalGearyCoordinator*)"); + if (local_geary_coord) { + local_geary_coord->removeObserver(this); + local_geary_coord = 0; + } + Close(true); +} + +void LocalGearyMapFrame::GetVizInfo(std::vector& clusters) +{ + if (local_geary_coord) { + if(local_geary_coord->sig_cat_vecs.size()>0) { + for (int i=0; inum_obs;i++) { + clusters.push_back(local_geary_coord->sig_cat_vecs[0][i]); + } + } + } +} diff --git a/Explore/LocalGearyMapNewView.h b/Explore/LocalGearyMapNewView.h new file mode 100644 index 000000000..6d6868468 --- /dev/null +++ b/Explore/LocalGearyMapNewView.h @@ -0,0 +1,118 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_LOCALGEARY_MAP_NEW_VIEW_H__ +#define __GEODA_CENTER_LOCALGEARY_MAP_NEW_VIEW_H__ + +#include "MapNewView.h" +#include "LocalGearyCoordinatorObserver.h" +#include "../GdaConst.h" + +class LocalGearyMapFrame; +class LocalGearyMapCanvas; +class LocalGearyCoordinator; + +class LocalGearyMapCanvas : public MapCanvas +{ + DECLARE_CLASS(LocalGearyMapCanvas) +public: + LocalGearyMapCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + LocalGearyCoordinator* local_geary_coordinator, + CatClassification::CatClassifType theme_type, + bool isBivariate, bool isEBRate, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~LocalGearyMapCanvas(); + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual wxString GetCanvasTitle(); + virtual bool ChangeMapType(CatClassification::CatClassifType new_map_theme, + SmoothingType new_map_smoothing); + virtual void SetCheckMarks(wxMenu* menu); + virtual void TimeChange(); + void SyncVarInfoFromCoordinator(); + virtual void CreateAndUpdateCategories(); + virtual void TimeSyncVariableToggle(int var_index); + + bool is_diff; + +protected: + LocalGearyCoordinator* local_geary_coord; + bool is_clust; // true = Cluster Map, false = Significance Map + bool is_bi; // true = Bivariate, false = Univariate + bool is_rate; // true = Moran Empirical Bayes Rate Smoothing + + DECLARE_EVENT_TABLE() +}; + +class LocalGearyMapFrame : public MapFrame, public LocalGearyCoordinatorObserver +{ + DECLARE_CLASS(LocalGearyMapFrame) +public: + LocalGearyMapFrame(wxFrame *parent, Project* project, + LocalGearyCoordinator* local_geary_coordinator, + bool isClusterMap, bool isBivariate, + bool isEBRate, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = GdaConst::map_default_size, + const long style = wxDEFAULT_FRAME_STYLE); + virtual ~LocalGearyMapFrame(); + + void OnActivate(wxActivateEvent& event); + virtual void MapMenus(); + virtual void UpdateOptionMenuItems(); + virtual void UpdateContextMenuItems(wxMenu* menu); + + void RanXPer(int permutation); + void OnRan99Per(wxCommandEvent& event); + void OnRan199Per(wxCommandEvent& event); + void OnRan499Per(wxCommandEvent& event); + void OnRan999Per(wxCommandEvent& event); + void OnRanOtherPer(wxCommandEvent& event); + + void OnUseSpecifiedSeed(wxCommandEvent& event); + void OnSpecifySeedDlg(wxCommandEvent& event); + + void SetSigFilterX(int filter); + void OnSigFilter05(wxCommandEvent& event); + void OnSigFilter01(wxCommandEvent& event); + void OnSigFilter001(wxCommandEvent& event); + void OnSigFilter0001(wxCommandEvent& event); + + void OnSaveLocalGeary(wxCommandEvent& event); + + void OnSelectCores(wxCommandEvent& event); + void OnSelectNeighborsOfCores(wxCommandEvent& event); + void OnSelectCoresAndNeighbors(wxCommandEvent& event); + void OnAddNeighborToSelection(wxCommandEvent& event); + + void OnShowAsConditionalMap(wxCommandEvent& event); + + virtual void update(LocalGearyCoordinator* o); + virtual void closeObserver(LocalGearyCoordinator* o); + + void GetVizInfo(std::vector& clusters); +protected: + void CoreSelectHelper(const std::vector& elem); + LocalGearyCoordinator* local_geary_coord; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/Explore/MapNewView.cpp b/Explore/MapNewView.cpp index 9f052ce69..e9ba20ea4 100644 --- a/Explore/MapNewView.cpp +++ b/Explore/MapNewView.cpp @@ -66,7 +66,7 @@ BEGIN_EVENT_TABLE(SliderDialog, wxDialog) END_EVENT_TABLE() SliderDialog::SliderDialog(wxWindow * parent, - TemplateCanvas* _canvas, + MapCanvas* _canvas, wxWindowID id, const wxString & caption, const wxPoint & position, @@ -87,7 +87,7 @@ SliderDialog::SliderDialog(wxWindow * parent, // A text control for the user’s name ID_SLIDER = wxID_ANY; - double trasp = (double)GdaConst::transparency_unhighlighted / 255.0; + double trasp = (double)canvas->tran_unhighlighted / 255.0; int trasp_scale = 100 * trasp; wxBoxSizer* subSizer = new wxBoxSizer(wxHORIZONTAL); @@ -101,7 +101,7 @@ SliderDialog::SliderDialog(wxWindow * parent, wxALIGN_CENTER_VERTICAL|wxALL); boxSizer->Add(subSizer); - wxString txt_transparency = wxString::Format(_("Current Transparency: %.1f"), 1.0 - trasp); + wxString txt_transparency = wxString::Format(_("Current Transparency: %.2f"), 1.0 - trasp); slider_text = new wxStaticText(this, wxID_ANY, @@ -123,8 +123,9 @@ void SliderDialog::OnSliderChange( wxScrollEvent & event ) { int val = event.GetInt(); double trasp = 1.0 - val / 100.0; - slider_text->SetLabel(wxString::Format("Current Transparency: %.1f", trasp)); - GdaConst::transparency_unhighlighted = (1-trasp) * 255; + slider_text->SetLabel(wxString::Format("Current Transparency: %.2f", trasp)); + //GdaConst::transparency_unhighlighted = (1-trasp) * 255; + canvas->tran_unhighlighted = (1-trasp) * 255; canvas->ReDraw(); } @@ -172,8 +173,10 @@ weights_id(weights_id_s), basemap(0), isDrawBasemap(false), basemap_bm(0), -map_type(0) +map_type(0), +tran_unhighlighted(GdaConst::transparency_unhighlighted) { + wxLogMessage("MapCanvas::MapCanvas()"); using namespace Shapefile; cat_classif_def.cat_classif_type = theme_type; @@ -223,6 +226,7 @@ map_type(0) MapCanvas::~MapCanvas() { + wxLogMessage("MapCanvas::~MapCanvas()"); if (highlight_state) highlight_state->removeObserver(this); @@ -453,12 +457,15 @@ void MapCanvas::resizeLayerBms(int width, int height) int vs_w, vs_h; GetClientSize(&vs_w, &vs_h); + if (vs_w <= 0) vs_w = 1; + if (vs_h <=0 ) vs_h = 1; + basemap_bm = new wxBitmap(vs_w, vs_h, 32); layerbase_valid = false; - layer0_bm = new wxBitmap(width, height, 32); - layer1_bm = new wxBitmap(width, height, 32); - layer2_bm = new wxBitmap(width, height, 32); + layer0_bm = new wxBitmap(vs_w, vs_h, 32); + layer1_bm = new wxBitmap(vs_w, vs_h, 32); + layer2_bm = new wxBitmap(vs_w, vs_h, 32); layer0_valid = false; layer1_valid = false; @@ -467,8 +474,6 @@ void MapCanvas::resizeLayerBms(int width, int height) void MapCanvas::DrawLayers() { - wxSize sz = GetClientSize(); - if (!layerbase_valid && isDrawBasemap) DrawLayerBase(); @@ -550,7 +555,7 @@ void MapCanvas::DrawLayer1() dc.DrawRectangle(wxPoint(0,0), sz); } - bool revert = GdaConst::transparency_highlighted < GdaConst::transparency_unhighlighted; + bool revert = GdaConst::transparency_highlighted < tran_unhighlighted; int alpha_value = 255; bool mask_needed = false; bool draw_highlight = highlight_state->GetTotalHighlighted() > 0; @@ -558,13 +563,13 @@ void MapCanvas::DrawLayer1() if (isDrawBasemap) { mask_needed = true; - alpha_value = GdaConst::transparency_unhighlighted; + alpha_value = tran_unhighlighted; } if (draw_highlight && GdaConst::use_cross_hatching == false) { mask_needed = true; - alpha_value = revert ? GdaConst::transparency_highlighted : GdaConst::transparency_unhighlighted; + alpha_value = revert ? GdaConst::transparency_highlighted : tran_unhighlighted; } if (mask_needed) @@ -597,7 +602,7 @@ void MapCanvas::DrawLayer1() } dc.DrawBitmap(*faded_layer_bm,0,0); - int hl_alpha_value = revert ? GdaConst::transparency_unhighlighted : GdaConst::transparency_highlighted; + int hl_alpha_value = revert ? tran_unhighlighted : GdaConst::transparency_highlighted; if ( draw_highlight ) { if ( hl_alpha_value == 255 || GdaConst::use_cross_hatching) { @@ -793,6 +798,7 @@ void MapCanvas::DisplayRightClickMenu(const wxPoint& pos) void MapCanvas::AddTimeVariantOptionsToMenu(wxMenu* menu) { + wxLogMessage("MapCanvas::AddTimeVariantOptionsToMenu()"); if (!is_any_time_variant) return; wxMenu* menu1 = new wxMenu(wxEmptyString); for (size_t i=0, sz=GetNumVars(); i= GetNumVars()) return wxEmptyString; wxString s(var_info[var].name); if (var_info[var].is_time_variant) { @@ -1012,6 +1020,7 @@ wxString MapCanvas::GetNameWithTime(int var) void MapCanvas::OnSaveCategories() { + wxLogMessage("MapCanvas::OnSaveCategories()"); wxString t_name; if (GetCcType() == CatClassification::custom) { t_name = cat_classif_def.title; @@ -1036,6 +1045,7 @@ void MapCanvas::OnSaveCategories() void MapCanvas::NewCustomCatClassif() { + wxLogMessage("MapCanvas::NewCustomCatClassif()"); // Begin by asking for a variable if none yet chosen std::vector > var_undefs(num_time_vals); @@ -1137,6 +1147,7 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, const std::vector& new_col_ids, const wxString& custom_classif_title) { + wxLogMessage("MapCanvas::ChangeMapType()"); // We only ask for variables when changing from no_theme or // smoothed (with theme). num_categories = num_categories_s; @@ -1270,7 +1281,12 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, VarInfoAttributeChange(); CreateAndUpdateCategories(); PopulateCanvas(); - return true; + + TemplateLegend* legend = template_frame->GetTemplateLegend(); + if (legend != NULL ) { + legend->isDragDropAllowed = new_map_theme == CatClassification::unique_values; + } + return true; } void MapCanvas::update(CatClassifState* o) @@ -1362,6 +1378,7 @@ void MapCanvas::PopulateCanvas() void MapCanvas::TimeChange() { + wxLogMessage("MapCanvas::TimeChange()"); if (!is_any_sync_with_global_time) return; int cts = project->GetTimeState()->GetCurrTime(); @@ -1393,6 +1410,7 @@ void MapCanvas::TimeChange() void MapCanvas::VarInfoAttributeChange() { + wxLogMessage("MapCanvas::VarInfoAttributeChange()"); GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); is_any_time_variant = false; @@ -1423,6 +1441,7 @@ void MapCanvas::VarInfoAttributeChange() smoothing as needed, setting smoothing_valid vector as appropriate. */ void MapCanvas::CreateAndUpdateCategories() { + wxLogMessage("MapCanvas::CreateAndUpdateCategories()"); cat_var_sorted.clear(); map_valid.resize(num_time_vals); @@ -1480,7 +1499,9 @@ void MapCanvas::CreateAndUpdateCategories() std::vector undef_res(num_obs, false); for (int i=0; i t ) { + undef_res[i] = undef_res[i] || data_undef[j][t][i]; + } } } @@ -1609,7 +1630,7 @@ void MapCanvas::CreateAndUpdateCategories() void MapCanvas::TimeSyncVariableToggle(int var_index) { - LOG_MSG("In MapCanvas::TimeSyncVariableToggle"); + wxLogMessage("MapCanvas::TimeSyncVariableToggle()"); var_info[var_index].sync_with_global_time = !var_info[var_index].sync_with_global_time; @@ -1623,6 +1644,7 @@ void MapCanvas::TimeSyncVariableToggle(int var_index) void MapCanvas::DisplayMeanCenters() { + wxLogMessage("MapCanvas::DisplayMeanCenters()"); full_map_redraw_needed = true; display_mean_centers = !display_mean_centers; PopulateCanvas(); @@ -1630,6 +1652,7 @@ void MapCanvas::DisplayMeanCenters() void MapCanvas::DisplayCentroids() { + wxLogMessage("MapCanvas::DisplayCentroids()"); full_map_redraw_needed = true; display_centroids = !display_centroids; PopulateCanvas(); @@ -1637,6 +1660,7 @@ void MapCanvas::DisplayCentroids() void MapCanvas::DisplayVoronoiDiagram() { + wxLogMessage("MapCanvas::DisplayVoronoiDiagram()"); full_map_redraw_needed = true; display_voronoi_diagram = !display_voronoi_diagram; PopulateCanvas(); @@ -1661,6 +1685,7 @@ CatClassification::CatClassifType MapCanvas::GetCcType() smoothing_type != no_smoothing */ void MapCanvas::SaveRates() { + wxLogMessage("MapCanvas::SaveRates()"); if (smoothing_type == no_smoothing) { wxString msg; msg << "No rates currently calculated to save."; @@ -1710,7 +1735,27 @@ void MapCanvas::SaveRates() void MapCanvas::update(HLStateInt* o) { - TemplateCanvas::update(o); + if (layer2_bm) { + ResetBrushing(); + + if (draw_sel_shps_by_z_val) { + // force a full redraw + layer0_valid = false; + return; + } + + HLStateInt::EventType type = o->GetEventType(); + if (type == HLStateInt::transparency) { + tran_unhighlighted = GdaConst::transparency_unhighlighted; + ResetFadedLayer(); + } + // re-paint highlight layer (layer1_bm) + layer1_valid = false; + DrawLayers(); + Refresh(); + + UpdateStatusBar(); + } } void MapCanvas::UpdateStatusBar() @@ -1777,6 +1822,8 @@ w_man_state(project->GetWManState()) { wxLogMessage("Open MapFrame."); + template_legend = NULL; + template_canvas = NULL; int width, height; GetClientSize(&width, &height); @@ -1801,6 +1848,11 @@ w_man_state(project->GetWManState()) wxPanel* lpanel = new wxPanel(splitter_win); template_legend = new MapNewLegend(lpanel, template_canvas, wxPoint(0,0), wxSize(0,0)); + + if (theme_type == CatClassification::unique_values) { + template_legend->isDragDropAllowed = true; + } + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); template_legend->GetContainingSizer()->Detach(template_legend); lbox->Add(template_legend, 1, wxEXPAND | wxALL); @@ -1877,6 +1929,10 @@ void MapFrame::OnDrawBasemap(bool flag, int map_type) bool drawSuccess = ((MapCanvas*)template_canvas)->DrawBasemap(flag, map_type); + if (flag == false) { + ((MapCanvas*)template_canvas)->tran_unhighlighted = GdaConst::transparency_unhighlighted; + } + if (drawSuccess==false) { wxMessageBox(_("GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file).")); } @@ -1937,7 +1993,7 @@ void MapFrame::OnMapBasemap(wxCommandEvent& e) popupMenu->FindItem(XRCID("ID_BASEMAP_7"))->Check(idx==7); popupMenu->FindItem(XRCID("ID_BASEMAP_8"))->Check(idx==8); - popupMenu->FindItem(XRCID("ID_CHANGE_TRANSPARENCY"))->Enable(idx!=0); + //popupMenu->FindItem(XRCID("ID_CHANGE_TRANSPARENCY"))->Enable(idx!=0); PopupMenu(popupMenu, wxDefaultPosition); } @@ -1990,7 +2046,7 @@ void MapFrame::update(TimeState* o) { template_canvas->TimeChange(); UpdateTitle(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); } /** Implementation of WeightsManStateObserver interface */ @@ -2236,11 +2292,13 @@ void MapFrame::OnEmpiricalBayes() void MapFrame::OnSpatialRate() { + VariableSettingsDlg dlg(project, VariableSettingsDlg::rate_smoothed, true, false, "Spatial Rate Smoothed Variable Settings", "Event Variable", "Base Variable"); if (dlg.ShowModal() != wxID_OK) return; + ChangeMapType(dlg.GetCatClassifType(), MapCanvas::spatial_rate, dlg.GetNumCategories(), dlg.GetWeightsId(), @@ -2282,7 +2340,7 @@ bool MapFrame::ChangeMapType(CatClassification::CatClassifType new_map_theme, custom_classif_title); UpdateTitle(); UpdateOptionMenuItems(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); return r; } @@ -2336,7 +2394,7 @@ void MapFrame::OnChangeMapTransparency() //show slider dialog MapCanvas* map_canvs_ref = (MapCanvas*) template_canvas; if (map_canvs_ref->isDrawBasemap) { - SliderDialog sliderDlg(this, template_canvas); + SliderDialog sliderDlg(this, map_canvs_ref); sliderDlg.ShowModal(); } diff --git a/Explore/MapNewView.h b/Explore/MapNewView.h index 32916e994..839c53c40 100644 --- a/Explore/MapNewView.h +++ b/Explore/MapNewView.h @@ -60,7 +60,7 @@ class SliderDialog: public wxDialog public: SliderDialog (); SliderDialog (wxWindow * parent, - TemplateCanvas* _canvas, + MapCanvas* _canvas, wxWindowID id=wxID_ANY, const wxString & caption="Slider Dialog", const wxPoint & pos = wxDefaultPosition, @@ -69,7 +69,7 @@ class SliderDialog: public wxDialog virtual ~SliderDialog (); private: - TemplateCanvas* canvas; + MapCanvas* canvas; wxSlider* slider; wxStaticText* slider_text; void OnSliderChange(wxScrollEvent& event ); @@ -166,7 +166,7 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver virtual int GetNumCats(); virtual boost::uuids::uuid GetWeightsId() { return weights_id; } virtual void SetWeightsId(boost::uuids::uuid id) { weights_id = id; } - + CatClassifDef cat_classif_def; CatClassification::CatClassifType GetCcType(); SmoothingType smoothing_type; @@ -179,7 +179,8 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver std::vector var_info; bool isDrawBasemap; - + int tran_unhighlighted; + static void ResetThumbnail() { MapCanvas::has_thumbnail_saved = false;} private: IDataSource* p_datasource; @@ -216,6 +217,8 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver wxBitmap* basemap_bm; GDA::Basemap* basemap; + + virtual void UpdateStatusBar(); DECLARE_EVENT_TABLE() diff --git a/Explore/PCPNewView.cpp b/Explore/PCPNewView.cpp index c11ad9891..f55fb6763 100644 --- a/Explore/PCPNewView.cpp +++ b/Explore/PCPNewView.cpp @@ -901,7 +901,7 @@ void PCPCanvas::StandardizeData(bool standardize) // button. Can also specify wxMOUSE_BTN_LEFT / RIGHT / MIDDLE. Or // LeftDCLick(), etc. // LeftUp(): returns true at the moment the button changed to up. -/* + void PCPCanvas::OnMouseEvent(wxMouseEvent& event) { // Capture the mouse when left mouse button is down. @@ -929,10 +929,10 @@ void PCPCanvas::OnMouseEvent(wxMouseEvent& event) // proceed, otherwise call TemplateCanvas::OnMouseEvent(event) int label_match = -1; - prev = GetActualPos(event); - sel1 = prev; + pcp_prev = GetActualPos(event); + pcp_sel1 = pcp_prev; for (int v=0; vpointWithin(sel1)) { + if (control_labels[v]->pointWithin(pcp_sel1)) { label_match = v; break; } @@ -943,7 +943,7 @@ void PCPCanvas::OnMouseEvent(wxMouseEvent& event) wxPoint cpt = control_circs[v]->center; cpt.x += control_circs[v]->getXNudge(); cpt.y += control_circs[v]->getYNudge(); - if (GenUtils::distance(sel1, cpt) <= + if (GenUtils::distance(pcp_sel1, cpt) <= ((double) control_circs[v]->radius)+1.5) { circ_match = v; break; @@ -953,9 +953,11 @@ void PCPCanvas::OnMouseEvent(wxMouseEvent& event) if (label_match != -1) { control_label_sel = label_match; pcp_selectstate = pcp_leftdown_on_label; + is_showing_brush = false; } else if (circ_match != -1) { control_line_sel = circ_match; pcp_selectstate = pcp_leftdown_on_circ; + is_showing_brush = false; } else { show_pcp_control = false; TemplateCanvas::OnMouseEvent(event); @@ -967,20 +969,14 @@ void PCPCanvas::OnMouseEvent(wxMouseEvent& event) return; } } else if (pcp_selectstate == pcp_leftdown_on_label) { - if (event.LeftUp() || event.RightUp()) { - sel2 = GetActualPos(event); - VarLabelClicked(); - show_pcp_control = false; - pcp_selectstate = pcp_start; - Refresh(); - } + } else if (pcp_selectstate == pcp_leftdown_on_circ) { if (event.Moving() || event.Dragging()) { wxPoint act_pos = GetActualPos(event); - if (fabs((double) (prev.x - act_pos.x)) + - fabs((double) (prev.y - act_pos.y)) > 2) { - sel1 = prev; - sel2 = GetActualPos(event); + if (fabs((double) (pcp_prev.x - act_pos.x)) + + fabs((double) (pcp_prev.y - act_pos.y)) > 2) { + pcp_sel1 = pcp_prev; + pcp_sel2 = GetActualPos(event); pcp_selectstate = pcp_dragging; show_pcp_control = true; @@ -993,15 +989,16 @@ void PCPCanvas::OnMouseEvent(wxMouseEvent& event) } } else if (pcp_selectstate == pcp_dragging) { if (event.Dragging()) { // mouse moved while buttons still down - sel2 = GetActualPos(event); + pcp_sel2 = GetActualPos(event); show_pcp_control = true; Refresh(); } else if (event.LeftUp()) { - sel2 = GetActualPos(event); - MoveControlLine(sel2.y); // will invalidate layer1 if needed + pcp_sel2 = GetActualPos(event); + MoveControlLine(pcp_sel2.y); // will invalidate layer1 if needed show_pcp_control = false; pcp_selectstate = pcp_start; + ResetBrushing(); Refresh(); } else if (event.RightDown()) { show_pcp_control = false; @@ -1010,7 +1007,7 @@ void PCPCanvas::OnMouseEvent(wxMouseEvent& event) } } } - */ + void PCPCanvas::VarLabelClicked() { @@ -1035,7 +1032,7 @@ void PCPCanvas::PaintControls(wxDC& dc) dc.SetBrush(*wxWHITE_BRUSH); wxPoint cpt = control_circs[control_line_sel]->center; cpt.x += control_circs[control_line_sel]->getXNudge(); - cpt.y = sel2.y; + cpt.y = pcp_sel2.y; int x_end = control_lines[control_line_sel]->points[1].x; dc.DrawLine(cpt.x, cpt.y, x_end, cpt.y); @@ -1048,17 +1045,26 @@ void PCPCanvas::PaintControls(wxDC& dc) */ void PCPCanvas::MoveControlLine(int final_y) { + LOG_MSG("Entering PCPCanvas::MoveControlLine"); + LOG(control_line_sel); + + LOG_MSG("original var_order"); + for (int i=0; i new_order(num_vars); // starting line is control_line_sel // determine which control lines final_y is between if (final_y < control_lines[0]->points[0].y) { if (control_line_sel == 0) return; + LOG_MSG("Final control line pos is above control line 0"); // move control line into first position new_order[0] = control_line_sel; for (int i=1; i<=control_line_sel; i++) new_order[i] = i-1; for (int i=control_line_sel+1; i control_lines[num_vars-1]->points[0].y) { if (control_line_sel == num_vars - 1) return; + LOG_MSG("Final control line pos is below last control line"); // move control line into last position for (int i=0; ipoints[0].y) { if (control_line_sel == v || control_line_sel == v-1) return; + LOG_MSG(wxString::Format("Final control line pos is just " + "above control line %d", v)); if (control_line_sel > v) { for (int i=0; i old_var_order(num_vars); for (int i=0; iRefresh(); + if (template_legend) template_legend->Recreate(); } diff --git a/Explore/PCPNewView.h b/Explore/PCPNewView.h index 997b9a524..50b016ce4 100644 --- a/Explore/PCPNewView.h +++ b/Explore/PCPNewView.h @@ -87,7 +87,7 @@ class PCPCanvas : public TemplateCanvas, public CatClassifStateObserver enum PCPSelectState { pcp_start, pcp_leftdown_on_circ, pcp_leftdown_on_label, pcp_dragging }; /** The function handles all mouse events. */ - //void OnMouseEvent(wxMouseEvent& event); + void OnMouseEvent(wxMouseEvent& event); void VarLabelClicked(); /** Override PaintControls from TemplateCanvas */ virtual void PaintControls(wxDC& dc); @@ -102,6 +102,10 @@ class PCPCanvas : public TemplateCanvas, public CatClassifStateObserver CatClassifState* custom_classif_state; + wxPoint pcp_prev; + wxPoint pcp_sel1; + wxPoint pcp_sel2; + int num_obs; int num_vars; int num_time_vals; diff --git a/Explore/ScatterNewPlotView.cpp b/Explore/ScatterNewPlotView.cpp index 6a36904a9..2a3f6115a 100644 --- a/Explore/ScatterNewPlotView.cpp +++ b/Explore/ScatterNewPlotView.cpp @@ -2093,7 +2093,7 @@ void ScatterNewPlotFrame::update(TimeState* o) { template_canvas->TimeChange(); UpdateTitle(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); } void ScatterNewPlotFrame::OnViewStandardizedData(wxCommandEvent& event) @@ -2261,7 +2261,7 @@ void ScatterNewPlotFrame::ChangeThemeType( ChangeThemeType(new_theme, num_categories, custom_classif_title); UpdateTitle(); UpdateOptionMenuItems(); - if (template_legend) template_legend->Refresh(); + if (template_legend) template_legend->Recreate(); } void ScatterNewPlotFrame::AdjustBubbleSize(wxCommandEvent& evt) diff --git a/GdaConst.cpp b/GdaConst.cpp index f63470cc6..1eb4d48ba 100644 --- a/GdaConst.cpp +++ b/GdaConst.cpp @@ -302,8 +302,11 @@ wxFont* GdaConst::small_font = 0; wxFont* GdaConst::medium_font = 0; wxFont* GdaConst::large_font = 0; +uint64_t GdaConst::gda_user_seed = 0; +bool GdaConst::use_gda_user_seed = false; + int GdaConst::gdal_http_timeout = 5; -bool GdaConst::enable_high_dpi_support = true; +bool GdaConst::enable_high_dpi_support = false; bool GdaConst::show_csv_configure_in_merge = false; bool GdaConst::show_recent_sample_connect_ds_dialog = true; bool GdaConst::use_cross_hatching = false; @@ -375,7 +378,7 @@ const wxColour GdaConst::table_col_sel_color(181, 213, 251); // light blue const wxColour GdaConst::table_row_and_col_sel_color(206, 217, 146); // Scatterplot -const wxSize GdaConst::scatterplot_default_size(530, 530); +const wxSize GdaConst::scatterplot_default_size(500, 500); const wxColour GdaConst::scatterplot_scale_color(0, 0, 0); //const wxColour GdaConst::scatterplot_regression_color(0, 79, 241); //const wxColour GdaConst::scatterplot_regression_selected_color(204, 41, 44); diff --git a/GdaConst.h b/GdaConst.h index 55bbb72c4..fd53d857e 100644 --- a/GdaConst.h +++ b/GdaConst.h @@ -27,6 +27,7 @@ #ifndef __GEODA_CENTER_GDA_CONST_H__ #define __GEODA_CENTER_GDA_CONST_H__ +#include #include #include #include @@ -295,6 +296,8 @@ class GdaConst { static const wxColour legend_background_color; // white // Preferences + static uint64_t gda_user_seed; + static bool use_gda_user_seed; static int gdal_http_timeout; static bool enable_high_dpi_support; static bool show_csv_configure_in_merge; diff --git a/GdaShape.cpp b/GdaShape.cpp index 2dfa8374f..58cfead65 100644 --- a/GdaShape.cpp +++ b/GdaShape.cpp @@ -780,6 +780,17 @@ double GdaPoint::GetY() return center_o.y; } +void GdaPoint::SetX(double x) +{ + center.x = (int) x; + center_o.x = x; +} + +void GdaPoint::SetY(double y) +{ + center.y = (int) y; + center_o.y = y; +} bool GdaPoint::pointWithin(const wxPoint& pt) { if (null_shape) return false; diff --git a/GdaShape.h b/GdaShape.h index 28d746f71..b646b6335 100644 --- a/GdaShape.h +++ b/GdaShape.h @@ -23,10 +23,11 @@ #include #include #include -#include -#include #include #include + +#include +#include #include #include "Explore/Basemap.h" @@ -220,6 +221,8 @@ class GdaPoint: public GdaShape { double GetX(); double GetY(); + void SetX(double x); + void SetY(double y); }; diff --git a/GenUtils.cpp b/GenUtils.cpp index 720255629..517b67648 100644 --- a/GenUtils.cpp +++ b/GenUtils.cpp @@ -1308,6 +1308,10 @@ wxString GenUtils::FindLongestSubString(const std::vector strings, } +bool GenUtils::less_vectors(const std::vector& a,const std::vector& b) { + return a.size() > b.size(); +} + wxString GenUtils::WrapText(wxWindow *win, const wxString& text, int widthMax) { class HardBreakWrapper : public wxTextWrapper diff --git a/GenUtils.h b/GenUtils.h index 3f359db6e..ffcd6e84e 100644 --- a/GenUtils.h +++ b/GenUtils.h @@ -364,6 +364,7 @@ namespace GenUtils { std::string GetResourceDir(); std::string GetSamplesDir(); + bool less_vectors(const std::vector& a,const std::vector& b); } /** Old code used by LISA functions */ diff --git a/GeoDa.cpp b/GeoDa.cpp index bf8aa240c..af1c84e52 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -29,6 +29,7 @@ #include #include + #include #include #include @@ -113,6 +114,10 @@ #include "DialogTools/BasemapConfDlg.h" #include "DialogTools/AutoUpdateDlg.h" #include "DialogTools/ReportBugDlg.h" +#include "DialogTools/SaveToTableDlg.h" +#include "DialogTools/KMeansDlg.h" +#include "DialogTools/HClusterDlg.h" + #include "Explore/CatClassification.h" #include "Explore/CovSpView.h" @@ -123,6 +128,8 @@ #include "Explore/LisaMapNewView.h" #include "Explore/LisaScatterPlotView.h" #include "Explore/LisaCoordinator.h" +#include "Explore/LocalGearyCoordinator.h" +#include "Explore/LocalGearyMapNewView.h" #include "Explore/ConditionalMapView.h" #include "Explore/ConditionalNewView.h" #include "Explore/ConditionalScatterPlotView.h" @@ -144,7 +151,6 @@ #include "Regression/DiagnosticReport.h" #include "ShapeOperations/CsvFileUtils.h" -#include "ShpFile.h" #include "ShapeOperations/ShapeUtils.h" #include "ShapeOperations/WeightsManager.h" #include "ShapeOperations/WeightsManState.h" @@ -152,6 +158,7 @@ #include "VarCalc/CalcHelp.h" +#include "ShpFile.h" #include "GdaException.h" #include "FramesManager.h" #include "GdaConst.h" @@ -304,15 +311,15 @@ bool GdaApp::OnInit(void) int frameHeight = 80; if (GeneralWxUtils::isMac()) { - frameWidth = 1012; + frameWidth = 1052; frameHeight = 80; } if (GeneralWxUtils::isWindows()) { - frameWidth = 1090; + frameWidth = 1160; frameHeight = 120; } if (GeneralWxUtils::isUnix()) { // assumes GTK - frameWidth = 1020; + frameWidth = 1060; frameHeight = 120; #ifdef __linux__ wxLinuxDistributionInfo linux_info = wxGetLinuxDistributionInfo(); @@ -322,8 +329,6 @@ bool GdaApp::OnInit(void) } - - wxPoint appFramePos = wxDefaultPosition; if (GeneralWxUtils::isUnix() || GeneralWxUtils::isMac()) { appFramePos = wxPoint(80,60); @@ -410,8 +415,9 @@ bool GdaApp::OnInit(void) } wxLog::EnableLogging(true); wxLog::DisableTimestamp(); + wxLog::SetComponentLevel("wx", wxLOG_FatalError); #ifdef __DEBUG__ - wxLog::SetLogLevel(wxLOG_User); + wxLog::SetLogLevel(wxLOG_Message); #endif wxLogMessage(GeneralWxUtils::LogOsId()); wxString versionlog = wxString::Format("vs: %d-%d-%d-%d", @@ -573,9 +579,16 @@ void GdaFrame::UpdateToolbarAndMenus() EnableTool(XRCID("ID_COND_PLOT_CHOICES"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_COND_MENU"), proj_open); - GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), shp_proj); - GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), proj_open); - GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), proj_open); + GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), proj_open); + + EnableTool(XRCID("ID_CLUSTERING_CHOICES"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_CLUSTERING_MENU"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_PCA"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_KMEANS"), proj_open); + GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_TOOLS_DATA_HCLUSTER"), proj_open); + EnableTool(XRCID("IDM_3DP"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_3DP"), proj_open); @@ -610,6 +623,8 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MSPL"), proj_open); EnableTool(XRCID("IDM_GMORAN"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_GMORAN"), proj_open); + EnableTool(XRCID("IDM_DMORAN"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_DMORAN"), proj_open); EnableTool(XRCID("IDM_MORAN_EBRATE"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MORAN_EBRATE"), proj_open); EnableTool(XRCID("IDM_UNI_LISA"), shp_proj); @@ -622,7 +637,12 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_LOCAL_G"), shp_proj); EnableTool(XRCID("IDM_LOCAL_G_STAR"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_LOCAL_G_STAR"), shp_proj); - + + + EnableTool(XRCID("IDM_UNI_LOCAL_GEARY"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_UNI_LOCAL_GEARY"), shp_proj); + EnableTool(XRCID("IDM_MUL_LOCAL_GEARY"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MUL_LOCAL_GEARY"), shp_proj); EnableTool(XRCID("IDM_CORRELOGRAM"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_CORRELOGRAM"), shp_proj); @@ -831,12 +851,12 @@ bool GdaFrame::OnCloseProject(bool ignore_unsaved_changes) if (unsaved_ds_data) { project_p->SaveDataSourceData(); } + // always try to save a project file for user, if time or weights + project_p->SaveProjectConf(); } } } - // always try to save a project file for user, if time or weights - project_p->SaveProjectConf(); if (project_p->IsDataTypeChanged()) { wxString msg = _("Geometries have been added to existing Table-only data source. Do you want to save them as a new datasource?"); @@ -1137,6 +1157,7 @@ void GdaFrame::OnNewProject(wxCommandEvent& event) void GdaFrame::ShowOpenDatasourceDlg(wxPoint pos) { + wxLogMessage(" GdaFrame::ShowOpenDatasourceDlg()"); // check if dialog has already been opened wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); while (node) { @@ -1200,6 +1221,7 @@ void GdaFrame::ShowOpenDatasourceDlg(wxPoint pos) */ void GdaFrame::OpenProject(const wxString& full_proj_path) { + wxLogMessage("GdaFrame::OpenProject()"); wxString msg; wxFileName fn(full_proj_path); if (fn.GetExt().CmpNoCase("gda") != 0) { @@ -1286,7 +1308,7 @@ void GdaFrame::OnOpenProject(wxCommandEvent& event) void GdaFrame::InitWithProject() { - + wxLogMessage("Click GdaFrame::InitWithProject()"); // By this point, we know that project has created as // TopFrameManager object with delete_if_empty = false @@ -1340,8 +1362,7 @@ void GdaFrame::OnSaveProject(wxCommandEvent& event) project_p->SaveProjectConf(); } catch( GdaException& e) { // do nothing - } - + } } catch (GdaException& e) { wxMessageDialog dlg (this, e.what(), "Error", wxOK | wxICON_ERROR); dlg.ShowModal(); @@ -1747,6 +1768,69 @@ void GdaFrame::OnKeyEvent(wxKeyEvent& event) event.Skip(); } +void GdaFrame::OnToolsDataPCA(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (PCASettingsDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + PCASettingsDlg* dlg = new PCASettingsDlg(p); + dlg->Show(true); +} + +void GdaFrame::OnToolsDataKMeans(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (KMeansDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + KMeansDlg* dlg = new KMeansDlg(this, p); + dlg->Show(true); +} + +void GdaFrame::OnToolsDataHCluster(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (HClusterDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + HClusterDlg* dlg = new HClusterDlg(this, p); + dlg->Show(true); +} + void GdaFrame::OnToolsWeightsManager(wxCommandEvent& WXUNUSED(event) ) { wxLogMessage("Click GdaFrame::OnToolsWeightsManager"); @@ -1799,7 +1883,8 @@ void GdaFrame::OnConnectivityMapView(wxCommandEvent& event ) { boost::uuids::uuid id = GetWeightsId("Choose Weights for Connectivity Map"); if (id.is_nil()) return; - ConnectivityMapFrame* f = + if (project_p->isTableOnly) return; + ConnectivityMapFrame* f = new ConnectivityMapFrame(this, project_p, id, wxDefaultPosition, GdaConst::conn_map_default_size); @@ -2394,6 +2479,31 @@ void GdaFrame::OnCondPlotChoices(wxCommandEvent& WXUNUSED(event)) } } +void GdaFrame::OnClusteringChoices(wxCommandEvent& WXUNUSED(event)) +{ + Project* p = GetProject(); + if (!p) return; + + wxMenu* popupMenu = wxXmlResource::Get()->LoadMenu("ID_CLUSTERING_MENU"); + + if (popupMenu) { + Project* p = GetProject(); + bool proj_open = (p != 0); + bool shp_proj = proj_open; + + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_TOOLS_DATA_PCA"), + shp_proj); + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_TOOLS_DATA_KMEANS"), + proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_TOOLS_DATA_HCLUSTER"), + proj_open); + PopupMenu(popupMenu, wxDefaultPosition); + } +} + void GdaFrame::OnShowConditionalMapView(wxCommandEvent& WXUNUSED(event) ) { Project* p = GetProject(); @@ -2860,7 +2970,7 @@ void GdaFrame::OnOpenGMoran(wxCommandEvent& event) bool show_weights = true; bool show_distance = false; - wxString title = _("Differential Moran Variable Settings"); + wxString title = _("Bivariate Moran Variable Settings"); VariableSettingsDlg VS(project_p, VariableSettingsDlg::bivariate, show_weights, show_distance, title); if (VS.ShowModal() != wxID_OK) return; @@ -2879,7 +2989,7 @@ void GdaFrame::OnOpenGMoran(wxCommandEvent& event) LisaCoordinator* lc = new LisaCoordinator(w_id, project_p, VS.var_info, VS.col_ids, - LisaCoordinator::differential, + LisaCoordinator::bivariate, false); LisaScatterPlotFrame *f = new LisaScatterPlotFrame(GdaFrame::gda_frame, @@ -2946,6 +3056,115 @@ void GdaFrame::OnGetisMenuChoices(wxCommandEvent& WXUNUSED(event)) if (popupMenu) PopupMenu(popupMenu, wxDefaultPosition); } +void GdaFrame::OnOpenUniLocalGeary(wxCommandEvent& event) +{ + wxLogMessage("Open LocalGearyFrame (OnOpenUniLocalGeary)."); + + Project* p = GetProject(); + if (!p) return; + + std::vector weights_ids; + WeightsManInterface* w_man_int = p->GetWManInt(); + w_man_int->GetIds(weights_ids); + if (weights_ids.size()==0) { + wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + VariableSettingsDlg VS(p, VariableSettingsDlg::univariate, true, false); + if (VS.ShowModal() != wxID_OK) return; + boost::uuids::uuid w_id = VS.GetWeightsId(); + if (w_id.is_nil()) return; + + GalWeight* gw = w_man_int->GetGal(w_id); + + if (gw == NULL) { + wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + + LocalGearyWhat2OpenDlg LWO(this); + if (LWO.ShowModal() != wxID_OK) return; + if (!LWO.m_ClustMap && !LWO.m_SigMap) return; + + + LocalGearyCoordinator* lc = new LocalGearyCoordinator(w_id, p, + VS.var_info, + VS.col_ids, + LocalGearyCoordinator::univariate, + true, LWO.m_RowStand); + + + if (LWO.m_ClustMap) { + LocalGearyMapFrame *sf = new LocalGearyMapFrame(GdaFrame::gda_frame, p, + lc, true, false, false); + } + if (LWO.m_SigMap) { + LocalGearyMapFrame *sf = new LocalGearyMapFrame(GdaFrame::gda_frame, p, + lc, false, false, false, + wxDefaultPosition); + } +} + +void GdaFrame::OnOpenMultiLocalGeary(wxCommandEvent& event) +{ + wxLogMessage("Open LocalGearyFrame (OnOpenMultiLocalGeary)."); + + Project* p = GetProject(); + if (!p) return; + + std::vector weights_ids; + WeightsManInterface* w_man_int = p->GetWManInt(); + w_man_int->GetIds(weights_ids); + if (weights_ids.size()==0) { + wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + MultiVariableSettingsDlg VS(p); + if (VS.ShowModal() != wxID_OK) return; + + boost::uuids::uuid w_id = VS.GetWeightsId(); + if (w_id.is_nil()) return; + + GalWeight* gw = w_man_int->GetGal(w_id); + + if (gw == NULL) { + wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + + LocalGearyWhat2OpenDlg LWO(this); + if (LWO.ShowModal() != wxID_OK) return; + if (!LWO.m_ClustMap && !LWO.m_SigMap) return; + + + LocalGearyCoordinator* lc = new LocalGearyCoordinator(w_id, p, + VS.var_info, + VS.col_ids, + LocalGearyCoordinator::multivariate, + true, LWO.m_RowStand); + + /* + if (LWO.m_Moran) { + LisaScatterPlotFrame *sf = new LisaScatterPlotFrame(GdaFrame::gda_frame, + p, lc); + } + */ + if (LWO.m_ClustMap) { + LocalGearyMapFrame *sf = new LocalGearyMapFrame(GdaFrame::gda_frame, p, + lc, true, false, false); + } + if (LWO.m_SigMap) { + LocalGearyMapFrame *sf = new LocalGearyMapFrame(GdaFrame::gda_frame, p, + lc, false, false, false, + wxDefaultPosition); + } +} void GdaFrame::OnOpenUniLisa(wxCommandEvent& event) { wxLogMessage("Open LisaMapFrame (OnOpenUniLisa)."); @@ -3005,6 +3224,62 @@ void GdaFrame::OnOpenMultiLisa(wxCommandEvent& event) { wxLogMessage("Open LisaMapFrame (OnOpenMultiLisa)."); + Project* project = GetProject(); + if (!project) return; + + std::vector weights_ids; + WeightsManInterface* w_man_int = project->GetWManInt(); + w_man_int->GetIds(weights_ids); + if (weights_ids.size()==0) { + wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + + } + + VariableSettingsDlg VS(project_p, VariableSettingsDlg::bivariate, true, + false); + if (VS.ShowModal() != wxID_OK) return; + boost::uuids::uuid w_id = VS.GetWeightsId(); + if (w_id.is_nil()) return; + + GalWeight* gw = w_man_int->GetGal(w_id); + if (gw == NULL) { + wxString msg = _T("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager to define a valid weights file."); + wxMessageDialog dlg (this, msg, "Warning", wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + + LisaWhat2OpenDlg LWO(this); + if (LWO.ShowModal() != wxID_OK) return; + if (!LWO.m_ClustMap && !LWO.m_SigMap &&!LWO.m_Moran) return; + + LisaCoordinator* lc = new LisaCoordinator(w_id, project_p, + VS.var_info, + VS.col_ids, + LisaCoordinator::bivariate, + true, LWO.m_RowStand); + + if (LWO.m_Moran) { + LisaScatterPlotFrame *sf = new LisaScatterPlotFrame(GdaFrame::gda_frame, + project_p, lc); + } + if (LWO.m_ClustMap) { + LisaMapFrame *sf = new LisaMapFrame(GdaFrame::gda_frame, project_p, + lc, true, true, false); + } + + if (LWO.m_SigMap) { + LisaMapFrame *sf = new LisaMapFrame(GdaFrame::gda_frame, project_p, + lc, false, true, false); + } +} + +void GdaFrame::OnOpenDiffLisa(wxCommandEvent& event) +{ + wxLogMessage("Open LisaMapFrame (OnOpenDiffLisa)."); + Project* p = GetProject(); if (!p) return; @@ -4412,11 +4687,12 @@ void GdaFrame::OnRan99Per(wxCommandEvent& event) if (!t) return; if (LisaMapFrame* f = dynamic_cast(t)) { f->OnRan99Per(event); - } else if (LisaScatterPlotFrame* f - = dynamic_cast(t)) { + } else if (LisaScatterPlotFrame* f = dynamic_cast(t)) { f->OnRan99Per(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnRan99Per(event); + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnRan99Per(event); } } @@ -4432,7 +4708,9 @@ void GdaFrame::OnRan199Per(wxCommandEvent& event) f->OnRan199Per(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnRan199Per(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnRan199Per(event); + } } void GdaFrame::OnRan499Per(wxCommandEvent& event) @@ -4447,7 +4725,9 @@ void GdaFrame::OnRan499Per(wxCommandEvent& event) f->OnRan499Per(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnRan499Per(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnRan499Per(event); + } } void GdaFrame::OnRan999Per(wxCommandEvent& event) @@ -4462,7 +4742,9 @@ void GdaFrame::OnRan999Per(wxCommandEvent& event) f->OnRan999Per(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnRan999Per(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnRan999Per(event); + } } void GdaFrame::OnRanOtherPer(wxCommandEvent& event) @@ -4477,7 +4759,9 @@ void GdaFrame::OnRanOtherPer(wxCommandEvent& event) f->OnRanOtherPer(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnRanOtherPer(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnRanOtherPer(event); + } } void GdaFrame::OnUseSpecifiedSeed(wxCommandEvent& event) @@ -4491,7 +4775,9 @@ void GdaFrame::OnUseSpecifiedSeed(wxCommandEvent& event) f->OnUseSpecifiedSeed(event); } else if (LisaScatterPlotFrame* f = dynamic_cast(t)) { f->OnUseSpecifiedSeed(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnUseSpecifiedSeed(event); + } } void GdaFrame::OnSpecifySeedDlg(wxCommandEvent& event) @@ -4505,6 +4791,8 @@ void GdaFrame::OnSpecifySeedDlg(wxCommandEvent& event) f->OnSpecifySeedDlg(event); } else if (LisaScatterPlotFrame* f = dynamic_cast(t)) { f->OnSpecifySeedDlg(event); + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSpecifySeedDlg(event); } } @@ -4527,7 +4815,9 @@ void GdaFrame::OnSigFilter05(wxCommandEvent& event) f->OnSigFilter05(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSigFilter05(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSigFilter05(event); + } } void GdaFrame::OnSigFilter01(wxCommandEvent& event) @@ -4539,7 +4829,9 @@ void GdaFrame::OnSigFilter01(wxCommandEvent& event) f->OnSigFilter01(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSigFilter01(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSigFilter01(event); + } } void GdaFrame::OnSigFilter001(wxCommandEvent& event) @@ -4551,7 +4843,9 @@ void GdaFrame::OnSigFilter001(wxCommandEvent& event) f->OnSigFilter001(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSigFilter001(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSigFilter001(event); + } } void GdaFrame::OnSigFilter0001(wxCommandEvent& event) @@ -4563,7 +4857,9 @@ void GdaFrame::OnSigFilter0001(wxCommandEvent& event) f->OnSigFilter0001(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSigFilter0001(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSigFilter0001(event); + } } void GdaFrame::OnAddMeanCenters(wxCommandEvent& event) @@ -4673,7 +4969,9 @@ void GdaFrame::OnSaveLisa(wxCommandEvent& event) if (!t) return; if (LisaMapFrame* f = dynamic_cast(t)) { f->OnSaveLisa(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSaveLocalGeary(event); + } } void GdaFrame::OnSelectCores(wxCommandEvent& event) @@ -4685,7 +4983,9 @@ void GdaFrame::OnSelectCores(wxCommandEvent& event) f->OnSelectCores(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSelectCores(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSelectCores(event); + } } void GdaFrame::OnSelectNeighborsOfCores(wxCommandEvent& event) @@ -4697,7 +4997,9 @@ void GdaFrame::OnSelectNeighborsOfCores(wxCommandEvent& event) f->OnSelectNeighborsOfCores(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSelectNeighborsOfCores(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSelectNeighborsOfCores(event); + } } void GdaFrame::OnSelectCoresAndNeighbors(wxCommandEvent& event) @@ -4709,7 +5011,10 @@ void GdaFrame::OnSelectCoresAndNeighbors(wxCommandEvent& event) f->OnSelectCoresAndNeighbors(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnSelectCoresAndNeighbors(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnSelectCoresAndNeighbors(event); + } + } void GdaFrame::OnAddNeighborToSelection(wxCommandEvent& event) @@ -4721,7 +5026,9 @@ void GdaFrame::OnAddNeighborToSelection(wxCommandEvent& event) f->OnAddNeighborToSelection(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnAddNeighborToSelection(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnAddNeighborToSelection(event); + } } void GdaFrame::OnShowAsConditionalMap(wxCommandEvent& event) @@ -4733,7 +5040,9 @@ void GdaFrame::OnShowAsConditionalMap(wxCommandEvent& event) f->OnShowAsConditionalMap(event); } else if (GetisOrdMapFrame* f = dynamic_cast(t)) { f->OnShowAsConditionalMap(event); - } + } else if (LocalGearyMapFrame* f = dynamic_cast(t)) { + f->OnShowAsConditionalMap(event); + } } void GdaFrame::OnViewStandardizedData(wxCommandEvent& event) @@ -4843,13 +5152,15 @@ void GdaFrame::OnViewRegimesRegression(wxCommandEvent& event) wxLogMessage("In GdaFrame::OnViewRegimesRegression()"); TemplateFrame* t = TemplateFrame::GetActiveFrame(); if (!t) return; - if (ScatterNewPlotFrame* f = dynamic_cast(t)) { + if (LisaScatterPlotFrame* f = dynamic_cast(t)) { + f->OnViewRegimesRegression(event); + } else if (ScatterNewPlotFrame* f = dynamic_cast(t)) { f->OnViewRegimesRegression(event); } else if (ScatterPlotMatFrame* f = dynamic_cast(t)) { f->OnViewRegimesRegression(event); } else if (CovSpFrame* f = dynamic_cast(t)) { f->OnViewRegimesRegression(event); - } + } } void GdaFrame::OnViewRegressionSelectedExcluded(wxCommandEvent& event) @@ -5758,6 +6069,11 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_COPY_LEGEND_TO_CLIPBOARD"), GdaFrame::OnCopyLegendToClipboard) EVT_MENU(XRCID("ID_TOOLS_WEIGHTS_MANAGER"), GdaFrame::OnToolsWeightsManager) EVT_TOOL(XRCID("ID_TOOLS_WEIGHTS_MANAGER"), GdaFrame::OnToolsWeightsManager) + + EVT_MENU(XRCID("ID_TOOLS_DATA_PCA"), GdaFrame::OnToolsDataPCA) + EVT_MENU(XRCID("ID_TOOLS_DATA_KMEANS"), GdaFrame::OnToolsDataKMeans) + EVT_MENU(XRCID("ID_TOOLS_DATA_HCLUSTER"), GdaFrame::OnToolsDataHCluster) + EVT_BUTTON(XRCID("ID_TOOLS_WEIGHTS_MANAGER"), GdaFrame::OnToolsWeightsManager) EVT_MENU(XRCID("ID_TOOLS_WEIGHTS_CREATE"), GdaFrame::OnToolsWeightsCreate) EVT_TOOL(XRCID("ID_TOOLS_WEIGHTS_CREATE"), GdaFrame::OnToolsWeightsCreate) @@ -5801,6 +6117,7 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_TOOL(XRCID("ID_REGRESSION_CLASSIC"), GdaFrame::OnRegressionClassic) EVT_TOOL(XRCID("ID_PUBLISH"), GdaFrame::OnPublish) EVT_TOOL(XRCID("ID_COND_PLOT_CHOICES"), GdaFrame::OnCondPlotChoices) + EVT_TOOL(XRCID("ID_CLUSTERING_CHOICES"), GdaFrame::OnClusteringChoices) // The following duplicate entries are needed as a workaround to // make menu enable/disable work for the menu bar when the same menu // item appears twice. @@ -5859,9 +6176,12 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("IDM_MSPL"), GdaFrame::OnOpenMSPL) EVT_TOOL(XRCID("IDM_MSPL"), GdaFrame::OnOpenMSPL) EVT_BUTTON(XRCID("IDM_MSPL"), GdaFrame::OnOpenMSPL) - EVT_MENU(XRCID("IDM_GMORAN"), GdaFrame::OnOpenDiffMoran) - EVT_TOOL(XRCID("IDM_GMORAN"), GdaFrame::OnOpenDiffMoran) - EVT_BUTTON(XRCID("IDM_GMORAN"), GdaFrame::OnOpenDiffMoran) + EVT_MENU(XRCID("IDM_DMORAN"), GdaFrame::OnOpenDiffMoran) + EVT_TOOL(XRCID("IDM_DMORAN"), GdaFrame::OnOpenDiffMoran) + EVT_BUTTON(XRCID("IDM_DMORAN"), GdaFrame::OnOpenDiffMoran) + EVT_MENU(XRCID("IDM_GMORAN"), GdaFrame::OnOpenGMoran) + EVT_TOOL(XRCID("IDM_GMORAN"), GdaFrame::OnOpenGMoran) + EVT_BUTTON(XRCID("IDM_GMORAN"), GdaFrame::OnOpenGMoran) EVT_MENU(XRCID("IDM_MORAN_EBRATE"), GdaFrame::OnOpenMoranEB) EVT_TOOL(XRCID("IDM_MORAN_EBRATE"), GdaFrame::OnOpenMoranEB) EVT_BUTTON(XRCID("IDM_MORAN_EBRATE"), GdaFrame::OnOpenMoranEB) @@ -5872,9 +6192,15 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("IDM_MULTI_LISA"), GdaFrame::OnOpenMultiLisa) EVT_TOOL(XRCID("IDM_MULTI_LISA"), GdaFrame::OnOpenMultiLisa) EVT_BUTTON(XRCID("IDM_MULTI_LISA"), GdaFrame::OnOpenMultiLisa) + EVT_MENU(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) + EVT_TOOL(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) + EVT_BUTTON(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) EVT_MENU(XRCID("IDM_LISA_EBRATE"), GdaFrame::OnOpenLisaEB) EVT_TOOL(XRCID("IDM_LISA_EBRATE"), GdaFrame::OnOpenLisaEB) EVT_BUTTON(XRCID("IDM_LISA_EBRATE"), GdaFrame::OnOpenLisaEB) + EVT_TOOL(XRCID("IDM_UNI_LOCAL_GEARY"), GdaFrame::OnOpenUniLocalGeary) + EVT_TOOL(XRCID("IDM_MUL_LOCAL_GEARY"), GdaFrame::OnOpenMultiLocalGeary) + EVT_TOOL(XRCID("IDM_GETIS_ORD_MENU"), GdaFrame::OnGetisMenuChoices) EVT_BUTTON(XRCID("IDM_GETIS_ORD_MENU"), GdaFrame::OnGetisMenuChoices) EVT_MENU(XRCID("IDM_LOCAL_G"), GdaFrame::OnOpenGetisOrd) diff --git a/GeoDa.h b/GeoDa.h index 5991f06e7..aba8ff78d 100644 --- a/GeoDa.h +++ b/GeoDa.h @@ -157,6 +157,10 @@ class GdaFrame: public wxFrame void OnCopyImageToClipboard(wxCommandEvent& event); void OnCopyLegendToClipboard(wxCommandEvent& event); + void OnToolsDataPCA(wxCommandEvent& event); + void OnToolsDataKMeans(wxCommandEvent& event); + void OnToolsDataHCluster(wxCommandEvent& event); + void OnToolsWeightsManager(wxCommandEvent& event); void OnToolsWeightsCreate(wxCommandEvent& event); void OnConnectivityHistView(wxCommandEvent& event); @@ -197,6 +201,8 @@ class GdaFrame: public wxFrame void OnPublish(wxCommandEvent& event); void OnCondPlotChoices(wxCommandEvent& event); + void OnClusteringChoices(wxCommandEvent& event); + void OnShowConditionalMapView(wxCommandEvent& event); void OnShowConditionalScatterView(wxCommandEvent& event); void OnShowConditionalHistView(wxCommandEvent& event); @@ -231,9 +237,12 @@ class GdaFrame: public wxFrame void OnGetisMenuChoices(wxCommandEvent& event); void OnOpenUniLisa(wxCommandEvent& event); void OnOpenMultiLisa(wxCommandEvent& event); + void OnOpenDiffLisa(wxCommandEvent& event); void OnOpenLisaEB(wxCommandEvent& event); void OnOpenGetisOrd(wxCommandEvent& event); void OnOpenGetisOrdStar(wxCommandEvent& event); + void OnOpenUniLocalGeary(wxCommandEvent& event); + void OnOpenMultiLocalGeary(wxCommandEvent& event); void OnNewCustomCatClassifA(wxCommandEvent& event); void OnNewCustomCatClassifB(wxCommandEvent& event); diff --git a/GeoDamake.centos.opt b/GeoDamake.centos.opt index c70c8de71..d5fb0aa0a 100644 --- a/GeoDamake.centos.opt +++ b/GeoDamake.centos.opt @@ -25,9 +25,11 @@ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 + CPPFLAGS = -I$(GeoDa_ROOT) -CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) -CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) +CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = OBJ_EXT = o diff --git a/GeoDamake.macosx.10.8.opt b/GeoDamake.macosx.10.8.opt index 0be2d857d..160bce2ad 100644 --- a/GeoDamake.macosx.10.8.opt +++ b/GeoDamake.macosx.10.8.opt @@ -23,11 +23,13 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 + GDAL_HEADER = -I$(GEODA_HOME)/libraries/include CPPFLAGS = -I$(GeoDa_ROOT) $(USER_LOG) -CFLAGS = -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) -CXXFLAGS = -Os -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) +CFLAGS = -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -Os -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = -arch x86_64 OBJ_EXT = o diff --git a/GeoDamake.macosx.opt b/GeoDamake.macosx.opt index 77f6cf382..33cb38ae0 100644 --- a/GeoDamake.macosx.opt +++ b/GeoDamake.macosx.opt @@ -2,8 +2,8 @@ GeoDa_ROOT = $(GEODA_HOME)/../.. TARGET = GeoDa -CC = gcc -O2 -CXX = g++ -O2 -arch x86_64 +CC = gcc -Os +CXX = g++ -Os -arch x86_64 LD = g++ -arch x86_64 RM = /bin/rm -f @@ -23,11 +23,14 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 + GDAL_HEADER = -I$(GEODA_HOME)/libraries/include +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 CPPFLAGS = -I$(GeoDa_ROOT) $(USER_LOG) -CFLAGS = -O2 -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) -CXXFLAGS = -O2 -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) +CFLAGS = -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -Os -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = -arch x86_64 OBJ_EXT = o diff --git a/GeoDamake.opt b/GeoDamake.opt index 77f6cf382..082f01428 100644 --- a/GeoDamake.opt +++ b/GeoDamake.opt @@ -2,33 +2,37 @@ GeoDa_ROOT = $(GEODA_HOME)/../.. TARGET = GeoDa -CC = gcc -O2 -CXX = g++ -O2 -arch x86_64 -LD = g++ -arch x86_64 +CC = /usr/bin/gcc +CXX = /usr/bin/g++ +LD = /usr/bin/g++ RM = /bin/rm -f -WXLIBS = $(shell $(GEODA_HOME)/libraries/bin/wx-config --libs xrc,stc,richtext,ribbon,propgrid,aui,gl,html,qa,adv,core,webview,xml,net,base) +WXLIBS = $(shell $(GEODA_HOME)/libraries/bin/wx-config --libs xrc,stc,richtext,ribbon,propgrid,aui,gl,html,webview,qa,adv,core,xml,net,base) WX_HEADER = $(shell $(GEODA_HOME)/libraries/bin/wx-config --cppflags) -LIBS = $(WXLIBS) \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/blas.a \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/lapack.a \ - -L/usr/lib -liconv \ - -L$(GEODA_HOME)/libraries/lib -lgdal -lcurl \ - $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_thread.a \ - $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_system.a \ - $(GEODA_HOME)/libraries/lib/libjson_spirit.a - +LIBS = $(WXLIBS) \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/lapack.a \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/libf2c.a \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/blas.a \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/tmglib.a \ + $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_thread.a \ + $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_system.a \ + $(GEODA_HOME)/libraries/lib/libjson_spirit.a \ + -L$(GEODA_HOME)/libraries/lib -lgdal -lcurl -lcares \ + -L/usr/lib/x86_64-linux-gnu -lGL -lGLU -lglut -lrt -lidn -lssl -lrtmp -lwebkitgtk-1.0 +# Note: Library -lrtmp causes a missing library problem at runtime on +# Ubuntu 14.10 and later. BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost -GDAL_HEADER = -I$(GEODA_HOME)/libraries/include +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 + +GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include -CPPFLAGS = -I$(GeoDa_ROOT) $(USER_LOG) -CFLAGS = -O2 -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) -CXXFLAGS = -O2 -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) -LDFLAGS = -arch x86_64 +CPPFLAGS = -I$(GeoDa_ROOT) +CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) +LDFLAGS = OBJ_EXT = o diff --git a/GeoDamake.ubuntu.opt b/GeoDamake.ubuntu.opt index 34dfc010f..082f01428 100644 --- a/GeoDamake.ubuntu.opt +++ b/GeoDamake.ubuntu.opt @@ -25,11 +25,13 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 + GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include CPPFLAGS = -I$(GeoDa_ROOT) -CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) -CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) +CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = OBJ_EXT = o diff --git a/GeoDamake.ubuntu32.opt b/GeoDamake.ubuntu32.opt index 8ee6c3505..cf79d6c0e 100644 --- a/GeoDamake.ubuntu32.opt +++ b/GeoDamake.ubuntu32.opt @@ -23,11 +23,13 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 + GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include CPPFLAGS = -I$(GeoDa_ROOT) -CFLAGS = -O2 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) -CXXFLAGS = -O2 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) +CFLAGS = -O2 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -O2 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = OBJ_EXT = o diff --git a/Project.cpp b/Project.cpp index fc420f24b..0d25debff 100644 --- a/Project.cpp +++ b/Project.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -90,8 +91,9 @@ min_1nn_dist_arc(-1), max_1nn_dist_arc(-1), max_dist_arc(-1), sourceSR(NULL) { - LOG_MSG("Entering Project::Project (existing project)"); - + wxLogMessage("Entering Project::Project (existing project)"); + wxLogMessage(proj_fname); + SetProjectFullPath(proj_fname); bool wd_success = SetWorkingDir(proj_fname); if (!wd_success) { @@ -116,7 +118,7 @@ sourceSR(NULL) GetCatClassifManager()->VerifyAgainstTable(); } - LOG_MSG("Exiting Project::Project"); + wxLogMessage("Exiting Project::Project"); } /** Constructor for a newly connected datasource */ @@ -138,7 +140,7 @@ min_1nn_dist_euc(-1), max_1nn_dist_euc(-1), max_dist_euc(-1), min_1nn_dist_arc(-1), max_1nn_dist_arc(-1), max_dist_arc(-1), sourceSR(NULL) { - LOG_MSG("Entering Project::Project (new project)"); + wxLogMessage("Entering Project::Project (new project)"); datasource = p_datasource->Clone(); project_title = proj_title; @@ -150,14 +152,14 @@ sourceSR(NULL) wxString fp = fds->GetFilePath(); wd_success = SetWorkingDir(fp); if (!wd_success) { - //LOG_MSG("Warning: could not set Working Dir from " + fp); + wxLogMessage("Warning: could not set Working Dir from " + fp); } } if (!wd_success) { // attempt to set working dir according to standard location wd_success = SetWorkingDir(wxGetHomeDir()); if (!wd_success) { - //LOG_MSG("Warning: could not set Working Dir to wxGetHomeDir()"); + wxLogMessage("Warning: could not set Working Dir to wxGetHomeDir()"); } } @@ -176,12 +178,12 @@ sourceSR(NULL) save_manager->SetMetaDataSaveNeeded(true); } - LOG_MSG("Exiting Project::Project"); + wxLogMessage("Exiting Project::Project"); } Project::~Project() { - LOG_MSG("Entering Project::~Project"); + wxLogMessage("Entering Project::~Project"); if (project_conf) delete project_conf; project_conf=0; // datasource* has been deleted in project_conf* layer* @@ -217,11 +219,12 @@ Project::~Project() // table_int when it closes. //if (table_int) delete table_int; table_int = 0; - LOG_MSG("Exiting Project::~Project"); + wxLogMessage("Exiting Project::~Project"); } void Project::UpdateProjectConf(ProjectConfiguration* conf) { + wxLogMessage("Project::UpdateProjectConf()"); LayerConfiguration* layer_conf = conf->GetLayerConfiguration(); wxString _layername = layer_conf->GetName(); IDataSource* _ds = layer_conf->GetDataSource(); @@ -250,6 +253,7 @@ GdaConst::DataSourceType Project::GetDatasourceType() wxString Project::GetProjectFullPath() { + wxLogMessage("Project::GetProjectFullPath()"); wxString fp; if (!GetWorkingDir().GetPath().IsEmpty() && !proj_file_no_ext.IsEmpty()) { fp << GetWorkingDir().GetPathWithSep(); @@ -260,6 +264,7 @@ wxString Project::GetProjectFullPath() void Project::SetProjectFullPath(const wxString& proj_full_path) { + wxLogMessage("Project::SetProjectFullPath()"); wxFileName temp(proj_full_path); SetWorkingDir(proj_full_path); proj_file_no_ext = temp.GetName(); @@ -292,6 +297,7 @@ bool Project::SetWorkingDir(const wxString& path) Shapefile::ShapeType Project::GetGdaGeometries(vector& geometries) { + wxLogMessage("Project::GetGdaGeometries()"); Shapefile::ShapeType shape_type = Shapefile::NULL_SHAPE; int num_geometries = main_data.records.size(); if ( main_data.header.shape_type == Shapefile::POINT_TYP) { @@ -316,6 +322,7 @@ Shapefile::ShapeType Project::GetGdaGeometries(vector& geometries) void Project::CalcEucPlaneRtreeStats() { + wxLogMessage("Project::CalcEucPlaneRtreeStats()"); using namespace std; GetCentroids(); @@ -338,6 +345,7 @@ void Project::CalcEucPlaneRtreeStats() void Project::CalcUnitSphereRtreeStats() { + wxLogMessage("Project::CalcUnitSphereRtreeStats()"); using namespace std; GetCentroids(); size_t num_obs = centroids.size(); @@ -361,6 +369,7 @@ void Project::CalcUnitSphereRtreeStats() OGRSpatialReference* Project::GetSpatialReference() { + wxLogMessage("Project::GetSpatialReference()"); OGRSpatialReference* spatial_ref = NULL; OGRTable* ogr_table = dynamic_cast(table_int); if (ogr_table != NULL) { @@ -388,6 +397,7 @@ OGRSpatialReference* Project::GetSpatialReference() void Project::SaveOGRDataSource() { + wxLogMessage("Project::SaveOGRDataSource()"); // This function will only be called to save file or directory (OGR) wxString tmp_prefix = "GdaTmp_"; wxArrayString all_tmp_files; @@ -442,8 +452,8 @@ void Project::SaveOGRDataSource() void Project::SaveDataSourceAs(const wxString& new_ds_name, bool is_update) { - LOG_MSG("Entering Project::SaveDataSourceAs"); - LOG_MSG("New Datasource Name:" + new_ds_name); + wxLogMessage("Entering Project::SaveDataSourceAs"); + wxLogMessage("New Datasource Name:" + new_ds_name); vector geometries; @@ -548,6 +558,7 @@ void Project::SaveDataSourceAs(const wxString& new_ds_name, bool is_update) void Project::SpecifyProjectConfFile(const wxString& proj_fname) { + wxLogMessage("Project::SpecifyProjectConfFile()"); if (proj_fname.IsEmpty()) { throw GdaException("Project filename not specified."); } @@ -557,6 +568,7 @@ void Project::SpecifyProjectConfFile(const wxString& proj_fname) bool Project::HasUnsavedChange() { + wxLogMessage("Project::HasUnsavedChange()"); if (GetTableInt()->ChangedSinceLastSave()) return true; @@ -569,7 +581,7 @@ bool Project::HasUnsavedChange() void Project::SaveProjectConf() { - LOG_MSG("Entering Project::SaveProjectConf"); + wxLogMessage("Entering Project::SaveProjectConf"); if (project_conf->GetFilePath().IsEmpty() && (GetTableInt()->IsTimeVariant() || (w_man_int && w_man_int->GetIds().size()>0)) ) { @@ -590,11 +602,13 @@ void Project::SaveProjectConf() if (!project_conf->GetFilePath().IsEmpty()) { UpdateProjectConf(); project_conf->Save(project_conf->GetFilePath()); + GetTableInt()->SetProjectChangedSinceLastSave(false); } - LOG_MSG("Exiting Project::SaveProjectConf"); + wxLogMessage("Exiting Project::SaveProjectConf"); } -bool Project::IsFileDataSource() { +bool Project::IsFileDataSource() +{ if (datasource) return datasource->IsFileDataSource(); return false; @@ -602,7 +616,7 @@ bool Project::IsFileDataSource() { void Project::SaveDataSourceData() { - LOG_MSG("Entering Project::SaveDataSourceData"); + wxLogMessage("Entering Project::SaveDataSourceData"); // for some read-only datasources, suggest Export dialog GdaConst::DataSourceType ds_type = datasource->GetType(); @@ -653,12 +667,12 @@ void Project::SaveDataSourceData() layer_proxy->AddGeometries(main_data); } - LOG_MSG("Exiting Project::SaveDataSourceData"); + wxLogMessage("Exiting Project::SaveDataSourceData"); } void Project::UpdateProjectConf() { - LOG_MSG("In Project::UpdateProjectConf"); + wxLogMessage("In Project::UpdateProjectConf"); LayerConfiguration* layer_conf = project_conf->GetLayerConfiguration(); datasource = layer_conf->GetDataSource(); VarOrderPtree* var_order = layer_conf->GetVarOrderPtree(); @@ -698,6 +712,7 @@ wxString Project::GetProjectTitle() void Project::ExportVoronoi() { + wxLogMessage("Project::ExportVoronoi()"); GetVoronoiPolygons(); // generate a list of list of duplicates. Or, better yet, have a map of // lists where the key is the id, and the value is a list of all ids @@ -716,6 +731,7 @@ void Project::ExportVoronoi() */ void Project::ExportCenters(bool is_mean_centers) { + wxLogMessage("Project::ExportCenters()"); if (is_mean_centers) { GetMeanCenters(); ExportDataDlg dlg(NULL, mean_centers, Shapefile::NULL_SHAPE, "COORD", this); @@ -729,6 +745,8 @@ void Project::ExportCenters(bool is_mean_centers) bool Project::IsPointDuplicates() { + wxLogMessage("Project::IsPointDuplicates()"); + if (!point_duplicates_initialized) { std::vector x; std::vector y; @@ -740,6 +758,8 @@ bool Project::IsPointDuplicates() void Project::DisplayPointDupsWarning() { + wxLogMessage("Project::DisplayPointDupsWarning()"); + if (point_dups_warn_prev_displayed) return; wxString msg("Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Press OK to save duplicate polygon ids to Table."); wxMessageDialog dlg(NULL, msg, "Duplicate Thiessen Polygons Found", wxOK | wxCANCEL | wxICON_INFORMATION); @@ -749,6 +769,8 @@ void Project::DisplayPointDupsWarning() void Project::GetVoronoiRookNeighborMap(std::vector >& nbr_map) { + wxLogMessage("Project::GetVoronoiRookNeighborMap()"); + IsPointDuplicates(); std::vector x; std::vector y; @@ -758,7 +780,8 @@ void Project::GetVoronoiRookNeighborMap(std::vector >& nbr_map) void Project::GetVoronoiQueenNeighborMap(std::vector >& nbr_map) { - IsPointDuplicates(); + wxLogMessage("Project::GetVoronoiQueenNeighborMap()"); + std::vector x; std::vector y; GetCentroids(x, y); @@ -767,6 +790,8 @@ void Project::GetVoronoiQueenNeighborMap(std::vector >& nbr_map) GalElement* Project::GetVoronoiRookNeighborGal() { + wxLogMessage("Project::GetVoronoiRookNeighborGal()"); + if (!voronoi_rook_nbr_gal) { std::vector > nbr_map; GetVoronoiRookNeighborMap(nbr_map); @@ -777,6 +802,8 @@ GalElement* Project::GetVoronoiRookNeighborGal() void Project::SaveVoronoiDupsToTable() { + wxLogMessage("Project::SaveVoronoiDupsToTable()"); + if (!IsPointDuplicates()) return; std::vector data(1); std::vector dup_ids(num_records, -1); @@ -842,11 +869,11 @@ wxGrid* Project::FindTableGrid() void Project::AddNeighborsToSelection(boost::uuids::uuid weights_id) { - LOG_MSG("Entering Project::AddNeighborsToSelection"); + wxLogMessage("Entering Project::AddNeighborsToSelection"); if (!GetWManInt()) return; GalWeight* gal_weights = GetWManInt()->GetGal(weights_id); if (!gal_weights || !gal_weights->gal) { - LOG_MSG("Warning: no current weight matrix found"); + wxLogMessage("Warning: no current weight matrix found"); return; } @@ -883,12 +910,12 @@ void Project::AddNeighborsToSelection(boost::uuids::uuid weights_id) hs.SetEventType(HLStateInt::delta); hs.notifyObservers(); } - LOG_MSG("Exiting Project::AddNeighborsToSelection"); + wxLogMessage("Exiting Project::AddNeighborsToSelection"); } void Project::AddMeanCenters() { - LOG_MSG("In Project::AddMeanCenters"); + wxLogMessage("In Project::AddMeanCenters"); if (!table_int || main_data.records.size() == 0) return; GetMeanCenters(); @@ -927,7 +954,7 @@ void Project::AddMeanCenters() void Project::AddCentroids() { - LOG_MSG("In Project::AddCentroids"); + wxLogMessage("In Project::AddCentroids"); if (!table_int || main_data.records.size() == 0) return; GetCentroids(); @@ -966,6 +993,7 @@ void Project::AddCentroids() const std::vector& Project::GetMeanCenters() { + wxLogMessage("Project::GetMeanCenters()"); int num_obs = main_data.records.size(); if (mean_centers.size() == 0 && num_obs > 0) { if (main_data.header.shape_type == Shapefile::POINT_TYP) { @@ -1001,6 +1029,7 @@ const std::vector& Project::GetMeanCenters() void Project::GetMeanCenters(std::vector& x, std::vector& y) { + wxLogMessage("Project::GetMeanCenters(std::vector& x, std::vector& y)"); GetMeanCenters(); int num_obs = mean_centers.size(); if (x.size() < num_obs) x.resize(num_obs); @@ -1013,6 +1042,7 @@ void Project::GetMeanCenters(std::vector& x, std::vector& y) const std::vector& Project::GetCentroids() { + wxLogMessage("Project::GetCentroids()"); int num_obs = main_data.records.size(); if (centroids.size() == 0 && num_obs > 0) { if (main_data.header.shape_type == Shapefile::POINT_TYP) { @@ -1048,6 +1078,7 @@ const std::vector& Project::GetCentroids() void Project::GetCentroids(std::vector& x, std::vector& y) { + wxLogMessage("Project::GetCentroids(std::vector& x, std::vector& y)"); GetCentroids(); int num_obs = centroids.size(); if (x.size() < num_obs) x.resize(num_obs); @@ -1060,6 +1091,7 @@ void Project::GetCentroids(std::vector& x, std::vector& y) void Project::GetCentroids(std::vector& pts) { + wxLogMessage("Project::GetCentroids(std::vector& pts)"); GetCentroids(); int num_obs = centroids.size(); if (pts.size() < num_obs) pts.resize(num_obs); @@ -1072,6 +1104,7 @@ void Project::GetCentroids(std::vector& pts) const std::vector& Project::GetVoronoiPolygons() { + wxLogMessage("std::vector& Project::GetVoronoiPolygons()"); if (voronoi_polygons.size() == num_records) { return voronoi_polygons; } else { @@ -1227,6 +1260,7 @@ void Project::FillDistances(std::vector& D, WeightsMetaInfo::DistanceMetricEnum dm, WeightsMetaInfo::DistanceUnitsEnum du) { + wxLogMessage("Project::FillDistances()"); const std::vector& c = GetCentroids(); const pairs_bimap_type& pbm = GetSharedPairsBimap(); typedef pairs_bimap_type::const_iterator pbt_ci; @@ -1283,6 +1317,7 @@ void Project::FillDistances(std::vector& D, const pairs_bimap_type& Project::GetSharedPairsBimap() { + wxLogMessage("Project::GetSharedPairsBimap()"); if (pairs_bimap.size() == 0) { // generate bimap int <--> coord pair int n_obs = highlight_state->GetHighlight().size(); @@ -1299,6 +1334,7 @@ const pairs_bimap_type& Project::GetSharedPairsBimap() void Project::CleanupPairsHLState() { + wxLogMessage("Project::CleanupPairsHLState()"); if (pairs_hl_state) pairs_hl_state->closeAndDeleteWhenEmpty(); } @@ -1307,8 +1343,11 @@ void Project::CleanupPairsHLState() initialized differently. */ bool Project::CommonProjectInit() { - if (!InitFromOgrLayer()) + wxLogMessage("Project::CommonProjectInit()"); + if (!InitFromOgrLayer()) { + OGRDataAdapter::GetInstance().Close(); return false; + } num_records = table_int->GetNumberRows(); @@ -1402,9 +1441,9 @@ bool Project::IsDataTypeChanged() /** Initialize the Table and Shape Layer from OGR source */ bool Project::InitFromOgrLayer() { - LOG_MSG("Entering Project::InitFromOgrLayer"); + wxLogMessage("Entering Project::InitFromOgrLayer"); wxString datasource_name = datasource->GetOGRConnectStr(); - LOG_MSG("Datasource name:" + datasource_name); + wxLogMessage("Datasource name:" + datasource_name); GdaConst::DataSourceType ds_type = datasource->GetType(); @@ -1444,7 +1483,7 @@ bool Project::InitFromOgrLayer() cont = prog_dlg.Update(layer_proxy->load_progress); } } - if (!cont) { + if (!cont || !prog_dlg.Update(-1)) { // or if cancel clicked OGRDataAdapter::GetInstance().T_StopReadLayer(layer_proxy); return false; } @@ -1510,7 +1549,10 @@ bool Project::InitFromOgrLayer() } isTableOnly = layer_proxy->IsTableOnly(); - if (!isTableOnly) { + + if (ds_type == GdaConst::ds_dbf) isTableOnly = true; + + if (!isTableOnly) { layer_proxy->ReadGeometries(main_data); } else { // prompt user to select X/Y columns to create a geometry layer @@ -1524,6 +1566,9 @@ bool Project::InitFromOgrLayer() void Project::SetupEncoding(wxString encode_str) { + wxLogMessage("Project::SetupEncoding()"); + wxLogMessage(encode_str); + if (table_int == NULL || encode_str.IsEmpty() ) return; diff --git a/ShapeOperations/OGRLayerProxy.cpp b/ShapeOperations/OGRLayerProxy.cpp index a266f8bc9..ea53e757f 100644 --- a/ShapeOperations/OGRLayerProxy.cpp +++ b/ShapeOperations/OGRLayerProxy.cpp @@ -250,6 +250,7 @@ int OGRLayerProxy::AddField(const wxString& field_name, void OGRLayerProxy::DeleteField(int pos) { + /* // remove this field in local OGRFeature vector for (size_t i=0; i < data.size(); ++i) { OGRFeature* my_feature = data[i]; @@ -264,7 +265,9 @@ void OGRLayerProxy::DeleteField(int pos) } n_cols--; // remove this field from OGRFieldProxy - this->fields.erase( fields.begin() + pos ); + this->fields.erase( fields.begin() + pos ); + */ + this->fields.erase( fields.begin() + pos ); } void OGRLayerProxy::DeleteField(const wxString& field_name) @@ -872,7 +875,7 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) } p_main.records[feature_counter++].contents_p = pc; - } else if (eType == wkbPolygon ) { + } else if (eType == wkbPolygon || eType == wkbCurvePolygon ) { Shapefile::PolygonContents* pc = new Shapefile::PolygonContents(); pc->shape_type = Shapefile::POLYGON; if (geometry) { diff --git a/ShapeOperations/OGRLayerProxy.h b/ShapeOperations/OGRLayerProxy.h index a7a0f0ffa..a161f1da4 100644 --- a/ShapeOperations/OGRLayerProxy.h +++ b/ShapeOperations/OGRLayerProxy.h @@ -244,6 +244,11 @@ class OGRLayerProxy { */ OGRFeature* GetFeatureAt(int rid) { return data[rid];} + bool IsUndefined(int rid, int cid) + { + return !data[rid]->IsFieldSet(cid); + } + wxString GetValueAt(int rid, int cid) { wxString rst(data[rid]->GetFieldAsString(cid)); @@ -296,4 +301,4 @@ class OGRLayerProxy { bool CallCartoDBAPI(wxString url); }; -#endif \ No newline at end of file +#endif diff --git a/ShapeOperations/WeightUtils.cpp b/ShapeOperations/WeightUtils.cpp index 07c9b7881..9e8fa0822 100644 --- a/ShapeOperations/WeightUtils.cpp +++ b/ShapeOperations/WeightUtils.cpp @@ -154,12 +154,12 @@ GalElement* WeightUtils::ReadGal(const wxString& fname, num_obs = num1; } else { num_obs = num2; - if (key_field.IsEmpty()) { + if (key_field.IsEmpty() || key_field == "ogc_fid") { use_rec_order = true; } } - if (num_obs != table_int->GetNumberRows()) { + if (table_int != NULL && num_obs != table_int->GetNumberRows()) { wxString msg = "The number of observations specified in chosen "; msg << "weights file is " << num_obs << ", but the number in the "; msg << "current Table is " << table_int->GetNumberRows(); @@ -222,10 +222,15 @@ GalElement* WeightUtils::ReadGal(const wxString& fname, dlg.ShowModal(); return 0; } - for (int i=0; iDbColNmToColAndTm(key_field, col, tm); if (col == wxNOT_FOUND) { wxString msg = "Specified key value field \""; @@ -416,12 +421,12 @@ GalElement* WeightUtils::ReadGwtAsGal(const wxString& fname, num_obs = num1; } else { num_obs = num2; - if (key_field.IsEmpty()) { + if (key_field.IsEmpty() || key_field == "ogc_fid") { use_rec_order = true; } } - if (num_obs != table_int->GetNumberRows()) { + if (table_int != NULL && num_obs != table_int->GetNumberRows()) { wxString msg = "The number of observations specified in chosen "; msg << "weights file is " << num_obs << ", but the number in the "; msg << "current Table is " << table_int->GetNumberRows(); @@ -470,9 +475,13 @@ GalElement* WeightUtils::ReadGwtAsGal(const wxString& fname, dlg.ShowModal(); return 0; } - for (int i=0; iDbColNmToColAndTm(key_field, col, tm); if (col == wxNOT_FOUND) { diff --git a/SpatialIndAlgs.cpp b/SpatialIndAlgs.cpp index 255181d83..29de3f950 100644 --- a/SpatialIndAlgs.cpp +++ b/SpatialIndAlgs.cpp @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +#include + #include #include #include @@ -668,7 +670,7 @@ GwtWeight* SpatialIndAlgs::thresh_build(const rtree_pt_2d_t& rtree, double th) Wp->gwt = new GwtElement[num_obs]; int cnt=0; - + bool ignore_too_large_compute = false; rtree_pt_2d_t::const_query_iterator it; for (it = rtree.qbegin(bgi::intersects(rtree.bounds())); it != rtree.qend() ; ++it) @@ -690,12 +692,19 @@ GwtWeight* SpatialIndAlgs::thresh_build(const rtree_pt_2d_t& rtree, double th) ++lcnt; } } - if (lcnt > 200) { - // clean up memory - delete Wp; + if (lcnt > 200 && ignore_too_large_compute == false) { wxString msg = _("The current threshold distance value is too large to compute. Please input a smaller distance band (which might leave some observations neighborless) or use other weights (e.g. KNN)."); - throw GdaException(msg.mb_str()); + wxMessageDialog dlg(NULL, msg, "Do you want to continue?", wxYES_NO | wxYES_DEFAULT); + if (dlg.ShowModal() != wxID_YES) { + // clean up memory + delete Wp; + throw GdaException(msg.mb_str()); + } + else { + ignore_too_large_compute = true; + } + } GwtElement& e = Wp->gwt[obs]; e.alloc(lcnt); diff --git a/TemplateCanvas.cpp b/TemplateCanvas.cpp index 5148f90b6..ca066f8e5 100644 --- a/TemplateCanvas.cpp +++ b/TemplateCanvas.cpp @@ -169,10 +169,12 @@ void TemplateCanvas::resizeLayerBms(int width, int height) { deleteLayerBms(); - int vs_w, vs_h; GetClientSize(&vs_w, &vs_h); + if (vs_w <= 0) vs_w = 1; + if (vs_h <=0 ) vs_h = 1; + if (enable_high_dpi_support) { double scale_factor = GetContentScaleFactor(); @@ -183,9 +185,9 @@ void TemplateCanvas::resizeLayerBms(int width, int height) layer1_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); layer2_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); } else { - layer0_bm = new wxBitmap(width, height, 32); - layer1_bm = new wxBitmap(width, height, 32); - layer2_bm = new wxBitmap(width, height, 32); + layer0_bm = new wxBitmap(vs_w, vs_h, 32); + layer1_bm = new wxBitmap(vs_w, vs_h, 32); + layer2_bm = new wxBitmap(vs_w, vs_h, 32); } layer0_valid = false; @@ -582,24 +584,26 @@ void TemplateCanvas::UpdateSelectableOutlineColors() that its state has changed. */ void TemplateCanvas::update(HLStateInt* o) { - ResetBrushing(); + if (layer2_bm) { + ResetBrushing(); - if (draw_sel_shps_by_z_val) { - // force a full redraw - layer0_valid = false; - return; - } + if (draw_sel_shps_by_z_val) { + // force a full redraw + layer0_valid = false; + return; + } - HLStateInt::EventType type = o->GetEventType(); - if (type == HLStateInt::transparency) { - ResetFadedLayer(); - } - // re-paint highlight layer (layer1_bm) - layer1_valid = false; - DrawLayers(); - Refresh(); + HLStateInt::EventType type = o->GetEventType(); + if (type == HLStateInt::transparency) { + ResetFadedLayer(); + } + // re-paint highlight layer (layer1_bm) + layer1_valid = false; + DrawLayers(); + Refresh(); - UpdateStatusBar(); + UpdateStatusBar(); + } } void TemplateCanvas::RenderToDC(wxDC &dc, int w, int h) @@ -641,13 +645,16 @@ void TemplateCanvas::DrawLayers() DrawLayer0(); } - if (!layer1_valid) + if (!layer1_valid) { DrawLayer1(); + } if (!layer2_valid) { DrawLayer2(); } + //wxWakeUpIdle(); + Refresh(); } @@ -743,6 +750,10 @@ void TemplateCanvas::OnPaint(wxPaintEvent& event) wxPaintDC paint_dc(this); paint_dc.Blit(0, 0, sz.x, sz.y, &dc, 0, 0); + + // Draw optional control objects if needed + PaintControls(paint_dc); + helper_PaintSelectionOutline(paint_dc); //wxBufferedPaintDC paint_dc(this, *layer2_bm); @@ -1273,8 +1284,8 @@ void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) selectstate = dragging; remember_shiftdown = event.ShiftDown(); UpdateSelection(remember_shiftdown); - UpdateStatusBar(); - Refresh(false); + //UpdateStatusBar(); + //Refresh(false); } } else if (event.LeftUp()) { wxPoint act_pos = GetActualPos(event); @@ -1294,8 +1305,8 @@ void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) sel2 = GetActualPos(event); UpdateSelection(remember_shiftdown); - UpdateStatusBar(); - Refresh(false); + //UpdateStatusBar(); + //Refresh(false); } else if (event.LeftUp()) { sel2 = GetActualPos(event); @@ -1303,7 +1314,7 @@ void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) UpdateSelection(remember_shiftdown); remember_shiftdown = false; selectstate = start; - Refresh(false); + //Refresh(false); } else if (event.RightDown()) { DisplayRightClickMenu(event.GetPosition()); @@ -1324,10 +1335,10 @@ void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) wxPoint diff = cur - prev; sel1 += diff; sel2 += diff; - UpdateStatusBar(); + //UpdateStatusBar(); UpdateSelection(); - Refresh(false); // keep painting the select rect + //Refresh(false); // keep painting the select rect prev = cur; } } @@ -1595,7 +1606,6 @@ void TemplateCanvas::UpdateSelection(bool shiftdown, bool pointsel) // re-paint highlight layer (layer1_bm) layer1_valid = false; DrawLayers(); - Refresh(); UpdateStatusBar(); } diff --git a/TemplateCanvas.h b/TemplateCanvas.h index e6163354f..e20ca9821 100644 --- a/TemplateCanvas.h +++ b/TemplateCanvas.h @@ -82,8 +82,7 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver circle. */ enum ScrollBarMode { none, horiz_only, vert_only, horiz_and_vert }; - enum SelectableShpType { mixed, circles, points, rectangles, polygons, - polylines }; + enum SelectableShpType { mixed, circles, points, rectangles, polygons, polylines }; /** Colors */ bool selectable_outline_visible; @@ -255,6 +254,14 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver virtual void PopulateCanvas() = 0; + int GetMarginLeft() { return last_scale_trans.slack_x;} + int GetMarginTop() { return last_scale_trans.slack_y;} + + wxSize GetDrawingSize() { + wxSize sz(last_scale_trans.screen_width - last_scale_trans.slack_x * 2, + last_scale_trans.screen_height - last_scale_trans.slack_y * 2); + return sz; + } // draw highlighted sel shapes virtual void DrawHighlightedShapes(wxMemoryDC &dc); @@ -281,7 +288,7 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver std::vector& clrs, std::vector& bins); - int axis_display_precision; + int axis_display_precision; protected: diff --git a/TemplateFrame.cpp b/TemplateFrame.cpp index 3250f9a2b..9e21d2482 100644 --- a/TemplateFrame.cpp +++ b/TemplateFrame.cpp @@ -438,13 +438,12 @@ void TemplateFrame::OnKeyEvent(wxKeyEvent& event) TemplateCanvas chidren classes. */ void TemplateFrame::ExportImage(TemplateCanvas* canvas, const wxString& type) { - LOG_MSG("Entering TemplateFrame::ExportImage"); + wxLogMessage("Entering TemplateFrame::ExportImage"); wxString default_fname(project->GetProjectTitle() + type); wxString filter = "BMP|*.bmp|PNG|*.png"; if (MapCanvas* canvas = dynamic_cast(template_canvas)) { filter ="BMP|*.bmp|PNG|*.png|SVG|*.svg|PostScript|*.ps"; - } int filter_index = 1; //"BMP|*.bmp|PNG|*.png|PostScript|*.ps|SVG|*.svg" @@ -462,14 +461,17 @@ void TemplateFrame::ExportImage(TemplateCanvas* canvas, const wxString& type) if (dialog.ShowModal() != wxID_OK) return; - wxSize sz = canvas->GetVirtualSize(); + wxSize sz = canvas->GetDrawingSize(); + int offset_x = -canvas->GetMarginLeft(); + int offset_y = -canvas->GetMarginTop(); + int new_bmp_w = sz.x; int new_bmp_h = sz.y; - int offset_x = 0; + if (template_legend) { - wxSize sz_legend = template_legend->GetVirtualSize(); - offset_x = sz_legend.x * 2; - new_bmp_w += offset_x; + int legend_width = template_legend->GetDrawingWidth(); + new_bmp_w += legend_width; + offset_x += legend_width; } wxFileName fname = wxFileName(dialog.GetPath()); @@ -478,13 +480,13 @@ void TemplateFrame::ExportImage(TemplateCanvas* canvas, const wxString& type) switch (dialog.GetFilterIndex()) { case 0: { - LOG_MSG("BMP selected"); + wxLogMessage("BMP selected"); wxBitmap bitmap(new_bmp_w, new_bmp_h); wxMemoryDC dc; dc.SelectObject(bitmap); dc.SetBackground(*wxWHITE_BRUSH); dc.Clear(); - dc.DrawBitmap(*template_canvas->GetLayer2(), offset_x, 0); + dc.DrawBitmap(*template_canvas->GetLayer2(), offset_x, offset_y); if (template_legend) { template_legend->RenderToDC(dc, 1.0); } @@ -500,13 +502,13 @@ void TemplateFrame::ExportImage(TemplateCanvas* canvas, const wxString& type) case 1: { - LOG_MSG("PNG selected"); + wxLogMessage("PNG selected"); wxBitmap bitmap(new_bmp_w, new_bmp_h); wxMemoryDC dc; dc.SelectObject(bitmap); dc.SetBackground(*wxWHITE_BRUSH); dc.Clear(); - dc.DrawBitmap(*template_canvas->GetLayer2(), offset_x, 0); + dc.DrawBitmap(*template_canvas->GetLayer2(), offset_x, offset_y); if (template_legend) { template_legend->RenderToDC(dc, 1.0); } @@ -522,12 +524,22 @@ void TemplateFrame::ExportImage(TemplateCanvas* canvas, const wxString& type) break; case 2: { - LOG_MSG("SVG selected"); - wxSVGFileDC dc(str_fname + ".svg", sz.x, sz.y); + wxLogMessage("SVG selected"); - template_canvas->RenderToDC(dc, sz.x, sz.y); + wxSize canvas_sz = canvas->GetDrawingSize(); + int picW = canvas_sz.GetWidth() + 20; + int picH = canvas_sz.GetHeight() + 20; + int legend_w = 0; + double scale = 2.0; if (template_legend) { - template_legend->RenderToDC(dc, 2.5); + legend_w = template_legend->GetDrawingWidth() + 20; + } + + wxSVGFileDC dc(str_fname + ".svg", picW + legend_w + 20, picH); + + template_canvas->RenderToDC(dc, picW + legend_w + 20, picH); + if (template_legend) { + template_legend->RenderToDC(dc, scale); } } break; @@ -538,37 +550,65 @@ void TemplateFrame::ExportImage(TemplateCanvas* canvas, const wxString& type) printData.SetPrintMode(wxPRINT_MODE_FILE); wxPostScriptDC dc(printData); - //dc.SetBrush(*wxTRANSPARENT_BRUSH); - //dc.SetPen(*wxTRANSPARENT_PEN); - //dc.SetPen(*wxBLACK_PEN); int w, h; - dc.GetSize(&w, &h); - LOG_MSG(wxString::Format("wxPostScriptDC GetSize = (%d,%d)", w, h)); + dc.GetSize(&w, &h); // A4 paper like? + wxLogMessage(wxString::Format("wxPostScriptDC GetSize = (%d,%d)", w, h)); if (dc.IsOk()) { dc.StartDoc("printing..."); int paperW, paperH; dc.GetSize(&paperW, &paperH); + double marginFactor = 0.03; int marginW = (int) (paperW*marginFactor/2.0); int marginH = (int) (paperH*marginFactor); + int workingW = paperW - 2*marginW; int workingH = paperH - 2*marginH; + int originX = marginW+1; // experimentally obtained tweak - int originY = marginH+150; // experimentally obtained tweak - dc.SetDeviceOrigin(originX, originY); - int pictW = sz.GetWidth(); - int pictH = sz.GetHeight(); - double scale = 1.5 / wxMin((double) workingH/pictH, - (double) workingW/pictW); + int originY = marginH+300; // experimentally obtained tweak + + // 1/5 use for legend; 4/5 use for map + int legend_w = 0; + double scale = 1.0; + if (template_legend) { + legend_w = workingW * 0.2; + int legend_orig_w = template_legend->GetDrawingWidth(); + scale = legend_orig_w / (double) legend_w; + + dc.SetDeviceOrigin(originX, originY); + template_legend->RenderToDC(dc, scale); } - template_canvas->RenderToDC(dc,w, h); + + wxSize canvas_sz = canvas->GetDrawingSize(); + int picW = canvas_sz.GetWidth(); + int picH = canvas_sz.GetHeight(); + + int map_w = 0; + int map_h = 0; + + // landscape + map_w = workingW - legend_w; + map_h = map_w * picH / picW; + + if (picW < picH) { + // portrait + map_w = map_w * (map_w / (double) map_h); + map_h = map_w * picH / picW; + } + + dc.SetDeviceOrigin( originX + legend_w + 100, originY); + + template_canvas->RenderToDC(dc, map_w, map_h); + + dc.EndDoc(); + } else { - wxString msg("There was a problem generating the "); - msg << "PostScript file. Failed."; + wxString msg = _("There was a problem generating the PostScript file."); wxMessageBox(msg); } } diff --git a/TemplateFrame.h b/TemplateFrame.h index a3ecc1cce..5a721fe3d 100644 --- a/TemplateFrame.h +++ b/TemplateFrame.h @@ -95,7 +95,8 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, virtual void OnPlotsPerViewAll(); virtual bool IsStatusBarVisible() { return is_status_bar_visible; } virtual void OnDisplayStatusBar(wxCommandEvent& event) { - DisplayStatusBar(!IsStatusBarVisible()); } + DisplayStatusBar(!IsStatusBarVisible()); + } virtual void DisplayStatusBar(bool show); /** Called by TemplateCanvas to determine if TemplateFrame will generate the Status Bar String. */ diff --git a/TemplateLegend.cpp b/TemplateLegend.cpp index 360e10d50..aef381634 100644 --- a/TemplateLegend.cpp +++ b/TemplateLegend.cpp @@ -27,7 +27,82 @@ #include "TemplateCanvas.h" #include "TemplateFrame.h" #include "TemplateLegend.h" +#include "Explore/MapNewView.h" + +/////////////////////////////////////////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////////////////////// + +GdaLegendLabel::GdaLegendLabel(int _idx, wxString _text, wxPoint _pos, wxSize _sz) +: d_rect(20) +{ + idx = _idx; + text = _text; + position = _pos; + size = _sz; + isMoving = false; + tmp_position = position; + bbox = wxRect(_pos.x, _pos.y + idx * d_rect, _sz.GetWidth(), _sz.GetHeight()); +} + +GdaLegendLabel::~GdaLegendLabel() +{ + +} + +int GdaLegendLabel::getWidth() +{ + return position.x + size.GetWidth(); +} + +const wxRect& GdaLegendLabel::getBBox() +{ + return bbox; +} + +void GdaLegendLabel::move(const wxPoint& new_pos) +{ + tmp_position = new_pos; +} + +void GdaLegendLabel::reset() +{ + tmp_position = position; +} + +bool GdaLegendLabel::intersect( GdaLegendLabel& another_lbl) +{ + wxRect tmp_bbox(tmp_position.x, tmp_position.y, size.GetWidth(), size.GetHeight()); + return tmp_bbox.Intersects(another_lbl.getBBox()); +} + +bool GdaLegendLabel::contains(const wxPoint& cur_pos) +{ + return bbox.Contains(cur_pos); +} + +void GdaLegendLabel::draw(wxDC& dc, int cur_idx) +{ + dc.DrawText(text, position.x, position.y + d_rect * cur_idx); + //dc.DrawRectangle(bbox); + //bbox = wxRect(position.x, position.y + d_rect * cur_idx, size.GetWidth(), size.GetHeight()); +} + +void GdaLegendLabel::drawMove(wxDC& dc) +{ + //wxPen pen(*wxBLACK, 1, wxDOT); + //dc.SetPen(pen); + //dc.SetBrush(*wxTRANSPARENT_BRUSH); + //dc.DrawRectangle(position.x, tmp_position.y, size.GetWidth(), size.GetHeight()); + //dc.SetPen(*wxBLACK_PEN); + dc.DrawText(text, position.x, tmp_position.y); +} + +/////////////////////////////////////////////////////////////////////////////////////////////// +// +// +/////////////////////////////////////////////////////////////////////////////////////////////// const int TemplateLegend::ID_CATEGORY_COLOR = wxID_HIGHEST + 1; IMPLEMENT_ABSTRACT_CLASS(TemplateLegend, wxScrolledWindow) @@ -43,7 +118,11 @@ TemplateLegend::TemplateLegend(wxWindow *parent, : wxScrolledWindow(parent, wxID_ANY, pos, size, wxBORDER_SUNKEN | wxVSCROLL | wxHSCROLL), legend_background_color(GdaConst::legend_background_color), -template_canvas(template_canvas_s) +template_canvas(template_canvas_s), +isLeftDown(false), +select_label(NULL), +recreate_labels(false), +isDragDropAllowed(false) { SetBackgroundColour(GdaConst::legend_background_color); d_rect = 20; @@ -59,6 +138,10 @@ template_canvas(template_canvas_s) TemplateLegend::~TemplateLegend() { + for (int i=0; iLoadMenu("ID_MAP_VIEW_MENU_LEGEND"); + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_MAP_VIEW_MENU_LEGEND"); AddCategoryColorToMenu(optMenu, cat_clicked); wxMenuItem* mi = optMenu->FindItem(XRCID("ID_LEGEND_USE_SCI_NOTATION")); if (mi && mi->IsCheckable()) { @@ -80,11 +161,79 @@ void TemplateLegend::OnEvent(wxMouseEvent& event) return; } + if (isDragDropAllowed == false) { + if (cat_clicked != -1 && event.LeftUp()) { + SelectAllInCategory(cat_clicked, event.ShiftDown()); + } + return; + } + if (event.LeftDown()) { - LOG_MSG("TemplateLegend::OnEvent, event.LeftDown() == true"); - if (cat_clicked != -1) { - SelectAllInCategory(cat_clicked, event.ShiftDown()); - } + isLeftDown = true; + for (int i=0;icontains(event.GetPosition())){ + select_label = labels[i]; + break; + } + } + } else if (event.Dragging()) { + if (isLeftDown) { + isLeftMove = true; + // moving + if (select_label) { + select_label->move(event.GetPosition()); + for (int i=0; iintersect(*labels[i])){ + LOG_MSG("intersect"); + // exchange labels only + new_order.clear(); + for (int j=0; jidx; + int to = labels[i]->idx; + // get new order + new_order[from] = to; + new_order[to] = from; + break; + } + } else { + LOG_MSG("other"); + new_order.clear(); + for (int j=0; jintersect(*labels[i])){ + // exchange labels applying o map + int from = select_label->idx; + int to = labels[i]->idx; + template_canvas->cat_data.ExchangeLabels(from, to); + template_canvas->ResetShapes(); + recreate_labels = true; + break; + } + } + } + } + select_label = NULL; + Refresh(); + } else { + // only left click + if (cat_clicked != -1) { + SelectAllInCategory(cat_clicked, event.ShiftDown()); + } + } + isLeftDown = false; } } @@ -118,7 +267,7 @@ void TemplateLegend::AddCategoryColorToMenu(wxMenu* menu, int cat_clicked) int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); if (cat_clicked < 0 || cat_clicked >= num_cats) return; wxString s; - s << "Color for Category"; + s << _("Color for Category"); wxString cat_label = template_canvas->cat_data.GetCategoryLabel(c_ts, cat_clicked); if (!cat_label.IsEmpty()) s << ": " << cat_label; @@ -144,7 +293,7 @@ void TemplateLegend::OnCategoryColor(wxCommandEvent& event) } wxColourDialog dialog(this, &data); - dialog.SetTitle("Choose Cateogry Color"); + dialog.SetTitle(_("Choose Cateogry Color")); if (dialog.ShowModal() == wxID_OK) { wxColourData retData = dialog.GetColourData(); for (int ts=0; tscat_data.GetCanvasTmSteps(); ts++) { @@ -165,25 +314,78 @@ void TemplateLegend::OnDraw(wxDC& dc) return; dc.SetFont(*GdaConst::small_font); - dc.DrawText(template_canvas->GetCategoriesTitle(), px, 13); + wxString title = template_canvas->GetCategoriesTitle(); + dc.DrawText(title, px, 13); + wxSize title_sz = dc.GetTextExtent(title); + title_width = title_sz.GetWidth(); int time = template_canvas->cat_data.GetCurrentCanvasTmStep(); int cur_y = py; int numRect = template_canvas->cat_data.GetNumCategories(time); dc.SetPen(*wxBLACK_PEN); + + // init labels + if (recreate_labels || labels.size() != numRect) { + for (int i=0; icat_data.GetCatLblWithCnt(time, i); + wxPoint pt( px + m_l + 10, init_y - (m_w / 2)); + wxSize sz = dc.GetTextExtent(lbl); + labels.push_back(new GdaLegendLabel(i, lbl, pt, sz)); + //init_y += d_rect; + + new_order.push_back(i); + } + + recreate_labels = false; + } + for (int i=0; icat_data.GetCategoryColor(time, i); if (clr.IsOk()) dc.SetBrush(clr); else dc.SetBrush(*wxBLACK_BRUSH); - - dc.DrawText(template_canvas->cat_data.GetCatLblWithCnt(time, i), - (px + m_l + 10), cur_y - (m_w / 2)); dc.DrawRectangle(px, cur_y - 8, m_l, m_w); cur_y += d_rect; } + + for (int i=0; idraw(dc, i); + } + } + + if ( select_label ) { + select_label->drawMove(dc); + } +} + +void TemplateLegend::Recreate() +{ + recreate_labels = true; + Refresh(); +} + +int TemplateLegend::GetDrawingWidth() +{ + int max_width = title_width; + for (int i=0; igetWidth() > max_width) { + max_width = lbl->getWidth(); + } + } + return max_width; } void TemplateLegend::RenderToDC(wxDC& dc, double scale) @@ -214,8 +416,10 @@ void TemplateLegend::RenderToDC(wxDC& dc, double scale) dc.DrawText(template_canvas->cat_data.GetCatLblWithCnt(time, i), (px + m_l + 10) / scale, (cur_y - (m_w / 2)) / scale); + dc.DrawRectangle(px / scale, (cur_y - 8) / scale, m_l / scale, m_w / scale); + cur_y += d_rect; } } diff --git a/TemplateLegend.h b/TemplateLegend.h index f231eb4e5..c2c4471f6 100644 --- a/TemplateLegend.h +++ b/TemplateLegend.h @@ -23,10 +23,58 @@ #include #include #include +#include +#include + +#include +#include class TemplateCanvas; class TemplateFrame; +class GdaLegendLabel +{ +public: + GdaLegendLabel(int idx, wxString text, wxPoint pos, wxSize sz); + + virtual ~GdaLegendLabel(); + + void move(const wxPoint& new_pos); + + void reset(); + + bool intersect( GdaLegendLabel& another_lbl); + + bool contains(const wxPoint& cur_pos); + + void draw(wxDC& dc, int cur_idx); + + void drawMove(wxDC& dc); + + const wxRect& getBBox(); + + int getWidth(); + + int idx; + +protected: + + + bool isMoving; + + wxPoint position; + + wxPoint tmp_position; + + wxString text; + + wxSize size; + + wxRect bbox; + + int d_rect; +}; + class TemplateLegend: public wxScrolledWindow { public: @@ -34,6 +82,8 @@ class TemplateLegend: public wxScrolledWindow const wxPoint& pos, const wxSize& size); virtual ~TemplateLegend(); + void Recreate(); + int GetDrawingWidth(); void RenderToDC(wxDC& dc, double scale); void OnCategoryColor(wxCommandEvent& event); void OnEvent(wxMouseEvent& event); @@ -42,17 +92,30 @@ class TemplateLegend: public wxScrolledWindow wxColour legend_background_color; TemplateCanvas* template_canvas; + bool isDragDropAllowed; + + wxSize maxSize; + protected: void SelectAllInCategory(int category, bool add_to_selection = false); - int GetCategoryClick(wxMouseEvent& event); + int GetCategoryClick(wxMouseEvent& event); void AddCategoryColorToMenu(wxMenu* menu, int cat_clicked); + int title_width; int px, py, m_w, m_l; int d_rect; bool all_init; int opt_menu_cat; // last category added to Legend menu static const int ID_CATEGORY_COLOR; + + bool recreate_labels; + std::vector new_order; + std::vector labels; + GdaLegendLabel* select_label; + bool isLeftDown; + bool isLeftMove; + DECLARE_ABSTRACT_CLASS(TemplateLegend) DECLARE_EVENT_TABLE() diff --git a/rc/GdaAppResources.cpp b/rc/GdaAppResources.cpp index 859290780..96ff3a3f4 100644 --- a/rc/GdaAppResources.cpp +++ b/rc/GdaAppResources.cpp @@ -15530,7 +15530,7 @@ static unsigned char xml_res_file_7[] = { 16,48,4,12,1,67,192,16,48,4,12,1,67,160,133,35,240,255,75,175,9,51,209, 227,12,205,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_8 = 339767; +static size_t xml_res_size_8 = 358367; static unsigned char xml_res_file_8[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,117,116,102,45,56,34,63,62,10,60,114,101, @@ -17804,14 +17804,370 @@ static unsigned char xml_res_file_8[] = { 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72, -84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,116,105,116,108,101,62,78,111,32,87,101,105,103,104,116,115,32, +70,111,117,110,100,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101, +110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, +32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, +119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69, +95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, +121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, +103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71, +83,95,68,76,71,95,49,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114, +105,97,98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, +66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, +49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, +79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84, +84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,116,105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101,116, +116,105,110,103,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, +116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66, +79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121, +108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34, +32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95, +68,76,71,95,49,95,87,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114, +105,97,98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, +66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, +49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, +79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72, +84,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, +110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71, +78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, +101,62,86,97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,60,47, +116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100, +62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69, +77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124, +119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, +61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,49,95, +68,73,83,84,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97,98, +108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86, +97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66, +111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,116,97,110,99,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, +71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,68,73,83,84,65,78,67, +69,95,77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,49,50,48,44,45,49,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, 72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, @@ -17819,15 +18175,15 @@ static unsigned char xml_res_file_8[] = { 62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, 111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, -105,116,108,101,62,78,111,32,87,101,105,103,104,116,115,32,70,111,117,110, -100,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, +105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101,116,116,105,110, +103,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, 101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60, 115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83, 84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69, 82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62, 10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,49, +101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,50, 34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97,98,108,101,83, 101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, @@ -17836,190 +18192,121 @@ static unsigned char xml_res_file_8[] = { 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97, -98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34, -32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66, -95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80, -65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,69,88,80,65,78,68, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,115,116,32,86,97,114,105,97,98,108,101,32,40,88,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, -101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, -69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86, -97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,60,47,116,105,116, -108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47, -99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101, -62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69, -78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67, -76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68, -95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,49,95,87,34,32,115, -117,98,99,108,97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116,116, -105,110,103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, -61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, +73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76, 69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, -47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,84,79,80,124,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -87,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, +119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84, -124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, +82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,110,100,32,86,97,114, +105,97,98,108,101,32,40,89,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79, +82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, +34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, +78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85, +84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, 98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72, @@ -18046,202 +18333,73 @@ static unsigned char xml_res_file_8[] = { 114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101, -116,116,105,110,103,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101, -110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, -32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69, -95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, -121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71, -83,95,68,76,71,95,49,95,68,73,83,84,34,32,115,117,98,99,108,97,115,115, -61,34,86,97,114,105,97,98,108,101,83,101,116,116,105,110,103,115,68,108, -103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +116,116,105,110,103,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60, +99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, +62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, +124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90, +69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115, +116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, +111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73, +78,71,83,95,68,76,71,95,50,95,87,34,32,115,117,98,99,108,97,115,115,61, +34,86,97,114,105,97,98,108,101,83,101,116,116,105,110,103,115,68,108,103, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, 60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65, -77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,49,115,116,32,86,97,114,105,97,98,108,101,32, +40,88,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71, -72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80, -124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110, -99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101, -61,34,73,68,95,68,73,83,84,65,78,67,69,95,77,69,84,82,73,67,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, -69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98, -108,101,32,83,101,116,116,105,110,103,60,47,116,105,116,108,101,62,10,32, -32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, -114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, -84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82, -69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, -105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69, -84,84,73,78,71,83,95,68,76,71,95,50,34,32,115,117,98,99,108,97,115,115, -61,34,86,97,114,105,97,98,108,101,83,101,116,116,105,110,103,115,68,108, -103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78, -65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,115,116,32,86,97,114,105,97,98,108, -101,32,40,88,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78, -84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110, -97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, +61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48, +44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, @@ -18304,319 +18462,113 @@ static unsigned char xml_res_file_8[] = { 105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87, +101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98, -108,101,32,83,101,116,116,105,110,103,115,60,47,116,105,116,108,101,62, -10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, -116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -95,83,69,84,84,73,78,71,83,95,68,76,71,95,50,95,87,34,32,115,117,98,99, -108,97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116,116,105,110, -103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,115,116,32,86, -97,114,105,97,98,108,101,32,40,88,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, -66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, -49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, -80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65, -78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, +32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95, -78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98, -108,101,32,40,89,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, -110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,76,69,70,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, -78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73, -71,72,84,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120, -73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71, -72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120, -73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84, -65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98,108,101, -32,83,101,116,116,105,110,103,115,60,47,116,105,116,108,101,62,10,32,32, -32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, -114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, -84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82, -69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, -105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69, -84,84,73,78,71,83,95,68,76,71,95,82,65,84,69,34,32,115,117,98,99,108,97, -115,115,61,34,82,97,116,101,83,109,111,111,116,104,101,114,68,108,103,34, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,69,118,101,110,116,32,86,97,114,105,97,98,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,57,44,49,48,48,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71, -76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, -105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, +105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101,116,116,105,110, +103,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101, +114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68, +69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76, +71,95,82,65,84,69,34,32,115,117,98,99,108,97,115,115,61,34,82,97,116,101, +83,109,111,111,116,104,101,114,68,108,103,34,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, 111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32, +101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -66,97,115,101,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119,120, -65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +69,118,101,110,116,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111, -120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62, +120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,49,49,57,44,49,49,48,100,60,47,115,105,122,101,62,10, +115,105,122,101,62,49,49,57,44,49,48,48,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, 116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121, 108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -18639,249 +18591,75 @@ static unsigned char xml_res_file_8[] = { 79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, -82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,77,97,112,32,84,104,101,109,101,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34, -73,68,95,84,72,69,77,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,49,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,116,101,103,111, -114,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -51,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,112,105,110,67,116,114,108, -34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71,79,82,73, -69,83,95,83,80,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,52,60,47, -118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109, -105,110,62,49,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,109,97,120,62,49,48,60,47,109,97,120,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, +82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,32,86,97, +114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, 97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, +73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120, -73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, -101,62,82,97,116,101,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60, -99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, -62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, -124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90, -69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115, -116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, -111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73, -78,71,83,95,68,76,71,95,82,65,84,69,95,87,34,32,115,117,98,99,108,97,115, -115,61,34,82,97,116,101,83,109,111,111,116,104,101,114,68,108,103,34,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,69,118,101,110,116,32,86,97,114,105,97,98,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, +61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49, +57,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,57,44,49,48,48,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71, -76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, -105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, +73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -66,97,115,101,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119,120, -65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111, -120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,49,49,57,44,49,49,48,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, -78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, -84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, -47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, -78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, @@ -18934,79 +18712,302 @@ static unsigned char xml_res_file_8[] = { 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, 120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, 102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,51,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, -71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, +99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +79,75,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,116,105,116,108,101,62,82,97,116,101,115,60,47, +116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100, +62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69, +77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124, +119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, +61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,82,65, +84,69,95,87,34,32,115,117,98,99,108,97,115,115,61,34,82,97,116,101,83,109, +111,111,116,104,101,114,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +69,118,101,110,116,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111, +120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,49,49,57,44,49,48,48,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, +78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, +84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, +78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, +82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,32,86,97, +114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, +73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, +61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49, +57,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, +73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,77,97,112,32,84,104,101,109,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, +34,73,68,95,84,72,69,77,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,45,49,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,116,101,103, +111,114,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,51,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,112,105,110,67,116, +114,108,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71, +79,82,73,69,83,95,83,80,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62, +52,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,109,105,110,62,49,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,109,97,120,62,49,48,60,47,109,97,120,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +87,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, +32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, +82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 60,116,105,116,108,101,62,82,97,116,101,115,60,47,116,105,116,108,101,62, 10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, @@ -19182,66 +19183,110 @@ static unsigned char xml_res_file_8[] = { 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97, -98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105,116,108,101, -62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, -110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119, -120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124, -119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83, -69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,52,34,32,115,117,98,99,108, -97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116,116,105,110,103, -115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61, -34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, +69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86, +97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105, +116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, +47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, +69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120, +67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, +73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,68,76,71,95,52,34,32,115, +117,98,99,108,97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116,116, +105,110,103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97, +109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,115,116,32,86, +97,114,105,97,98,108,101,32,40,88,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, +66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, +49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,55,54,44,49,49,48,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95, 78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,49,115,116,32,86,97,114,105,97,98, -108,101,32,40,88,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98, +108,101,32,40,89,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, 97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, @@ -19251,7 +19296,7 @@ static unsigned char xml_res_file_8[] = { 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, -110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32, +110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, 122,101,62,55,54,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, @@ -19270,52 +19315,52 @@ static unsigned char xml_res_file_8[] = { 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, 110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98,108,101,32,40,89, -41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,51,95,78,65,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +51,114,100,32,86,97,114,105,97,98,108,101,32,40,90,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, +73,65,66,76,69,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44,49,49,48,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, +119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61, -34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44, -49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, -66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, @@ -19326,115 +19371,72 @@ static unsigned char xml_res_file_8[] = { 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, 97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,51,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,114,100,32,86,97,114, -105,97,98,108,101,32,40,90,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79, -82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, -34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,51,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,55,54,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +82,52,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,116,104,32,86,97,114, +105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,52,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,55,54,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,124,119,120,69,88,80,65,78,68,60,47,102,108, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,76,69,70,84,124,119,120,69,88,80,65,78,68,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, 114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,52,95,78,65,77,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,52,116,104,32,86,97,114,105,97,98,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, -65,82,73,65,66,76,69,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44,49,49,48,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, -71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, -79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, 116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, @@ -19580,7 +19582,192 @@ static unsigned char xml_res_file_8[] = { 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32, +34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, +105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101,116,116,105,110, +103,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, +101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60, +115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83, +84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69, +82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62, +10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95, +68,76,71,95,49,95,87,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114, +105,97,98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105, +115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66, +76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, +105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, +124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, +105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49,34,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, +71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, +101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, @@ -19616,729 +19803,544 @@ static unsigned char xml_res_file_8[] = { 98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68, 95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95,68,76,71,95,49, -95,87,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97,98,108, -101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32,32,60,111, +95,68,73,83,84,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97, +98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32, +122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34, -32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,83,69,76, -95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, +66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, +49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, -90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, +105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82, -73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, +124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, +105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49,34,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,116,97,110,99,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, +71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,68,73,83,84,65,78,67, +69,95,77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,49,50,48,44,45,49,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, 67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, 62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, 111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -87,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84, -124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72, -84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, +105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101,116,116,105,110, +103,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, +101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60, +115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83, +84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69, +82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62, +10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95, +68,76,71,95,50,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97, +98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, 10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101, -116,116,105,110,103,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101, -110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, -32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69, -95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, -121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71, -83,95,84,73,77,69,95,68,76,71,95,49,95,68,73,83,84,34,32,115,117,98,99, -108,97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116,116,105,110, -103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101, -61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61, -34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44, -49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, -66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,86,65,82,83,69,76,95,84,73,77,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69, -70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,49,115,116,32,86,97,114,105,97,98,108,101,32,40,88,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68, -95,84,73,77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84, -124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119, +120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, -62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49, +34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, 101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,95,68,73,83,84,65,78,67,69,95,77,69,84,82,73,67,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69, -70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,50,110,100,32,86,97,114,105,97,98,108,101,32,40,89,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, -78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98,108, -101,32,83,101,116,116,105,110,103,60,47,116,105,116,108,101,62,10,32,32, -32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, -114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, -84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82, -69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, -105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69, -84,84,73,78,71,83,95,84,73,77,69,95,68,76,71,95,50,34,32,115,117,98,99, -108,97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116,116,105,110, -103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101, -61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,115,116,32,86,97,114, -105,97,98,108,101,32,40,88,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79, -82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, -34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119, +120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101, -34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119, -120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119, -120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -86,65,82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,110,100,32,86, -97,114,105,97,98,108,101,32,40,89,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, -66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, -50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,50, +34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, 80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86, -65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, -105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, -124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,50,34,47,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120, -82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, 111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98, -108,101,32,83,101,116,116,105,110,103,115,60,47,116,105,116,108,101,62, -10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, -116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -95,83,69,84,84,73,78,71,83,95,84,73,77,69,95,68,76,71,95,50,95,87,34,32, -115,117,98,99,108,97,115,115,61,34,86,97,114,105,97,98,108,101,83,101,116, -116,105,110,103,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, -84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110, -97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70, +84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, +69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86, +97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105, +116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, +47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, +69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120, +67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, +73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95,68,76,71, +95,50,95,87,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97,98, +108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,49,115,116,32,86,97,114,105,97,98,108,101,32,40,88,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,115,116,32, -86,97,114,105,97,98,108,101,32,40,88,41,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, -66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, -49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119, +120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49, +34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, 80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86, -65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, -105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, -124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49,34,47,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120, -82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,50,110,100,32,86,97,114,105,97,98,108,101,32,40,89,41,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,50,110,100,32,86,97,114,105,97,98,108,101,32,40,89,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, @@ -20466,564 +20468,258 @@ static unsigned char xml_res_file_8[] = { 32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97,98, -108,101,32,83,101,116,116,105,110,103,115,60,47,116,105,116,108,101,62, -10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, -116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -95,83,69,84,84,73,78,71,83,95,84,73,77,69,95,68,76,71,95,82,65,84,69,34, -32,115,117,98,99,108,97,115,115,61,34,82,97,116,101,83,109,111,111,116, -104,101,114,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109, -101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32, +34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, +69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86, +97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105, +116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, +47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, +69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120, +67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, +73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95,68,76,71, +95,82,65,84,69,34,32,115,117,98,99,108,97,115,115,61,34,82,97,116,101,83, +109,111,111,116,104,101,114,68,108,103,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, +69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,118,101,110,116, -32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, -82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83, -84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, -110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,49,57,44,49,48,48,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +69,118,101,110,116,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101, -34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119, -120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111, +120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,49,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,49,49,57,44,49,48,48,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, +78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, +84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, -73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115, -101,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68, -74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34, -32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,49,57,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101, -34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119, -120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101, -61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,77,97,112,32,84,104,101,109,101,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,95,84,72,69,77,65,84,73,67,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, -67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,116, -101,103,111,114,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,51,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,112,105,110,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69, -71,79,82,73,69,83,95,83,80,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, -62,52,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,109,105,110,62,49,60,47,109,105,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,109,97,120,62,49,48,60,47,109,97,120,62,10,32,32, +73,68,95,86,65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73, +71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, -82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,49,34, +47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, -101,62,82,97,116,101,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60, -99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, -62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, -124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90, -69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115, -116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, -111,103,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73, -78,71,83,95,84,73,77,69,95,68,76,71,95,82,65,84,69,95,87,34,32,115,117, -98,99,108,97,115,115,61,34,82,97,116,101,83,109,111,111,116,104,101,114, -68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119, -120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78, -65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,69,118,101,110,116,32,86,97,114,105, -97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78, -83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119, +120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34, -73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,57,44, -49,48,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, -66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,97,115,101,32,86,97,114,105,97,98,108,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76, +124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, +66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69, +50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,49,49,57,44,49,49,48,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, +73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, +69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, -101,61,34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, -62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,95,86,65,82,83,69,76,95,84,73,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120, +82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69,88, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,50, +34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, 80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80, -65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,32,86,97, -114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, -73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, -61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49, -57,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, 119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, -90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, -49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, -80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, -73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, -105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, -120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32, -110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, @@ -21077,35 +20773,342 @@ static unsigned char xml_res_file_8[] = { 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, 97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, 67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79, -77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,51,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, -71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,82, +97,116,101,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, +116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66, +79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121, +108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34, +32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95, +84,73,77,69,95,68,76,71,95,82,65,84,69,95,87,34,32,115,117,98,99,108,97, +115,115,61,34,82,97,116,101,83,109,111,111,116,104,101,114,68,108,103,34, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,69,118,101,110,116,32,86,97,114,105,97,98,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, +73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,57,44,49,48,48,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71, +76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, +69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, +34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, +71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, +78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65, +82,50,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,32,86,97, +114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, +73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, +61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49, +57,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, +73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32, +110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,77,97,112,32,84,104,101,109,101,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, +67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78, +83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,72,69,77,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,97,116,101,103,111,114,105,101,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,51,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,112,105,110,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,95,78,85,77,95,67,65,84,69,71,79,82,73,69,83,95,83,80,73,78,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,97,108,117,101,62,52,60,47,118,97,108,117,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62,49,60,47,109,105, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49, +48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79, +77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, +71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, 49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, @@ -21129,145 +21132,62 @@ static unsigned char xml_res_file_8[] = { 32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69, -76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,82,97,116,101,115, -60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, -100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, -116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, -69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82, -124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95, -68,76,71,95,51,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97, -98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,49,115,116,32,86,97,114,105,97,98,108,101,32,40,88,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, -65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, -71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, -119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73, -77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84, -124,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,82, +97,116,101,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, +116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66, +79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121, +108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34, +32,110,97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95, +84,73,77,69,95,68,76,71,95,51,34,32,115,117,98,99,108,97,115,115,61,34, +86,97,114,105,97,98,108,101,83,101,116,116,105,110,103,115,68,108,103,34, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62, +116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98,108,101,32,40,89, +108,97,98,101,108,62,49,115,116,32,86,97,114,105,97,98,108,101,32,40,88, 41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, @@ -21278,7 +21198,7 @@ static unsigned char xml_res_file_8[] = { 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61, -34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32,32, +34,73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44, 49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, @@ -21317,7 +21237,7 @@ static unsigned char xml_res_file_8[] = { 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, 60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, @@ -21332,58 +21252,141 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, 62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69,88,80, 65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,51,95,78,65,77,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -51,114,100,32,86,97,114,105,97,98,108,101,32,40,90,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -73,65,66,76,69,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76, -69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, -62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95, +78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98, +108,101,32,40,89,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,57,48,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,86,65,82,51,95,78,65,77,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,114,100,32,86,97,114,105,97,98,108,101,32,40,90,41,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,73,65,66,76,69,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,49,48,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, @@ -21447,180 +21450,97 @@ static unsigned char xml_res_file_8[] = { 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, -101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, -69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86, -97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105, -116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, -47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, -101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, -69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120, -67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, -73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73,77,69,95,68,76,71, -95,52,34,32,115,117,98,99,108,97,115,115,61,34,86,97,114,105,97,98,108, -101,83,101,116,116,105,110,103,115,68,108,103,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, +105,116,108,101,62,86,97,114,105,97,98,108,101,32,83,101,116,116,105,110, +103,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101, +114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68, +69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,95,86,65,82,95,83,69,84,84,73,78,71,83,95,84,73, +77,69,95,68,76,71,95,52,34,32,115,117,98,99,108,97,115,115,61,34,86,97, +114,105,97,98,108,101,83,101,116,116,105,110,103,115,68,108,103,34,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,49,115,116,32,86,97,114,105,97,98,108,101,32,40,88,41, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,49,95,78,65,77,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,115,116,32,86,97,114,105,97,98,108,101,32,40,88,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44,49,49,48,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76, -69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, -62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, -119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34, +73,68,95,86,65,82,73,65,66,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44,49, +49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66, +95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, 101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73, -77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84, -124,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95,78,65,77,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98,108,101,32,40,89, -41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61, -34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44, -49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, -66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, @@ -21639,7 +21559,7 @@ static unsigned char xml_res_file_8[] = { 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +34,73,68,95,84,73,77,69,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, 60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73, @@ -21654,85 +21574,168 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, 62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69,88,80, 65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,69,88, +80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,65,82,50,95, +78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,110,100,32,86,97,114,105,97,98, +108,101,32,40,89,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, +110,97,109,101,61,34,73,68,95,86,65,82,73,65,66,76,69,50,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,55,54,44,49,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, 101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,86,65,82,51,95,78,65,77,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -51,114,100,32,86,97,114,105,97,98,108,101,32,40,90,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86,65,82, -73,65,66,76,69,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44,49,49,48,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76, -69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, -62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,95,84,73,77,69,50,34,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, -119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73, -77,69,51,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,86,65,82,51,95,78,65,77,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,114,100,32,86,97,114,105,97,98,108,101,32,40,90,41,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,86, +65,82,73,65,66,76,69,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,54,44,49,49,48,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, +119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84,73, +77,69,51,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, 105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, 105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, @@ -21854,409 +21857,409 @@ static unsigned char xml_res_file_8[] = { 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86,97,114,105,97, -98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105,116,108,101, -62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, -110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119, -120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124, -119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83, -69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,87, -69,73,71,72,84,83,95,70,73,76,69,95,67,82,69,65,84,73,79,78,34,32,115,117, -98,99,108,97,115,115,61,34,67,114,101,97,116,105,110,103,87,101,105,103, -104,116,68,108,103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32, -32,60,116,105,116,108,101,62,87,101,105,103,104,116,115,32,70,105,108,101, -32,67,114,101,97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32, -32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, -114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,47, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,95,73,68,95,86,65,82,95,83,84,65,84,95,84, -88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,87,101,105,103,104,116,115,32,70,105,108,101,32,73,68,32,86,97,114, -105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +101,61,34,119,120,73,68,95,79,75,66,85,84,84,79,78,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,76,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, 114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,73,68,86,65,82,73,65,66,76,69,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,53, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,73,68,95,67,82,69,65,84,69,95,73,68,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,65,100,100, -32,73,68,32,86,97,114,105,97,98,108,101,46,46,46,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,50,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119, -120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66, -117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68,73, -79,95,81,85,69,69,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,81,117,101,101,110,32,99,111,110,116, -105,103,117,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,82, -66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119, -120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,79,79,67,49,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,79,114,100,101,114,32,111,102,32,99,111,110,116,105, -103,117,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, +69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,86, +97,114,105,97,98,108,101,32,83,101,116,116,105,110,103,115,60,47,116,105, +116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, +47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, +69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120, +67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, +73,68,68,95,87,69,73,71,72,84,83,95,70,73,76,69,95,67,82,69,65,84,73,79, +78,34,32,115,117,98,99,108,97,115,115,61,34,67,114,101,97,116,105,110,103, +87,101,105,103,104,116,68,108,103,34,62,10,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, +69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, +62,10,32,32,32,32,60,116,105,116,108,101,62,87,101,105,103,104,116,115, +32,70,105,108,101,32,67,114,101,97,116,105,111,110,60,47,116,105,116,108, +101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99, +101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69, -68,73,84,95,79,82,68,69,82,79,70,67,79,78,84,73,71,85,73,84,89,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,50,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,124,119,120,84,69,95, -82,73,71,72,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,73,68,95,86,65,82,95, +83,84,65,84,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,87,101,105,103,104,116,115,32,70,105,108,101, +32,73,68,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72, +84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,44,50,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,112,105,110, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,83,80,73, -78,95,79,82,68,69,82,79,70,67,79,78,84,73,71,85,73,84,89,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,83,80,95,86,69,82,84,73,67,65,76,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105, -110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, -90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,67,95,82,65,68,73,79,95,82,79,79,75,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,111,111,107,32,99,111,110,116,105,103,117,105,116,121,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66, -111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,49,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,73,110,99,108,117,100,101,32,108,111,119,101,114,32,111,114,100, -101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, +105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,73,68,86,65,82,73,65, +66,76,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,50,48,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, +110,34,32,110,97,109,101,61,34,73,68,95,67,82,69,65,84,69,95,73,68,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38, +97,109,112,59,65,100,100,32,73,68,32,86,97,114,105,97,98,108,101,46,46, +46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,49,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34, +32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, -80,82,69,67,73,83,73,79,78,95,67,66,88,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,114,101,99,105, -115,105,111,110,32,116,104,114,101,115,104,111,108,100,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116, -114,108,34,32,110,97,109,101,61,34,73,68,67,95,80,82,69,67,73,83,73,79, -78,95,84,72,82,69,83,72,79,76,68,95,69,68,73,84,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, +101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,67,95,82,65,68,73,79,95,81,85,69,69,78,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,101, +101,110,32,99,111,110,116,105,103,117,105,116,121,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,82,73,71,72,84,60,47,115,116,121,108,101, +121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, 108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, 71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, 103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115, -62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,114,111,119,115,62,51,60,47,114,111,119,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,53,60,47,118,103,97,112, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,52, -48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110, -116,105,103,117,105,116,121,32,87,101,105,103,104,116,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34, -119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32,87,101,105,103, -104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70, -108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, +95,79,79,67,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,79,114,100,101,114,32,111,102, +32,99,111,110,116,105,103,117,105,116,121,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, +34,73,68,67,95,69,68,73,84,95,79,82,68,69,82,79,70,67,79,78,84,73,71,85, +73,84,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,124, +119,120,84,69,95,82,73,71,72,84,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,51,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,68,105,115,116,97,110,99,101,32,109,101,116,114,105,99, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +50,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, -101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84,65,78,67,69,95,77, -69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47, 98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,112,105,110,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, +68,67,95,83,80,73,78,95,79,82,68,69,82,79,70,67,79,78,84,73,71,85,73,84, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,83,80,95,86,69,82,84,73,67,65,76, +60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108, +117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49,48, +48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68,73,79,95,82, +79,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,82,111,111,107,32,99,111,110,116,105,103,117,105, +116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97, -109,101,61,34,73,68,67,95,83,84,65,84,73,67,49,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,88,45,99,111,111,114,100,105,110,97,116,101,32,118,97,114,105,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, +67,72,69,67,75,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,73,110,99,108,117,100,101,32,108,111,119, +101,114,32,111,114,100,101,114,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,88,67,79,79,82,68,73,78,65,84,69,83,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,57,56,44,45,49,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,88,67, -79,79,82,68,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, +109,101,61,34,73,68,67,95,80,82,69,67,73,83,73,79,78,95,67,66,88,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,80,114,101,99,105,115,105,111,110,32,116,104,114,101,115,104,111, +108,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, -67,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,89,45,99,111,111,114,100,105,110,97,116, -101,32,118,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, +80,82,69,67,73,83,73,79,78,95,84,72,82,69,83,72,79,76,68,95,69,68,73,84, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,57,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47, +118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,73,71,72,84,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, 120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,89,67,79,79, -82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,89,67,79,79,82,68,95,84,73,77,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, +111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,114,111,119,115,62,51,60,47,114,111,119,115,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,53,60,47,118, +103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97, +112,62,52,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62, -51,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,118,103,97,112,62,53,60,47,118,103,97,112,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,53,60, -47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +110,116,105,103,117,105,116,121,32,87,101,105,103,104,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70, +84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109, +101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32,87, +101,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,51,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32,109,101,116,114, +105,99,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, +99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84,65,78,67,69,95, +77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,49,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,88,45,99,111,111,114,100,105,110,97,116,101,32,118,97,114,105,97, +98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101, +34,32,110,97,109,101,61,34,73,68,67,95,88,67,79,79,82,68,73,78,65,84,69, +83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,57,56,44,45,49,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95, +88,67,79,79,82,68,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, +73,67,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,89,45,99,111,111,114,100,105,110,97, +116,101,32,118,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,89,67,79,79, +82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,67,95,89,67,79,79,82,68,95,84,73,77,69,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62, +51,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,103,97,112,62,53,60,47,118,103,97,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,53,60, +47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, 62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, @@ -23287,109 +23290,166 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,53,48,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +62,49,48,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,40,76,101,97,118,101,32,101,109,112, +116,121,32,102,111,114,32,117,110,100,101,102,105,110,101,100,32,118,97, +108,117,101,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,76,105,110,101,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,76,73,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116, -121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120, -66,79,84,84,79,77,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,76,105,110,101,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,76,73,95,72,79,82,73,90,79,78,84,65,76,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +84,79,80,124,119,120,66,79,84,84,79,77,124,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,52,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,95,65,80,80,76,89,95,83,65,86,69,95,66,85,84,84,79,78,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,112,112,108,38,97,109,112,59,121,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,124,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,65,115,115,105,103,110,32,86,97, +108,117,101,115,32,116,111,32,67,117,114,114,101,110,116,108,121,32,83, +101,108,101,99,116,101,100,32,47,32,85,110,115,101,108,101,99,116,101,100, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, +119,120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,82,73,71,72, +84,60,47,102,108,97,103,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,116,105,116,108,101,62,83,101,108,101,99,116,105,111, +110,32,84,111,111,108,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99, +101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, +62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, +124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69, +95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,67, +79,78,86,69,82,84,95,65,83,67,50,83,72,80,34,32,115,117,98,99,108,97,115, +115,61,34,65,83,67,50,83,72,80,68,108,103,34,62,10,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69, +77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, +121,108,101,62,10,32,32,32,32,60,116,105,116,108,101,62,67,111,110,118, +101,114,116,32,65,83,67,73,73,32,116,111,32,83,72,80,60,47,116,105,116, +108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47, +99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95, +65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111, +108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119, +115,62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97, +112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,124,119,120, +65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,80,80, -76,89,95,83,65,86,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,108, -38,97,109,112,59,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85, -95,69,88,65,67,84,70,73,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,73,110,112,117,116,32,102,105,108, +101,32,40,116,101,120,116,32,102,105,108,101,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116, +114,108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65,83,67,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, +109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, +99,112,112,36,111,112,101,110,45,102,111,108,100,101,114,46,112,110,103, +60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,65,115,115,105,103,110,32,86,97,108,117,101,115,32,116, -111,32,67,117,114,114,101,110,116,108,121,32,83,101,108,101,99,116,101, -100,32,47,32,85,110,115,101,108,101,99,116,101,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, -105,116,108,101,62,83,101,108,101,99,116,105,111,110,32,84,111,111,108, -60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, -100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, -116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, -69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, -121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,68,95,67,79,78,86,69,82,84,95,65,83, -67,50,83,72,80,34,32,115,117,98,99,108,97,115,115,61,34,65,83,67,50,83, -72,80,68,108,103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32, -32,60,116,105,116,108,101,62,67,111,110,118,101,114,116,32,65,83,67,73, -73,32,116,111,32,83,72,80,60,47,116,105,116,108,101,62,10,32,32,32,32,60, -99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114, -105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48, -60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, 70,84,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83, @@ -23397,17 +23457,17 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,73,110,112,117,116,32,102,105,108,101,32,40,116,101,120,116,32,102,105, -108,101,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,79,117,116,112,117,116,32,102,105,108,101,32,40,42,46,115, +104,112,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, -68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32, +68,67,95,70,73,69,76,68,95,83,72,80,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,50,44,45,49,100, 60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76, @@ -23427,121 +23487,36 @@ static unsigned char xml_res_file_8[] = { 114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66, 117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78, -95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +95,79,83,72,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69, 60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,111,112,101,110,45,102,111, -108,100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,124,119,120,65,68, -74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,112,117,116, -32,102,105,108,101,32,40,42,46,115,104,112,41,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, -108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,83,72,80,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +115,111,117,114,99,101,115,46,99,112,112,36,115,97,118,101,46,112,110,103, +60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, 62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, 84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,67,95,79,80,69,78,95,79,83,72,80,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, -109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105,116,109,97,112, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, -73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -95,83,84,65,84,73,67,84,69,88,84,49,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,88,45,99, -111,111,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101, -61,34,73,68,67,95,75,69,89,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,55,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, 119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, @@ -23549,120 +23524,207 @@ static unsigned char xml_res_file_8[] = { 111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,89,45,99,111,111,114,100,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, -99,101,34,32,110,97,109,101,61,34,73,68,67,95,75,69,89,86,65,82,50,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,55,55,44,45,49,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,49,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,88,45,99,111,111,114,100,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, +105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,75,69,89,86,65,82,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,55,55,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, -90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,79,75,95,65,68,68,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,38,97,109,112, -59,114,101,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67,108,111,115, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,67,79,78,86, -69,82,84,95,83,72,80,50,65,83,67,34,32,115,117,98,99,108,97,115,115,61, -34,83,72,80,50,65,83,67,68,108,103,34,62,10,32,32,32,32,60,115,116,121, -108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95, -77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108, -101,62,10,32,32,32,32,60,116,105,116,108,101,62,69,120,112,111,114,116, -105,110,103,32,83,104,97,112,101,32,116,111,32,66,111,117,110,100,97,114, -121,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, -101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, -82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68, -95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83, +73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, +65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,89,45,99,111,111,114, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, +95,75,69,89,86,65,82,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,55,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,79,75,95,65, +68,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,38,97,109,112,59,114,101,97,116,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, -73,68,95,83,84,65,84,73,67,84,69,88,84,51,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73, -110,112,117,116,32,100,97,116,97,115,111,117,114,99,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,67,65,78,67,69,76,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97, +109,112,59,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, +73,68,68,95,67,79,78,86,69,82,84,95,83,72,80,50,65,83,67,34,32,115,117, +98,99,108,97,115,115,61,34,83,72,80,50,65,83,67,68,108,103,34,62,10,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79, +88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108,101,62, +69,120,112,111,114,116,105,110,103,32,83,104,97,112,101,32,116,111,32,66, +111,117,110,100,97,114,121,60,47,116,105,116,108,101,62,10,32,32,32,32, +60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, +100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97, +109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,73,110,112,117,116,32,100,97,116,97,115, +111,117,114,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,70, +73,69,76,68,95,83,72,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,50,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65, +68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,67,95,79,80,69,78,95,73,83,72,80,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, +100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,111, +112,101,110,45,102,111,108,100,101,114,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79, +78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73, +67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,112,117,116,32, +102,105,108,101,32,40,116,101,120,116,32,102,105,108,101,41,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, -32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,83,72,80,34,62,10, +32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, 105,122,101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, @@ -23678,377 +23740,217 @@ static unsigned char xml_res_file_8[] = { 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,83, -72,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,79,65, +83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111, -117,114,99,101,115,46,99,112,112,36,111,112,101,110,45,102,111,108,100, -101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73, -71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,79,117,116,112,117,116,32,102,105,108,101,32,40,116,101, -120,116,32,102,105,108,101,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69, -70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, -68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,50,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69, -95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69, -70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,73,68,67,95,79,80,69,78,95,79,65,83,67,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97, -112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112, -112,36,115,97,118,101,46,112,110,103,60,47,98,105,116,109,97,112,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116, -121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, -120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,52, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,75,101,121,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +117,114,99,101,115,46,99,112,112,36,115,97,118,101,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82, +95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, -95,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,67,95,75,69,89,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,55,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +83,84,65,84,73,67,84,69,88,84,52,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101,121, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, 111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, -78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, -84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115, -62,51,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48, -60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,79,75,95,65,68,68,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,38,97,109,112,59,114,101,97,116,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,79,75,68,79,78,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,97,109,112,59,67,108,111,115,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,84,79,80,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109, -101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, +99,101,34,32,110,97,109,101,61,34,73,68,67,95,75,69,89,86,65,82,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,55,55,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,76, +69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51, +60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,114,111,119,115,62,51,60,47,114,111,119,115,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60, +47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, 65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, 119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62, -50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,114,111,119,115,62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60, -47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68,73,79,49,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,84,121,112,101,32,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,82, -66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,79,75,95,65,68,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,38,97,109,112,59,114,101,97, +116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,79,75,68,79,78,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67,108,111,115, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,84,79,80,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, +101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,99,111,108,115,62,50,60,47,99,111,108,115,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47, +114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,82,65,68,73,79,49,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101,32,49, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,67,95,82,65,68,73,79,50,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, +121,112,101,32,49,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118, 97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68, -73,79,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,84,121,112,101,32,49,97,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, -117,101,62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68,73, +79,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,84,121,112,101,32,50,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, +101,62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, 82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, 53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,67,95,82,65,68,73,79,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101,32,50,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,67,95,82,65,68,73,79,52,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112, -101,32,50,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -76,69,70,84,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73, -78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,114,111, -100,117,99,101,32,98,111,117,110,100,105,110,103,45,98,111,120,32,102,105, -108,101,63,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67, -75,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,89,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103, -34,32,110,97,109,101,61,34,73,68,68,95,80,69,82,77,85,84,65,84,73,79,78, -95,67,79,85,78,84,34,32,115,117,98,99,108,97,115,115,61,34,80,101,114,109, -117,116,97,116,105,111,110,67,111,117,110,116,101,114,68,108,103,34,62, -10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108, -101,62,83,101,116,32,78,117,109,98,101,114,32,111,102,32,80,101,114,109, -117,116,97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32, -60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, -100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,79,82, -68,69,82,79,70,67,79,78,84,73,71,85,73,84,89,34,47,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, -78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111, -115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,76,73,83,65, -87,73,78,68,79,87,83,50,79,80,69,78,34,32,115,117,98,99,108,97,115,115, -61,34,76,105,115,97,87,104,97,116,50,79,112,101,110,68,108,103,34,62,10, -32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108, -101,62,87,104,97,116,32,119,105,110,100,111,119,115,32,116,111,32,111,112, -101,110,63,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116, -101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, -86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, -34,73,68,67,95,67,72,69,67,75,49,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84, -69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101, -32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +73,68,67,95,82,65,68,73,79,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101,32,50,97,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,80,114,111,100,117,99,101,32,98,111,117, +110,100,105,110,103,45,98,111,120,32,102,105,108,101,63,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, @@ -24057,109 +23959,26 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, 114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,50,34,62,10,32, +120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,49,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, 67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,117,115, -116,101,114,32,77,97,112,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, -104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, -99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75, -51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -77,111,114,97,110,32,83,99,97,116,116,101,114,32,80,108,111,116,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,33,45,45,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,58,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, -104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72, -69,67,75,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95, -50,83,84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,117,115,105,110,103,32,114,111,119,45,115,116,97,110,100,97,114, -100,105,122,101,100,32,119,101,105,103,104,116,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,89,101,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,45,45,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,84,79,80,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68, -95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105, -97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,71,69,84,73,83,87, -73,78,68,79,87,83,50,79,80,69,78,34,32,115,117,98,99,108,97,115,115,61, -34,71,101,116,105,115,87,104,97,116,50,79,112,101,110,68,108,103,34,62, -10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108, -101,62,87,104,97,116,32,119,105,110,100,111,119,115,32,116,111,32,111,112, -101,110,63,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, +101,61,34,73,68,68,95,80,69,82,77,85,84,65,84,73,79,78,95,67,79,85,78,84, +34,32,115,117,98,99,108,97,115,115,61,34,80,101,114,109,117,116,97,116, +105,111,110,67,111,117,110,116,101,114,68,108,103,34,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, +115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108,101,62,83,101, +116,32,78,117,109,98,101,114,32,111,102,32,80,101,114,109,117,116,97,116, +105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116, 101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, 120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110, @@ -24170,410 +23989,681 @@ static unsigned char xml_res_file_8[] = { 86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, 32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, 100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, -34,73,68,67,95,67,72,69,67,75,49,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84, -69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101, -32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,50,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,117,115, -116,101,114,32,77,97,112,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, +109,101,61,34,73,68,67,95,69,68,73,84,95,79,82,68,69,82,79,70,67,79,78, +84,73,71,85,73,84,89,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79, +75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, +111,103,34,32,110,97,109,101,61,34,73,68,68,95,76,73,83,65,87,73,78,68, +79,87,83,50,79,80,69,78,34,32,115,117,98,99,108,97,115,115,61,34,76,105, +115,97,87,104,97,116,50,79,112,101,110,68,108,103,34,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, +115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108,101,62,87,104, +97,116,32,119,105,110,100,111,119,115,32,116,111,32,111,112,101,110,63, +60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, +100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, +67,72,69,67,75,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101,32,77,97,112, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101, +61,34,73,68,67,95,67,72,69,67,75,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65, +84,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,108,117,115,116,101,114,32,77,97,112, +32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, +101,61,34,73,68,67,95,67,72,69,67,75,51,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84, +65,84,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,77,111,114,97,110,32,83,99,97,116,116, +101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, 104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, -99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75, -51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -115,104,111,119,32,110,111,114,109,97,108,32,100,105,115,116,114,105,98, -117,116,105,111,110,32,112,45,118,97,108,32,109,97,112,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,33,45,45,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, 108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67, -95,67,72,69,67,75,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,117,115,105,110,103,32,114,111,119,45,115,116,97,110,100, -97,114,100,105,122,101,100,32,119,101,105,103,104,116,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,84,79,80,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,112,116,105,111,110,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, -120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108, -111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,71,69, -84,73,83,95,79,82,68,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115, -115,61,34,71,101,116,105,115,79,114,100,67,104,111,105,99,101,68,108,103, -34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,67,72,69,67,75,52,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,117,115,105,110,103,32,114, +111,119,45,115,116,97,110,100,97,114,100,105,122,101,100,32,119,101,105, +103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,45,45,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +84,79,80,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, +78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61, +34,73,68,68,95,71,69,84,73,83,87,73,78,68,79,87,83,50,79,80,69,78,34,32, +115,117,98,99,108,97,115,115,61,34,71,101,116,105,115,87,104,97,116,50, +79,112,101,110,68,108,103,34,62,10,32,32,32,32,60,115,116,121,108,101,62, +119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78, +85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62, +10,32,32,32,32,60,116,105,116,108,101,62,87,104,97,116,32,119,105,110,100, +111,119,115,32,116,111,32,111,112,101,110,63,60,47,116,105,116,108,101, +62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, +110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, 120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, 105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, 110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101, -61,34,73,68,67,95,71,73,95,67,72,69,67,75,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,105,32,99,108,117,115,116, -101,114,32,109,97,112,44,32,112,115,101,117,100,111,32,112,45,118,97,108, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, 71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, -101,61,34,73,68,67,95,71,73,95,83,84,65,82,95,67,72,69,67,75,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,105,42, -32,99,108,117,115,116,101,114,32,109,97,112,44,32,112,115,101,117,100,111, -32,112,45,118,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107, +66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,49,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,105, +103,110,105,102,105,99,97,110,99,101,32,77,97,112,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67, +72,69,67,75,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,108,117,115,116,101,114,32,77,97,112,32,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67, +72,69,67,75,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,115,104,111,119,32,110,111,114,109,97,108,32,100,105,115,116, +114,105,98,117,116,105,111,110,32,112,45,118,97,108,32,109,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, -99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,83,73,71,95,77, -65,80,83,95,67,72,69,67,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,115,104,111,119,32,115,105,103,110,105,102, -105,99,97,110,99,101,32,109,97,112,115,60,47,108,97,98,101,108,62,10,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, +34,73,68,67,95,67,72,69,67,75,52,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,117,115,105,110,103,32,114,111,119,45,115, +116,97,110,100,97,114,100,105,122,101,100,32,119,101,105,103,104,116,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,84,79, +80,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, -101,61,34,73,68,67,95,78,79,82,77,95,80,95,86,65,76,95,67,72,69,67,75,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -115,104,111,119,32,110,111,114,109,97,108,32,100,105,115,116,114,105,98, -117,116,105,111,110,32,112,45,118,97,108,32,109,97,112,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68, +68,95,71,69,84,73,83,95,79,82,68,95,67,72,79,73,67,69,34,32,115,117,98, +99,108,97,115,115,61,34,71,101,116,105,115,79,114,100,67,104,111,105,99, +101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,71,73,95,67,72,69,67,75,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,105,32,99,108, +117,115,116,101,114,32,109,97,112,44,32,112,115,101,117,100,111,32,112, +45,118,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, 120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97, 103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,119,101,105,103,104,116,115,58,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,51,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,87,95,82, -79,87,95,83,84,65,78,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,114,111,119,45,115,116,97,110,100,97,114,100,105, -122,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120, +34,32,110,97,109,101,61,34,73,68,67,95,71,73,95,83,84,65,82,95,67,72,69, +67,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,71,105,42,32,99,108,117,115,116,101,114,32,109,97,112,44,32,112, +115,101,117,100,111,32,112,45,118,97,108,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, +34,73,68,67,95,83,73,71,95,77,65,80,83,95,67,72,69,67,75,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,115,104,111, +119,32,115,105,103,110,105,102,105,99,97,110,99,101,32,109,97,112,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107, +66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,78,79,82,77,95,80,95, +86,65,76,95,67,72,69,67,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,115,104,111,119,32,110,111,114,109,97,108, +32,100,105,115,116,114,105,98,117,116,105,111,110,32,112,45,118,97,108, +32,109,97,112,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,67,95,87,95,66,73,78,65,82,89,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, -101,62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,119,101,105,103,104,116,115,58,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,98,105,110, -97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,87,95,82,79,87,95,83,84,65,78,68,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60, +47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,114,111,119,45,115,116, +97,110,100,97,114,100,105,122,101,100,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105, +111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,87,95, +66,73,78,65,82,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,98,105,110,97,114,121,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78, +67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +116,105,116,108,101,62,76,111,99,97,108,32,71,32,83,116,97,116,105,115, +116,105,99,115,32,77,97,112,115,60,47,116,105,116,108,101,62,10,32,32,32, +32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114, +101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84, +73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76, +79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,68,95, +70,73,69,76,68,67,65,76,67,95,83,80,69,67,34,32,115,117,98,99,108,97,115, +115,61,34,70,105,101,108,100,78,101,119,67,97,108,99,83,112,101,99,105, +97,108,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115, +117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,68,68, +95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,116,111,111,108,116,105,112,62,65,100,100,32,110,101, +119,32,99,111,108,117,109,110,32,116,111,32,116,97,98,108,101,60,47,116, +111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, -101,62,76,111,99,97,108,32,71,32,83,116,97,116,105,115,116,105,99,115,32, -77,97,112,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, -116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, -32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, -120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80, -97,110,101,108,34,32,110,97,109,101,61,34,73,68,68,95,70,73,69,76,68,67, -65,76,67,95,83,80,69,67,34,32,115,117,98,99,108,97,115,115,61,34,70,105, -101,108,100,78,101,119,67,97,108,99,83,112,101,99,105,97,108,68,108,103, -34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, -69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,83,80, +69,67,73,65,76,95,82,69,83,85,76,84,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,67,95,83,80,69,67,73,65,76,95,82,69,83,85,76,84, +95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,117,108,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108, 97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, 67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, -116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,67,79,76, -85,77,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,116,111,111,108,116,105,112,62,65,100,100,32,110,101,119,32,99, -111,108,117,109,110,32,116,111,32,116,97,98,108,101,60,47,116,111,111,108, -116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,83,80,69,67,73,65,76, -95,82,69,83,85,76,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101, -61,34,73,68,67,95,83,80,69,67,73,65,76,95,82,69,83,85,76,84,95,84,77,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56, -48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,95,83,84,65,84,73,67,84,69,88,84,52,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,112,101,114,97,116,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65, +76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,83,80,69,67,73,65, +76,95,79,80,69,82,65,84,79,82,34,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124, -119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, -76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,80,69,67,95,84,69,88,84, +49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,109,101,97,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, +124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, +69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,67,95,83,80,69,67,73,65,76,95,79,80,69,82,65,78,68,49,34,47,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, @@ -24589,224 +24679,147 @@ static unsigned char xml_res_file_8[] = { 116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, 116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83, -84,65,84,73,67,84,69,88,84,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101,114, -97,116,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +80,69,67,95,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,115,116,97,110,100, +97,114,100,32,100,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70, +84,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73, +90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,67,95,83,80,69,67,73,65,76,95,79,80,69,82,65,78,68,50,34,47,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,124,119,120, -65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101, -34,32,110,97,109,101,61,34,73,68,67,95,83,80,69,67,73,65,76,95,79,80,69, -82,65,84,79,82,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101, +120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73, +84,95,83,80,69,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,68,95,70,73,69,76,68, +67,65,76,67,95,85,78,34,32,115,117,98,99,108,97,115,115,61,34,70,105,101, +108,100,78,101,119,67,97,108,99,85,110,105,68,108,103,34,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, 69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, -84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,95,83,80,69,67,95,84,69,88,84,49,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,109,101,97,110,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,83, -80,69,67,73,65,76,95,79,80,69,82,65,78,68,49,34,47,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,80,69,67,95, -84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,115,116,97,110,100,97,114,100, -32,100,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,83, -80,69,67,73,65,76,95,79,80,69,82,65,78,68,50,34,47,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,83,80, -69,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -71,82,79,87,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101, -108,34,32,110,97,109,101,61,34,73,68,68,95,70,73,69,76,68,67,65,76,67,95, -85,78,34,32,115,117,98,99,108,97,115,115,61,34,70,105,101,108,100,78,101, -119,67,97,108,99,85,110,105,68,108,103,34,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84, +69,88,84,53,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,82,101,115,117,108,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,53, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,82,101,115,117,108,116,60,47,108,97,98,101,108,62,10,32,32, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,73,68,95,65,68,68,95,67,79,76,85,77,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108, +116,105,112,62,65,100,100,32,110,101,119,32,99,111,108,117,109,110,32,116, +111,32,116,97,98,108,101,60,47,116,111,111,108,116,105,112,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, 119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, 60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,65,68,68,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,32, -86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62, -65,100,100,32,110,101,119,32,99,111,108,117,109,110,32,116,111,32,116,97, -98,108,101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, +105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,85,78,65,82,89,95,82, +69,83,85,76,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, -101,34,32,110,97,109,101,61,34,73,68,67,95,85,78,65,82,89,95,82,69,83,85, -76,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34, +73,68,67,95,85,78,65,82,89,95,82,69,83,85,76,84,95,84,77,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, -95,85,78,65,82,89,95,82,69,83,85,76,84,95,84,77,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,65,68, -74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97, -109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,65, +68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, 120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, @@ -29332,781 +29345,865 @@ static unsigned char xml_res_file_8[] = { 101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, 69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, 62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, -97,109,101,61,34,73,68,68,95,70,73,69,76,68,67,65,76,67,95,83,72,69,69, -84,34,32,115,117,98,99,108,97,115,115,61,34,70,105,101,108,100,78,101,119, -67,97,108,99,83,104,101,101,116,68,108,103,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,78,111,116,101,98,111,111, -107,34,32,110,97,109,101,61,34,73,68,95,78,79,84,69,66,79,79,75,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,53,48,44,51,48,48, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,70,114,97,109,101,34,32,110,97,109, +101,61,34,73,68,68,95,67,79,78,78,69,67,84,95,68,65,84,65,83,79,85,82,67, +69,95,83,73,77,80,76,69,34,32,115,117,98,99,108,97,115,115,61,34,67,111, +110,110,101,99,116,68,97,116,97,115,111,117,114,99,101,68,108,103,34,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,65,80,80,76,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,65,112,112,108,121,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109, +101,61,34,73,68,67,95,68,83,95,78,79,84,69,66,79,79,75,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, +61,34,100,115,70,105,108,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, -67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, -78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,116,105,116,108,101,62,86,97,114,105,97,98,108,101,32,67,97,108,99, -117,108,97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32, -60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, -100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73, -79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79, -83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95, -84,73,77,69,95,69,68,73,84,79,82,34,32,115,117,98,99,108,97,115,115,61, -34,84,105,109,101,69,100,105,116,111,114,68,108,103,34,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, +114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62, +48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,78,69,87,95,66,84,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,78,101,119,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,73,110,112,117,116,32,102,105,108, +101,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, +69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,50,44,53,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,66,65,67,75, -95,66,84,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69, -88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, +34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,50,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,70,79,82,87,65,82,68,95,66,84,78,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84, -70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,50,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, +109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, +79,80,69,78,95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, +115,111,117,114,99,101,115,46,99,112,112,36,111,112,101,110,45,102,111, +108,100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,73,68,95,68,69,76,69,84,69,95,66,84,78,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,101,108, -101,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70, -73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -51,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, -78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,54,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,67,95,83,84,65,84,73,67,95,69,77,80,84,89,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,76,105,115,116,67,116,114,108,34,32,110,97,109,101,61, -34,73,68,95,84,73,77,69,95,73,68,95,76,73,83,84,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,56,48,44,49,50,48,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,76,67,95,82,69,80,79,82,84,124,119,120,76,67,95,69,68,73,84,95,76,65, -66,69,76,83,124,119,120,76,67,95,78,79,95,72,69,65,68,69,82,124,119,120, -76,67,95,83,73,78,71,76,69,95,83,69,76,60,47,115,116,121,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84, -79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,84,105,109,101,32,83, -101,116,117,112,60,47,116,105,116,108,101,62,10,32,32,32,32,60,115,116, -121,108,101,62,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82, -69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70, -114,97,109,101,34,32,110,97,109,101,61,34,73,68,68,95,69,88,80,79,82,84, -95,79,71,82,68,65,84,65,34,32,115,117,98,99,108,97,115,115,61,34,69,120, -112,111,114,116,68,97,116,97,68,108,103,34,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,78,111,116,101,98,111,111,107, -34,32,110,97,109,101,61,34,73,68,67,95,68,83,95,78,79,84,69,66,79,79,75, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100, -115,70,105,108,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109, +101,61,34,73,68,67,95,68,82,65,71,95,68,82,79,80,95,66,79,88,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112, +62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112, +36,100,114,97,103,100,114,111,112,46,112,110,103,60,47,98,105,116,109,97, +112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,100,114,97,103,100,114, +111,112,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60, -47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62, -48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,70,105,108,101,32,80,97,116,104,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, -70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78, -83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97, +116,97,32,83,111,117,114,99,101,32,79,118,101,114,118,105,101,119,47,72, +101,108,112,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, -108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34, +97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67,116,114, +108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,117,114,108,62,104,116,116,112,58,47,47,103, +101,111,100,97,99,101,110,116,101,114,46,103,105,116,104,117,98,46,105, +111,47,102,111,114,109,97,116,115,46,104,116,109,108,60,47,117,114,108, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,49,56,54,44,45,49,100,60,47,115,105,122,101, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, -109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, -79,80,69,78,95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, -97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,111,112, -101,110,45,102,111,108,100,101,114,46,112,110,103,60,47,98,105,116,109, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79, -78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, -82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,48,44,49,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116, -97,32,83,111,117,114,99,101,32,79,118,101,114,118,105,101,119,47,72,101, -108,112,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67, -116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,117,114,108,62,104,116,116,112,58,47,47,103,101, -111,100,97,99,101,110,116,101,114,46,103,105,116,104,117,98,46,105,111, -47,102,111,114,109,97,116,115,46,104,116,109,108,60,47,117,114,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,70,105,108,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100, -115,68,97,116,97,98,97,115,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,108,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112, +97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101, +108,34,32,110,97,109,101,61,34,100,115,68,97,116,97,98,97,115,101,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,48,44,49,48,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114, -105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,49,48,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,84,121,112, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, +101,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,84,89,80, +69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,52,48,44,45,49,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,84,121,112,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79, +82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,72,111,115, +116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95, +72,79,83,84,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84, +101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49, +55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, -99,101,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,84,89, -80,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,51,52,48,44,45,49,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,72,111,115,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67, -68,83,95,68,66,95,72,79,83,84,34,32,115,117,98,99,108,97,115,115,61,34, -65,117,116,111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, -101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,80,111,114,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,80,111,114,116,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, +34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,80,79,82,84, +34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116, +67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67, -68,83,95,68,66,95,80,79,82,84,34,32,115,117,98,99,108,97,115,115,61,34, -65,117,116,111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, -101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115, +101,47,73,110,115,116,97,110,99,101,32,78,97,109,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,78,97,109,101, -47,73,110,115,116,97,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, 101,61,34,73,68,67,95,67,68,83,95,68,66,95,78,65,77,69,34,32,115,117,98, 99,108,97,115,115,61,34,65,117,116,111,84,101,120,116,67,116,114,108,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84, -65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,114,32,110,97,109, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, -67,68,83,95,68,66,95,85,78,65,77,69,34,32,115,117,98,99,108,97,115,115, -61,34,65,117,116,111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, -117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,80,97,115,115,119,111,114,100,60,47,108,97,98, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,85,115,101,114,32,110,97,109,101,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, +110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,85,78,65,77,69,34, +32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116,67, +116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, -67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66, -95,85,80,87,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,84,69,95,80,65,83,83,87,79,82,68,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,115,115,119,111,114, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95, +85,80,87,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,65,83,83,87, +79,82,68,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,84,97,98,108,101,32,78,97,109,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116, -114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,84, -65,66,76,69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84, -101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,56,60,47,114, -111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,103,97,112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,49, -48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, -119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112,97, -103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97, -109,101,61,34,100,115,67,97,114,116,111,68,66,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, -101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, -84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,85,115,101,114,32,78,97,109,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,67,95,83,84,65,84,73,67,95,68,66,95,84,65,66,76,69,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,97,98,108,101,32,78,97,109,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, -67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68, -66,95,85,83,69,82,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44, -45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,65,112,112,32,75,101,121,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, -110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,75,69,89,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,49,51,48,44,45,49,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, +34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,84,65,66,76, +69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48, +60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,67,65,82,84, -79,68,66,95,84,65,66,76,69,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,84,97,98,108,101,32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109, +97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,66,84, +78,95,76,79,79,75,85,80,95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105, +116,109,97,112,32,115,116,111,99,107,95,105,100,61,34,119,120,65,82,84, +95,70,73,78,68,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,47,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,114,111,119,115,62,56,60,47,114,111,119,115,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103, +97,112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60, +47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, -110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,84,65,66,76,69, -95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98, +111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,87,101,98,83,101,114, +118,105,99,101,115,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, +84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,53, +48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51, -60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,114,111,119,115,62,53,60,47,114,111,119,115,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97, -112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97, -112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84, -65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, +101,34,32,110,97,109,101,61,34,73,68,95,67,68,83,95,87,69,66,95,67,72,79, +73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,54,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,105,116,101,109,62,71,101,111,74,115,111,110,32, +85,82,76,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109, +62,87,70,83,32,85,82,76,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,99, +111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101,108,101,99,116,105, +111,110,62,48,60,47,115,101,108,101,99,116,105,111,110,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, +116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,87, +83,95,85,82,76,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111, +84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +50,48,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, +111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60, +47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,84,79,80,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,98,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112,97, +103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108, +34,32,110,97,109,101,61,34,100,115,67,97,114,116,111,68,66,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, 101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101,62, +32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,71,101,116,32,97,32,102,114,101,101,32,67,97,114,116,111, -32,97,99,99,111,117,110,116,58,32,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,72,121,112,101,114, -108,105,110,107,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,117,114,108,62,104,116,116,112, -115,58,47,47,119,119,119,46,99,97,114,116,111,46,99,111,109,47,60,47,117, -114,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,85,115,101,114,32,78,97,109,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, +32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,85,83,69,82, +78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, +73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75,101, +121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66, +95,75,69,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,83,84,65,84,73,67,95,67,65,82,84,79,68,66,95,84,65,66,76,69,95,78, +65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101, +32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, +101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65, +82,84,79,68,66,95,84,65,66,76,69,95,78,65,77,69,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,114,111,119,115,62,53,60,47,114,111,119,115,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97, +112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47, +104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32,97, +32,102,114,101,101,32,67,97,114,116,111,32,97,99,99,111,117,110,116,58, +32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,72,121,112,101,114,108,105,110,107,67,116,114,108,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,119,119,46, +99,97,114,116,111,46,99,111,109,47,60,47,117,114,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, +69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69, -70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116, -111,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,53,56,48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,51,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80, -65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, -84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, -114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119, -115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62, -48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67, -95,67,82,69,65,84,69,95,80,82,79,74,69,67,84,95,70,73,76,69,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,114,101,97,116,101,32,97,32,112,114,111,106,101,99,116,32,102,105, -108,101,63,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, -101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44, +48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, +84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,78, +79,83,72,79,87,95,82,69,67,69,78,84,95,83,65,77,80,76,69,83,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,111,110,39,116,32, +115,104,111,119,32,82,101,99,101,110,116,47,83,97,109,112,108,101,32,68, +97,116,97,32,112,97,110,101,108,32,97,103,97,105,110,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, +48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,82,73,71,72,84,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,51,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101, +99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82, +79,87,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,32,124,32,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,116,105,116,108,101,62,67,111,110,110,101,99,116,32,116, +111,32,68,97,116,97,32,83,111,117,114,99,101,60,47,116,105,116,108,101, +62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, +110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119, +120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124, +119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, +61,34,73,68,68,95,70,73,69,76,68,67,65,76,67,95,83,72,69,69,84,34,32,115, +117,98,99,108,97,115,115,61,34,70,105,101,108,100,78,101,119,67,97,108, +99,83,104,101,101,116,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,78,111,116,101,98,111,111,107,34,32, +110,97,109,101,61,34,73,68,95,78,79,84,69,66,79,79,75,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,55,53,48,44,51,48,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65, +80,80,76,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,65,112,112,108,121,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78, +67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, 76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111, @@ -30114,763 +30211,919 @@ static unsigned char xml_res_file_8[] = { 120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, 60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, -105,116,108,101,62,83,97,118,101,32,65,115,60,47,116,105,116,108,101,62, -10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, -116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61, -34,73,68,68,95,83,65,86,69,95,65,83,95,68,76,71,34,32,115,117,98,99,108, -97,115,115,61,34,83,97,118,101,65,115,68,108,103,34,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108, -34,32,110,97,109,101,61,34,100,115,70,105,108,101,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -48,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, -114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,99,111,108,115,62,53,60,47,99,111,108,115,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47, -114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,104,103,97,112,62,53,60,47,104,103,97,112,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, -48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +105,116,108,101,62,86,97,114,105,97,98,108,101,32,67,97,108,99,117,108, +97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101, +110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, +32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, +119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95, +66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,84,73, +77,69,95,69,68,73,84,79,82,34,32,115,117,98,99,108,97,115,115,61,34,84, +105,109,101,69,100,105,116,111,114,68,108,103,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,95,80,82,74,95,67,72,69,67,75,66,79,88,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, -95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,112,114,111,106, -101,99,116,32,102,105,108,101,58,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, -110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65,83,67,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101, -115,46,99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105,116,109, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47, -115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,53,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, -101,61,34,73,68,95,83,69,76,95,68,83,95,67,72,69,67,75,66,79,88,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, -65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,78, +69,87,95,66,84,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,78,101,119,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85, +95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,100, -97,116,97,115,111,117,114,99,101,58,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, -32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,68,83,95,80,65,84, -72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67, -69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66, -117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78, -95,68,83,95,80,65,84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, -101,115,111,117,114,99,101,115,46,99,112,112,36,115,97,118,101,46,112,110, -103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68, -69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, -65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,48,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,50,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,73,68,95,66,65,67,75,95,66,84,78,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84, +70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, -105,116,108,101,62,83,97,118,101,32,80,114,111,106,101,116,32,70,105,108, -101,32,65,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, -116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, -32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, -120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, -105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,76,79,67,65,76, -69,95,83,69,84,85,80,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61, -34,76,111,99,97,108,101,83,101,116,117,112,68,108,103,34,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,92,110,83,101,108,101,99,116,32,119, -104,101,116,104,101,114,32,116,111,32,117,115,101,32,112,101,114,105,111, -100,115,32,111,114,32,99,111,109,109,97,115,32,97,115,92,110,115,101,112, -97,114,97,116,111,114,115,32,105,110,32,110,117,109,101,114,105,99,32,102, -105,101,108,100,115,46,32,92,110,92,110,69,46,103,46,44,32,98,121,32,100, -101,102,97,117,108,116,44,32,71,101,111,68,97,32,117,115,101,115,32,99, -111,109,109,97,115,32,116,111,92,110,115,101,112,97,114,97,116,101,32,116, -104,111,117,115,97,110,100,115,32,97,110,100,32,112,101,114,105,111,100, -115,92,110,102,111,114,32,100,101,99,105,109,97,108,115,32,40,49,44,48, -48,48,46,48,48,41,46,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,50,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, -118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103, -97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95, -83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,68,101,99,105,109,97,108,58,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, -69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110, -97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,68,69,67,73,77,65,76,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, -49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,84,104,111,117,115,97,110,100,115,58,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, -101,61,34,73,68,67,95,70,73,69,76,68,95,84,72,79,85,83,65,78,68,83,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,82,69,83, -69,84,95,83,89,83,95,76,79,67,65,76,69,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,101,116,32,116,111, -32,100,101,102,97,117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, -69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, -44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, -116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, -69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +110,97,109,101,61,34,73,68,95,70,79,82,87,65,82,68,95,66,84,78,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103, +116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84, +60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, +90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,95,68,69,76,69,84,69,95,66,84,78,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,101,108,101,116,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, 103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, -78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,116,105,116,108,101,62,83,101,116,32,78,117,109,98,101,114,32,83, -101,112,97,114,97,116,111,114,115,32,105,110,32,84,97,98,108,101,60,47, -116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100, -62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116, -121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69, -77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, -121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,68,95,71,69,79,68,65,95,80,85,66,76, -73,83,72,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,80,117,98, -108,105,115,104,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,54,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,76,105,115,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,84, +73,77,69,95,73,68,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,56,48,44,49,50,48,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,67,95, +82,69,80,79,82,84,124,119,120,76,67,95,69,68,73,84,95,76,65,66,69,76,83, +124,119,120,76,67,95,78,79,95,72,69,65,68,69,82,124,119,120,76,67,95,83, +73,78,71,76,69,95,83,69,76,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119, +120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,116,105,116,108,101,62,84,105,109,101,32,83,101,116,117,112, +60,47,116,105,116,108,101,62,10,32,32,32,32,60,115,116,121,108,101,62,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66, +79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121, +108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,114,97,109,101,34,32,110, +97,109,101,61,34,73,68,68,95,69,88,80,79,82,84,95,79,71,82,68,65,84,65, +34,32,115,117,98,99,108,97,115,115,61,34,69,120,112,111,114,116,68,97,116, +97,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109,101,61,34, +73,68,67,95,68,83,95,78,79,84,69,66,79,79,75,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111, +116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,70,105,108,101,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61, -34,34,62,10,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,54,48, -44,51,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44, +52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108, +115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,114,32,78,97,109, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, -71,69,79,68,65,95,85,83,69,82,78,65,77,69,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44, -45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, -79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,108,101, +32,80,97,116,104,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, -95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75,101,121,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,56,54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, -34,73,68,67,95,71,69,79,68,65,95,75,69,89,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, -73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,84,105,116,108,101,32,111,102,32,86,105,115, -117,97,108,105,122,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101, -120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,71,69,79, -68,65,95,80,85,66,76,73,83,72,95,84,73,84,76,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51, -48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, -84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,68,101,115,99,114,105,112,116,105,111, -110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78, +95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,111,112,101,110,45,102, +111,108,100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,71,69,79,68,65,95,80,85,66,76,73,83,72,95,68, -69,83,67,82,73,80,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,52,48,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,77,85,76,84,73, -76,73,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,48,44,49,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,52,60,47,114,111,119,115, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112, -62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112,62,10,32,32, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, -69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97, +32,83,111,117,114,99,101,32,79,118,101,114,118,105,101,119,47,72,101,108, +112,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67,116, +114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,117,114,108,62,104,116,116,112,58,47,47,103,101,111, +100,97,99,101,110,116,101,114,46,103,105,116,104,117,98,46,105,111,47,102, +111,114,109,97,116,115,46,104,116,109,108,60,47,117,114,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32,97,32,102,114,101, -101,32,71,101,111,68,97,45,87,101,98,32,97,99,99,111,117,110,116,58,32, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,70,105,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,68,97,116, +97,98,97,115,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,48,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67,116, -114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,101,98,112,111, -111,108,46,99,115,102,46,97,115,117,46,101,100,117,47,120,117,110,47,60, -47,117,114,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,97,116,97,98,97,115,101,32,84,121,112,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,67,95,67,68,83,95,68,66,95,84,89,80,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,52,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110, +116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,47, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, +97,116,97,98,97,115,101,32,72,111,115,116,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,72,79,83, +84,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116, +67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, +97,116,97,98,97,115,101,32,80,111,114,116,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, -101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,80,79,82, +84,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116, +67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, +97,116,97,98,97,115,101,32,78,97,109,101,47,73,110,115,116,97,110,99,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, +116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68, +66,95,78,65,77,69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111, +84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116, -108,101,62,80,117,98,108,105,115,104,32,116,111,32,71,101,111,68,97,45, -87,101,98,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116, -101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32, -32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120, -83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88, -60,47,115,116,121,108,101,62,10,32,32,32,32,60,115,105,122,101,62,54,54, -48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,66,65, -83,69,77,65,80,95,67,79,78,70,95,68,76,71,34,32,115,117,98,99,108,97,115, -115,61,34,66,97,115,101,109,97,112,67,111,110,102,68,108,103,34,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101, -108,34,32,110,97,109,101,61,34,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,54,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,85,115,101,114,32,110,97,109,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,85,78,65, +77,69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120, +116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80, +97,115,115,119,111,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,67,68,83,95,68,66,95,85,80,87,68,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, +117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,65,83,83, +87,79,82,68,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101, +32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, -101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, +34,73,68,67,95,67,68,83,95,68,66,95,84,65,66,76,69,34,32,115,117,98,99, +108,97,115,115,61,34,65,117,116,111,84,101,120,116,67,116,114,108,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,49,55,48,44,45,49,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,114,111,119,115,62,56,60,47,114,111,119,115,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,49, +53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,97,116,97,98,97,115,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97, -109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32, +61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,67,97,114, +116,111,68,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,78,111,107,105,97,47,72,69,82,69,32,65,112,112,32,73,68,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +62,85,115,101,114,32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, -116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,78,79,75,73,65, -95,85,83,69,82,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,78,111,107,105,97,47,72,69,82,69,32,65,112,112,32, -75,101,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,85,83,69,82,78,65,77,69,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,49,51,48,44,45,49,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75, +101,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,67,95,67,65,82,84,79,68,66,95,75,69,89,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,67,95,83,84,65,84,73,67,95,67,65,82,84,79,68,66,95,84,65,66, +76,69,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101, +32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, +34,73,68,67,95,67,65,82,84,79,68,66,95,84,65,66,76,69,95,78,65,77,69,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,49,51,48,44,45,49,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, -110,97,109,101,61,34,73,68,67,95,78,79,75,73,65,95,75,69,89,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114, -111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, -103,97,112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108, +115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +114,111,119,115,62,53,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,49,53,60,47, +118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,44,49,48,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32, -97,32,102,114,101,101,32,78,111,107,105,97,47,72,69,82,69,32,97,99,99,111, -117,110,116,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,72,121,112,101,114,108, -105,110,107,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47, -100,101,118,101,108,111,112,101,114,46,104,101,114,101,46,99,111,109,47, -60,47,117,114,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116, +32,97,32,102,114,101,101,32,67,97,114,116,111,32,97,99,99,111,117,110,116, +58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67,116,114, +108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,119,119, +46,99,97,114,116,111,46,99,111,109,47,60,47,117,114,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76, +124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78, +84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84, -65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,95,78,79,75,73,65,95,82,69,83,69,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,101,116,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, -76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,56,48,44,51,52, +48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +51,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62, +51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,114,111,119,115,62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60, +47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107, +66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,82,69,65,84,69,95, +80,82,79,74,69,67,84,95,70,73,76,69,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101, +32,97,32,112,114,111,106,101,99,116,32,102,105,108,101,63,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, +86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101, +62,83,97,118,101,32,65,115,60,47,116,105,116,108,101,62,10,32,32,32,32, +60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, +100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73, +79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79, +83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95, +83,65,86,69,95,65,83,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61, +34,83,97,118,101,65,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, +61,34,100,115,70,105,108,101,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,49,48,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,108,115,62,53,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112, +62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,104,103,97,112,62,53,60,47,104,103,97,112,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,83,69, +76,95,80,82,74,95,67,72,69,67,75,66,79,88,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, +48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, +84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,112,114,111,106,101,99, +116,32,102,105,108,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, +109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65,83,67,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, +109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, +99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105,116,109,97,112, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, +44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68, +95,83,69,76,95,68,83,95,67,72,69,67,75,66,79,88,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,100,97,116,97,115, +111,117,114,99,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,65, +68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101, +61,34,73,68,67,95,70,73,69,76,68,95,68,83,95,80,65,84,72,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,68,83,95,80,65,84,72, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, +101,115,46,99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69, +60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,49,48, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, 10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, @@ -30900,564 +31153,900 @@ static unsigned char xml_res_file_8[] = { 76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, 102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116, -108,101,62,66,97,115,101,109,97,112,32,67,111,110,102,105,103,117,114,97, -116,105,111,110,32,68,105,97,108,111,103,60,47,116,105,116,108,101,62,10, -32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116, -101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67, -65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32, -32,60,115,105,122,101,62,53,54,48,44,50,52,48,60,47,115,105,122,101,62, -10,32,32,60,47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114, -99,101,62,10}; - -static size_t xml_res_size_9 = 936; -static unsigned char xml_res_file_9[] = { -137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,8,0,0,0,8,8,6,0,0,0, -196,15,190,139,0,0,2,206,105,67,67,80,73,67,67,32,80,114,111,102,105,108, -101,0,0,120,218,141,147,203,107,20,89,20,135,191,234,220,160,144,32,12, -180,175,94,12,151,89,72,144,36,148,15,52,34,62,210,73,108,162,177,109,202, -68,147,32,72,167,250,118,119,153,155,234,154,91,213,113,20,17,201,198,165, -206,48,123,241,177,112,225,31,224,194,133,43,221,40,17,124,33,136,123,21, -69,20,220,168,180,139,234,116,87,240,121,86,95,253,206,185,191,115,206, -45,46,116,218,197,32,208,41,9,115,126,100,156,92,86,78,78,77,203,21,207, -72,177,158,46,50,116,21,221,48,24,44,20,198,0,138,65,160,249,38,62,62,193, -2,120,216,247,253,252,79,163,171,20,186,115,96,173,132,212,251,146,10,93, -232,248,12,212,42,147,83,211,32,52,144,62,25,5,17,136,115,64,218,196,250, -255,64,122,38,230,235,64,218,140,59,67,32,110,1,171,220,192,68,32,238,1, -3,110,181,88,130,78,1,244,86,18,53,51,9,158,211,117,183,57,207,31,64,183, -242,39,14,3,27,32,117,86,133,35,77,182,22,74,197,225,3,64,63,88,175,74, -106,120,4,232,5,235,122,217,219,55,10,244,0,207,203,102,223,68,204,214, -70,47,26,29,143,57,117,196,215,249,177,38,175,243,103,242,135,154,158,34, -136,178,206,146,127,56,127,120,100,73,63,81,220,95,0,50,96,57,179,181,3, -14,176,6,82,123,79,87,199,143,198,108,233,211,213,161,124,147,31,153,186, -51,1,252,5,169,107,129,46,140,197,179,165,238,48,133,70,225,225,163,240, -145,56,228,200,210,71,128,161,70,25,15,15,141,71,14,133,143,194,224,17, -50,251,221,74,77,33,193,146,28,47,241,121,137,193,227,111,234,40,36,14, -71,200,230,89,232,109,57,72,251,169,253,198,126,108,95,182,175,217,175, -47,102,234,61,237,204,130,57,238,185,139,23,222,81,64,97,90,190,205,108, -115,166,216,223,165,198,32,26,77,5,197,92,107,167,48,49,105,98,186,178, -127,49,211,118,114,23,47,188,83,231,243,31,19,91,170,68,167,62,102,80,132, -204,98,240,152,71,161,9,81,12,38,186,253,232,246,20,250,238,153,91,235, -218,189,30,139,155,199,30,118,223,61,179,236,174,106,223,108,165,90,91, -45,255,110,215,37,207,43,241,167,216,36,70,197,128,216,129,20,123,196,94, -177,91,12,139,1,177,83,140,181,78,76,224,227,113,18,133,33,164,136,198, -231,20,114,217,255,91,170,37,126,107,0,164,115,202,87,198,115,165,147,203, -202,130,169,149,61,173,18,79,244,23,233,223,140,201,169,105,25,211,116, -29,110,132,176,118,107,91,251,224,96,1,214,154,197,182,22,29,132,93,111, -161,227,65,91,235,201,192,234,75,112,115,155,91,55,243,77,107,203,186,15, -145,250,39,2,24,170,5,167,140,87,169,70,114,179,109,111,151,131,65,160, -149,28,245,221,254,94,89,212,90,26,175,82,141,66,105,84,168,204,188,42, -245,19,150,183,108,142,93,186,179,208,249,162,209,248,176,1,86,252,7,95, -254,109,52,62,93,105,52,190,92,133,142,231,112,91,127,5,192,188,253,69, -63,166,79,228,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0, -0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77, -69,7,220,6,11,21,37,12,10,193,249,2,0,0,0,91,73,68,65,84,24,211,157,202, -177,9,132,80,20,68,209,211,129,129,32,98,98,69,118,97,98,31,150,34,38,219, -193,86,96,104,31,6,130,98,252,13,124,136,129,155,236,133,129,97,230,114, -145,227,131,13,11,70,148,30,12,72,104,209,68,255,62,133,53,198,2,89,244, -195,15,186,16,166,183,179,143,115,70,253,38,236,33,84,254,37,69,110,78, -113,195,20,26,21,90,52,110,0,0,0,0,73,69,78,68,174,66,96,130}; - -static size_t xml_res_size_10 = 71831; -static unsigned char xml_res_file_10[] = { -60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, -110,99,111,100,105,110,103,61,34,117,116,102,45,56,34,63,62,10,60,114,101, -115,111,117,114,99,101,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68, -95,68,65,84,65,95,77,79,86,73,69,95,68,76,71,34,62,10,32,32,32,32,60,111, +108,101,62,83,97,118,101,32,80,114,111,106,101,116,32,70,105,108,101,32, +65,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101, +114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, +115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, +111,103,34,32,110,97,109,101,61,34,73,68,68,95,76,79,67,65,76,69,95,83, +69,84,85,80,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,76,111, +99,97,108,101,83,101,116,117,112,68,108,103,34,62,10,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, 122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, 120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, 101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105, -97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,57,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,95,70,73,69,76,68,95,67,72,79,73,67,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, -44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,95,76,65,66,69,76,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, -105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,92,110,83,101,108,101,99,116,32,119,104,101, +116,104,101,114,32,116,111,32,117,115,101,32,112,101,114,105,111,100,115, +32,111,114,32,99,111,109,109,97,115,32,97,115,92,110,115,101,112,97,114, +97,116,111,114,115,32,105,110,32,110,117,109,101,114,105,99,32,102,105, +101,108,100,115,46,32,92,110,92,110,69,46,103,46,44,32,98,121,32,100,101, +102,97,117,108,116,44,32,71,101,111,68,97,32,117,115,101,115,32,99,111, +109,109,97,115,32,116,111,92,110,115,101,112,97,114,97,116,101,32,116,104, +111,117,115,97,110,100,115,32,97,110,100,32,112,101,114,105,111,100,115, +92,110,102,111,114,32,100,101,99,105,109,97,108,115,32,40,49,44,48,48,48, +46,48,48,41,46,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124, +119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -57,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, 109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, -101,61,34,73,68,95,70,73,69,76,68,95,67,72,79,73,67,69,95,84,77,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112, +62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, +84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,68,101,99,105,109,97,108,58,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, +109,101,61,34,73,68,67,95,70,73,69,76,68,95,68,69,67,73,77,65,76,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,49,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,84,104,111,117,115,97,110,100,115,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, +34,73,68,67,95,70,73,69,76,68,95,84,72,79,85,83,65,78,68,83,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,82,69,83, +69,84,95,83,89,83,95,76,79,67,65,76,69,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,101,116,32,116,111, +32,100,101,102,97,117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84, -79,80,124,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,50,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,111, -98,115,101,114,118,97,116,105,111,110,58,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, +44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,56,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,67,85,82,95,79,66,83, -95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,111,98,115,35,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,48,44,56, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,118, -97,108,117,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,56,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,67,85,82,95,86,65,76,95,84,88,84,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,118,97,108, -117,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, -78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,50,55,48,44,50,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61, -34,73,68,95,83,76,73,68,69,82,34,47,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72, -84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,53,44,51,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,116,105,116,108,101,62,83,101,116,32,78,117,109,98,101,114,32,83, +101,112,97,114,97,116,111,114,115,32,105,110,32,84,97,98,108,101,60,47, +116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100, +62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69, +77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, +121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, +103,34,32,110,97,109,101,61,34,73,68,68,95,71,69,79,68,65,95,80,85,66,76, +73,83,72,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,80,117,98, +108,105,115,104,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61, +34,34,62,10,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,54,48, +44,51,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, +65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,114,32,78,97,109, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, +71,69,79,68,65,95,85,83,69,82,78,65,77,69,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44, +45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,77,73,78,95,76,65,66,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,109,105,110,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75,101,121,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,77,73,78,95,84,88,84,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,118,97,108,117,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, -67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, +34,73,68,67,95,71,69,79,68,65,95,75,69,89,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, +73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,105,116,108,101,32,111,102,32,86,105,115, +117,97,108,105,122,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101, +120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,71,69,79, +68,65,95,80,85,66,76,73,83,72,95,84,73,84,76,69,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51, +48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, +84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,68,101,115,99,114,105,112,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,95,77,65,88,95,76,65,66,69,76,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,109,97,120,58,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,77,65,88,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,118,97, -108,117,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,51,44,50,100, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, +109,101,61,34,73,68,67,95,71,69,79,68,65,95,80,85,66,76,73,83,72,95,68, +69,83,67,82,73,80,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,52,48,100, 60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73, -71,72,84,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,56,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, -120,34,32,110,97,109,101,61,34,73,68,95,76,79,79,80,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,111,112,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66, -111,120,34,32,110,97,109,101,61,34,73,68,95,82,69,86,69,82,83,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,118,101,114,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,53, -44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,83,84,69,80,95,66,65,67,75,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,73,68,95,80,76,65,89,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,77,85,76,84,73, +76,73,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,83,84,69,80,95,70,79,82,87,65,82,68, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,38,103,116,59,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,49,53,44,53,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,52,60,47,114,111,119,115, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112, +62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, +69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,101,100, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,51,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73, -68,95,83,80,69,69,68,95,83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, -117,101,62,51,51,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97, -120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,56,44,53,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32,97,32,102,114,101, +101,32,71,101,111,68,97,45,87,101,98,32,97,99,99,111,117,110,116,58,32, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, -84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,44,53,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, -101,61,34,73,68,95,67,85,77,85,76,65,84,73,86,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,109,117,108,97, -116,105,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,50,53,44,53,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67,116, +114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,101,98,112,111, +111,108,46,99,115,102,46,97,115,117,46,101,100,117,47,120,117,110,47,60, +47,117,114,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,95,65,83,67,69,78,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,65,115,99,101,110,100,105,110,103, -32,111,114,100,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66, -117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,69,83,67,69, -78,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,68,101,115,99,101,110,100,105,110,103,32,111,114,100,101, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,44,53,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120, -76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,56,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,49,48,44,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,116,105,116,108,101,62,65,110,105,109,97,116,105,111, -110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,115,116,121,108,101, -62,119,120,68,69,70,65,85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69, -60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105, -97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,95,67,72, -79,79,83,69,82,95,68,76,71,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, +68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116, +108,101,62,80,117,98,108,105,115,104,32,116,111,32,71,101,111,68,97,45, +87,101,98,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116, +101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32, +32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120, +83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88, +60,47,115,116,121,108,101,62,10,32,32,32,32,60,115,105,122,101,62,54,54, +48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,66,65, +83,69,77,65,80,95,67,79,78,70,95,68,76,71,34,32,115,117,98,99,108,97,115, +115,61,34,66,97,115,101,109,97,112,67,111,110,102,68,108,103,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101, +108,34,32,110,97,109,101,61,34,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,54,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, +101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,114,114,101,110,116,32, -116,105,109,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,56,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,67,85,82,95,84,88,84,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,116,105,109,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84, -84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,48,44,50,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97, +109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,78,111,107,105,97,47,72,69,82,69,32,65,112,112,32,73,68,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, +116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,78,79,75,73,65, +95,85,83,69,82,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,78,111,107,105,97,47,72,69,82,69,32,65,112,112,32, +75,101,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, +110,97,109,101,61,34,73,68,67,95,78,79,75,73,65,95,75,69,89,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114, +111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,44,49,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32, +97,32,102,114,101,101,32,78,111,107,105,97,47,72,69,82,69,32,97,99,99,111, +117,110,116,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,72,121,112,101,114,108, +105,110,107,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47, +100,101,118,101,108,111,112,101,114,46,104,101,114,101,46,99,111,109,47, +60,47,117,114,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,95,78,79,75,73,65,95,82,69,83,69,84,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,101,116,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, +68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116, +108,101,62,66,97,115,101,109,97,112,32,67,111,110,102,105,103,117,114,97, +116,105,111,110,32,68,105,97,108,111,103,60,47,116,105,116,108,101,62,10, +32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116, +101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67, +65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, +120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32, +32,60,115,105,122,101,62,53,54,48,44,50,52,48,60,47,115,105,122,101,62, +10,32,32,60,47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114, +99,101,62,10}; + +static size_t xml_res_size_9 = 936; +static unsigned char xml_res_file_9[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,8,0,0,0,8,8,6,0,0,0, +196,15,190,139,0,0,2,206,105,67,67,80,73,67,67,32,80,114,111,102,105,108, +101,0,0,120,218,141,147,203,107,20,89,20,135,191,234,220,160,144,32,12, +180,175,94,12,151,89,72,144,36,148,15,52,34,62,210,73,108,162,177,109,202, +68,147,32,72,167,250,118,119,153,155,234,154,91,213,113,20,17,201,198,165, +206,48,123,241,177,112,225,31,224,194,133,43,221,40,17,124,33,136,123,21, +69,20,220,168,180,139,234,116,87,240,121,86,95,253,206,185,191,115,206, +45,46,116,218,197,32,208,41,9,115,126,100,156,92,86,78,78,77,203,21,207, +72,177,158,46,50,116,21,221,48,24,44,20,198,0,138,65,160,249,38,62,62,193, +2,120,216,247,253,252,79,163,171,20,186,115,96,173,132,212,251,146,10,93, +232,248,12,212,42,147,83,211,32,52,144,62,25,5,17,136,115,64,218,196,250, +255,64,122,38,230,235,64,218,140,59,67,32,110,1,171,220,192,68,32,238,1, +3,110,181,88,130,78,1,244,86,18,53,51,9,158,211,117,183,57,207,31,64,183, +242,39,14,3,27,32,117,86,133,35,77,182,22,74,197,225,3,64,63,88,175,74, +106,120,4,232,5,235,122,217,219,55,10,244,0,207,203,102,223,68,204,214, +70,47,26,29,143,57,117,196,215,249,177,38,175,243,103,242,135,154,158,34, +136,178,206,146,127,56,127,120,100,73,63,81,220,95,0,50,96,57,179,181,3, +14,176,6,82,123,79,87,199,143,198,108,233,211,213,161,124,147,31,153,186, +51,1,252,5,169,107,129,46,140,197,179,165,238,48,133,70,225,225,163,240, +145,56,228,200,210,71,128,161,70,25,15,15,141,71,14,133,143,194,224,17, +50,251,221,74,77,33,193,146,28,47,241,121,137,193,227,111,234,40,36,14, +71,200,230,89,232,109,57,72,251,169,253,198,126,108,95,182,175,217,175, +47,102,234,61,237,204,130,57,238,185,139,23,222,81,64,97,90,190,205,108, +115,166,216,223,165,198,32,26,77,5,197,92,107,167,48,49,105,98,186,178, +127,49,211,118,114,23,47,188,83,231,243,31,19,91,170,68,167,62,102,80,132, +204,98,240,152,71,161,9,81,12,38,186,253,232,246,20,250,238,153,91,235, +218,189,30,139,155,199,30,118,223,61,179,236,174,106,223,108,165,90,91, +45,255,110,215,37,207,43,241,167,216,36,70,197,128,216,129,20,123,196,94, +177,91,12,139,1,177,83,140,181,78,76,224,227,113,18,133,33,164,136,198, +231,20,114,217,255,91,170,37,126,107,0,164,115,202,87,198,115,165,147,203, +202,130,169,149,61,173,18,79,244,23,233,223,140,201,169,105,25,211,116, +29,110,132,176,118,107,91,251,224,96,1,214,154,197,182,22,29,132,93,111, +161,227,65,91,235,201,192,234,75,112,115,155,91,55,243,77,107,203,186,15, +145,250,39,2,24,170,5,167,140,87,169,70,114,179,109,111,151,131,65,160, +149,28,245,221,254,94,89,212,90,26,175,82,141,66,105,84,168,204,188,42, +245,19,150,183,108,142,93,186,179,208,249,162,209,248,176,1,86,252,7,95, +254,109,52,62,93,105,52,190,92,133,142,231,112,91,127,5,192,188,253,69, +63,166,79,228,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0, +0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77, +69,7,220,6,11,21,37,12,10,193,249,2,0,0,0,91,73,68,65,84,24,211,157,202, +177,9,132,80,20,68,209,211,129,129,32,98,98,69,118,97,98,31,150,34,38,219, +193,86,96,104,31,6,130,98,252,13,124,136,129,155,236,133,129,97,230,114, +145,227,131,13,11,70,148,30,12,72,104,209,68,255,62,133,53,198,2,89,244, +195,15,186,16,166,183,179,143,115,70,253,38,236,33,84,254,37,69,110,78, +113,195,20,26,21,90,52,110,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_10 = 71801; +static unsigned char xml_res_file_10[] = { +60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, +110,99,111,100,105,110,103,61,34,117,116,102,45,56,34,63,62,10,60,114,101, +115,111,117,114,99,101,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68, +95,68,65,84,65,95,77,79,86,73,69,95,68,76,71,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105, +97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,57,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,95,70,73,69,76,68,95,67,72,79,73,67,69,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, +44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,95,76,65,66,69,76,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, +105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +57,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,95,70,73,69,76,68,95,67,72,79,73,67,69,95,84,77,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84, +79,80,124,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,50,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, 105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,111, +98,115,101,114,118,97,116,105,111,110,58,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,56,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,67,85,82,95,79,66,83, +95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,111,98,115,35,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,48,44,56, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,118, +97,108,117,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,56,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,67,85,82,95,86,65,76,95,84,88,84,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,118,97,108, +117,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +32,32,32,32,32,32,60,115,105,122,101,62,50,55,48,44,50,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61, +34,73,68,95,83,76,73,68,69,82,34,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72, +84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34, -73,68,95,83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, -47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,53,44,51,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,77,73,78,95,76,65,66,69,76,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,109,105,110,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,77,73,78,95,84,88,84,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,118,97,108,117,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,76,69,70,84,32,124,32,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,95,77,65,88,95,76,65,66,69,76,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,109,97,120, +58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,49,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,77,65,88,95,84, +88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,118,97,108,117,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,50,51,44,50,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,32,124, +32,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119, +120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, 97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, 44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106, @@ -31466,7 +32055,7 @@ static unsigned char xml_res_file_10[] = { 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,44, 53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, @@ -31480,7 +32069,7 @@ static unsigned char xml_res_file_10[] = { 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, 114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, @@ -31491,33 +32080,274 @@ static unsigned char xml_res_file_10[] = { 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,44,53,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,83,84,69,80,95,66,65,67,75,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,49,56,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, -97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,73,68,95,80,76,65,89,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,56,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,53,44,53, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,95,83,84,69,80,95,66,65,67,75,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,80,76,65,89,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,95,83,84,69,80,95,70,79,82,87,65,82,68,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48, +44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,38,103,116,59,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,49,53,44,53,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,101,100,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,51,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73,68,95,83, +80,69,69,68,95,83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, +62,51,51,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, +69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,44,53,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101, +61,34,73,68,95,67,85,77,85,76,65,84,73,86,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,109,117,108,97,116, +105,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,50,53,44,53,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,95,65,83,67,69,78,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,65,115,99,101,110,100,105,110,103, +32,111,114,100,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,69,83,67,69, +78,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,101,115,99,101,110,100,105,110,103,32,111,114,100,101, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,44,53,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120, +76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,56,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,48,44,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,116,105,116,108,101,62,65,110,105,109,97,116,105,111, +110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,115,116,121,108,101, +62,119,120,68,69,70,65,85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69, +60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105, +97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,84,73,77,69,95,67,72, +79,79,83,69,82,95,68,76,71,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,114,114,101,110,116,32, +116,105,109,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,56,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,67,85,82,95,84,88,84,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,116,105,109,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84, +84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, +90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,48,44,50,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34, +73,68,95,83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, +44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,95,76,79,79,80,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,111,112,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120, +34,32,110,97,109,101,61,34,73,68,95,82,69,86,69,82,83,69,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,118, +101,114,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,95,83,84,69,80,95,66,65,67,75,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,49,56,44,45,49,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,80,76,65,89,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,56,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, 62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, @@ -34233,7 +35063,7 @@ static unsigned char xml_res_file_10[] = { 76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111, 98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10}; -static size_t xml_res_size_11 = 162471; +static size_t xml_res_size_11 = 164726; static unsigned char xml_res_file_11[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, @@ -34955,75 +35785,122 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114,32, 80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,38,97,109,112,59, -120,112,108,111,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -38,97,109,112,59,83,112,97,99,101,60,47,108,97,98,101,108,62,10,32,32,32, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,76, +85,83,84,69,82,73,78,71,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,108,117,115,116,101,114,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,80,67,65,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,67,65,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,65,78,83,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,97,110, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,67,76,85, +83,84,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,72,105,101,114,97,114,99,104,105,99,97,108,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,69,38,97,109,112,59,120,112,108,111,114,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,38,97,109,112,59,83,112,97,99,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,77,83,80,76,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,77,111,114,97, +110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,71,77,79,82,65,78,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97,116,101,32, +77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,77,95,68,77,79,82,65,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,102,102,101,114,101, +110,116,105,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,83, -80,76,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105, -118,97,114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,79, +82,65,78,95,69,66,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69,66, +32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -71,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,68,105,102,102,101,114,101,110,116,105,97,108,32,77,111,114,97,110,39, -115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +85,78,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,85,110,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111, +114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,77,95,77,85,76,84,73,95,76,73,83,65,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105, +97,116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +77,95,68,73,70,70,95,76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,76,111, +99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95, +69,66,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,32,119,105,116,104, +32,69,66,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,76,111,99,97,108,32,71,32,67,108,117,115,116,101,114,32, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,77,79,82,65,78,95,69,66,82,65,84,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,114,97,110,39,115,32,73, -32,119,105,116,104,32,69,66,32,82,97,116,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83,65,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116, -101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -77,85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,76,111,99, -97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10, +101,61,34,73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,42,32, +67,108,117,115,116,101,114,32,77,97,112,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99, +97,108,32,71,101,97,114,121,32,77,97,112,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +77,95,85,78,73,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101, +32,76,111,99,97,108,32,71,101,97,114,121,32,67,108,117,115,116,101,114, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,77,95,77,85,76,95,76,79,67,65,76,95,71,69,65,82,89, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,117,108,116, +105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,71,101,97,114,121, +32,67,108,117,115,116,101,114,32,77,97,112,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,77,95,67,79,82,82,69,76,79,71,82,65,77,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,110,112,97,114,97,109, +101,116,114,105,99,32,83,112,97,116,105,97,108,32,65,117,116,111,99,111, +114,114,101,108,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109, +38,97,109,112,59,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69, -66,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32, -69,66,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,76,111,99,97,108,32,71,32,67,108,117,115,116,101,114,32,77, -97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,42,32,67, -108,117,115,116,101,114,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,67,79,82,82,69,76,79,71,82,65,77,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,78,111,110,112,97,114,97,109,101, -116,114,105,99,32,83,112,97,116,105,97,108,32,65,117,116,111,99,111,114, -114,101,108,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,38, -97,109,112,59,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,84,73,77, -69,95,67,72,79,79,83,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,84,105,109,101,32,80,108,97,121,101,114,60,47,108,97,98,101, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,84,73, +77,69,95,67,72,79,79,83,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,84,105,109,101,32,80,108,97,121,101,114,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,65,82, @@ -38590,38 +39467,51 @@ static unsigned char xml_res_file_11[] = { 10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, 111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77, -79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -104,111,119,32,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,76,73,83,65,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, +119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82,69,71,73,77,69,83,95, +82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,103,105,109,101,115,32,82,101,103,114,101,115,115, +105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101, +97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87,69, +83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,76,79,87,69,83,83,32,83,109,111,111,116,104,101,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68, +73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32, +80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87, -69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111,111,116, -104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99, -107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76, -79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101, -116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,72,79,87,95,65,88,69,83,95,84,72,82,79,85,71,72,95,79, -82,73,71,73,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104, -111,119,32,65,120,101,115,32,84,104,114,111,117,103,104,32,79,114,105,103, -105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69, +83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,32,84, +104,114,111,117,103,104,32,79,114,105,103,105,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, 95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97, 110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98,101,108,62,10, @@ -41075,84 +41965,128 @@ static unsigned char xml_res_file_11[] = { 116,101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,79,82,65,78,95,77,69, -78,85,34,62,10,32,32,32,32,60,108,97,98,101,108,62,77,111,114,97,110,32, -83,99,97,116,116,101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77, -83,80,76,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105, -118,97,114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60,47,108,97, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,76,85,83,84,69,82,73, +78,71,95,77,69,78,85,34,62,10,32,32,32,32,60,108,97,98,101,108,62,67,108, +117,115,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65, +84,65,95,80,67,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,80, +67,65,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,65,78,83,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,97,110,115,60,47,108,97, 98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,71,77,79,82,65, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,102,102,101, -114,101,110,116,105,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,79,82, -65,78,95,69,66,82,65,84,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82, -97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,76,73,83,65,95,77,69,78,85,34,62,10,32,32,32, -32,60,108,97,98,101,108,62,76,111,99,97,108,32,77,111,114,97,110,39,115, -32,73,32,77,97,112,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95, +68,65,84,65,95,72,67,76,85,83,84,69,82,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,72,105,101,114,97,114,99,104,105,99,97,108,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,79,82,65,78,95,77,69,78,85,34,62,10,32,32,32,32,60,108,97,98,101, +108,62,77,111,114,97,110,32,83,99,97,116,116,101,114,32,80,108,111,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,77,95,77,83,80,76,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,77,111,114,97, +110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,71,77,79,82,65,78,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,66,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39, +115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,68,77,79,82,65,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,77,111,114,97,110, +39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,77,95,77,79,82,65,78,95,69,66,82,65,84,69,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,77,111,114,97,110,39,115,32,73,32,119,105, +116,104,32,69,66,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,83,65,95,77,69, +78,85,34,62,10,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32, +77,111,114,97,110,39,115,32,73,32,77,97,112,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +85,78,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,85,110,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114, +97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,77,85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97,116,101,32,76,111, +99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,68,73,70,70,95,76,73,83, +65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,102,102,101, +114,101,110,116,105,97,108,32,76,111,99,97,108,32,77,111,114,97,110,39, +115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,76,73,83,65,95,69,66,82,65,84,69,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,76,111,99,97,108,32,77,111,114,97,110,39,115,32, +73,32,119,105,116,104,32,69,66,32,82,97,116,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, +32,71,32,77,97,112,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83, -65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97, -114,105,97,116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32, +71,32,67,108,117,115,116,101,114,32,77,97,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,95, +83,84,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99, +97,108,32,71,42,32,67,108,117,115,116,101,114,32,77,97,112,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,108,97,98,101,108,62,76,111,99, +97,108,32,71,101,97,114,121,32,77,97,112,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +85,78,73,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76,111, +99,97,108,32,71,101,97,114,121,32,67,108,117,115,116,101,114,32,77,97,112, 60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -77,85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,76,111,99,97,108, -32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69,66,82,65,84,69,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,77,111, -114,97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82,97,116,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,108,97,98,101,108, -62,76,111,99,97,108,32,71,32,77,97,112,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76, -79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -111,99,97,108,32,71,32,67,108,117,115,116,101,114,32,77,97,112,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67, -65,76,95,71,95,83,84,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,76,111,99,97,108,32,71,42,32,67,108,117,115,116,101,114,32,77,97, -112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,71,69,84,73,83,95,77,69,78,85,34,62,10,32,32,32,32,60, -108,97,98,101,108,62,76,111,99,97,108,32,71,32,77,97,112,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +77,85,76,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,117,108,116,105,118,97,114,105,97,116,101,32, +76,111,99,97,108,32,71,101,97,114,121,32,67,108,117,115,116,101,114,32, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,71,69,84,73,83,95,77,69,78,85,34,62,10,32,32, +32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,32,77,97,112,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,76,111,99,97,108,32,71,32,67,108,117,115,116,101,114, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,76,111,99,97,108,32,71,32,67,108,117,115,116,101,114,32,77, -97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,76,111,99,97,108,32,71,42,32,67,108,117,115,116, -101,114,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,67,72,79,73,67,69,83,34, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101, -108,101,115,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110, +34,73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,42,32,67,108,117,115, +116,101,114,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,67,72,79,73,67,69,83, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76, +69,83,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101, +109,101,108,101,115,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110, 116,105,108,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, @@ -46340,76 +47274,1124 @@ static unsigned char xml_res_file_44[] = { 116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,10,32,32,32, 32,32,32,32,32,32,32,32,32,120,109,108,110,115,58,116,105,102,102,61,34, 104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47, -116,105,102,102,47,49,46,48,47,34,62,10,32,32,32,32,32,32,32,32,32,60,116, +116,105,102,102,47,49,46,48,47,34,62,10,32,32,32,32,32,32,32,32,32,60,116, +105,102,102,58,79,114,105,101,110,116,97,116,105,111,110,62,49,60,47,116, +105,102,102,58,79,114,105,101,110,116,97,116,105,111,110,62,10,32,32,32, +32,32,32,60,47,114,100,102,58,68,101,115,99,114,105,112,116,105,111,110, +62,10,32,32,32,60,47,114,100,102,58,82,68,70,62,10,60,47,120,58,120,109, +112,109,101,116,97,62,10,76,194,39,89,0,0,4,201,73,68,65,84,88,9,197,151, +59,75,107,89,20,199,247,137,70,163,70,137,140,88,136,194,248,230,98,41, +88,219,95,16,27,63,130,16,139,1,153,102,154,91,8,51,88,89,8,83,24,252,20, +162,204,84,22,214,130,165,133,111,80,176,114,48,163,81,163,209,156,249, +255,118,178,143,231,156,60,28,238,29,238,44,88,217,143,245,220,255,189, +246,217,59,198,252,207,228,125,16,255,35,249,7,230,53,98,191,102,166,201, +68,75,19,217,215,138,254,181,207,4,17,86,86,86,104,127,16,103,196,189,95, +201,216,226,195,250,12,181,234,26,3,196,176,191,176,176,144,126,124,124, +252,245,249,249,121,101,119,119,247,111,205,125,22,111,204,205,205,165, +223,222,222,128,206,19,25,245,205,217,217,153,25,29,29,53,45,45,45,198, +247,43,168,58,217,209,209,145,73,167,211,97,153,143,97,185,92,46,92,94, +94,102,111,111,111,255,148,47,144,120,19,155,86,126,160,187,187,187,182, +68,34,241,169,191,191,223,101,154,187,184,184,24,28,26,26,178,65,209,33, +160,146,52,27,27,27,102,105,105,201,116,118,118,6,50,217,154,98,177,104, +214,214,214,204,248,248,184,73,165,82,70,65,49,179,164,68,123,87,87,87, +115,74,224,71,77,16,220,46,60,72,160,181,181,85,58,126,113,98,98,162,36, +97,15,43,39,184,130,150,197,65,49,182,183,183,155,100,50,105,104,73,8,118, +228,100,109,109,109,86,7,116,96,37,231,11,89,53,137,180,116,217,202,191, +156,77,144,0,19,82,78,104,133,4,43,3,251,235,235,43,1,60,205,219,4,28,204, +172,140,173,168,218,216,54,46,67,39,140,64,85,151,253,170,24,90,171,247, +194,168,14,35,13,91,23,153,248,15,6,56,140,56,141,32,16,14,64,112,7,111, +56,17,230,24,179,231,80,35,153,147,163,67,31,14,235,50,15,53,76,0,136,31, +30,30,108,49,57,184,9,78,17,50,166,224,112,234,100,244,153,99,172,253,182, +206,221,22,32,43,149,74,129,174,21,86,127,106,18,184,185,185,177,162,211, +211,83,147,203,229,108,49,57,71,172,128,0,215,215,215,102,125,125,221,34, +68,145,65,200,208,83,149,27,157,30,155,156,147,185,4,10,133,130,213,13, +255,212,36,208,211,211,99,203,122,108,108,204,100,179,217,8,2,110,149,4, +31,25,25,177,39,193,37,135,140,149,19,116,121,121,57,114,12,65,14,217,254, +254,190,57,63,63,15,199,175,217,2,95,206,243,104,200,200,239,234,234,10, +234,192,89,17,8,135,28,185,240,89,103,190,106,103,58,58,58,44,114,206,134, +22,132,176,139,83,128,128,50,44,235,124,167,230,231,231,191,156,156,156, +176,146,84,245,24,218,85,57,39,108,1,171,100,229,142,157,83,198,200,208, +225,91,65,223,217,57,153,211,117,173,251,234,185,241,119,111,3,4,4,105, +66,89,22,183,182,182,126,35,139,225,225,225,159,5,89,7,253,240,241,1,70, +198,64,238,96,71,199,141,195,80,215,179,67,55,76,113,4,60,21,16,183,87, +70,48,122,28,43,142,15,45,252,242,242,98,158,158,158,130,163,230,230,93, +75,161,1,63,71,149,62,186,48,118,238,248,134,131,211,15,16,112,2,93,74, +124,42,125,110,53,46,22,246,146,253,131,88,17,253,122,71,13,25,193,243, +249,188,217,220,220,180,5,231,106,0,116,88,8,183,104,156,106,18,112,10, +221,221,221,246,86,11,39,128,35,86,134,227,122,71,141,85,18,124,113,113, +49,114,83,178,109,216,237,237,237,153,227,227,99,23,194,182,13,19,32,24, +199,44,158,0,86,56,172,119,212,208,71,198,53,205,141,24,38,230,225,56,197, +107,32,144,179,74,224,174,199,200,128,27,162,15,67,232,54,146,161,239,244, +172,114,245,167,97,2,146,87,188,134,181,191,189,143,207,136,223,248,22, +248,130,17,133,132,138,202,94,155,218,10,107,192,16,6,70,182,199,193,89, +85,179,169,53,145,249,146,121,178,195,103,100,31,2,4,244,213,147,47,47, +169,42,78,74,233,78,112,21,128,76,197,147,80,5,123,58,74,94,184,213,188, +135,13,45,44,136,57,182,86,199,141,177,129,37,75,92,93,93,153,157,157,157, +130,30,186,183,54,219,234,143,123,32,248,122,130,117,43,192,154,206,237, +47,170,214,124,95,95,223,231,193,193,193,156,146,74,43,17,80,32,65,187, +207,247,247,247,102,114,114,18,20,16,165,240,37,89,145,36,184,69,185,200, +64,163,98,102,236,234,183,183,183,185,10,179,226,63,196,160,16,121,25,105, +108,204,244,244,52,171,135,2,100,212,239,17,243,150,139,51,31,44,51,53, +53,245,5,166,47,98,46,174,199,24,31,142,194,190,163,31,162,131,131,3,30, +164,80,121,118,118,54,51,48,48,224,101,50,153,18,208,86,166,223,127,117, +109,219,55,1,47,96,232,240,240,208,126,27,244,33,243,132,222,187,162,122, +58,150,101,157,255,94,189,35,124,208,13,11,227,142,25,251,252,33,209,221, +253,187,250,35,226,103,65,25,201,58,228,128,55,191,221,2,233,20,53,31,247, +103,85,165,195,167,180,93,124,62,51,51,243,147,252,7,239,245,186,6,88,81, +19,42,166,36,207,117,198,141,72,58,214,25,151,89,35,29,230,41,88,233,148, +84,11,247,205,244,190,187,172,33,2,202,164,153,236,91,18,141,32,250,15, +155,96,209,13,138,0,157,146,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_45 = 10729; +static unsigned char xml_res_file_45[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, +108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, +92,114,206,105,201,57,131,228,40,32,203,146,147,100,21,5,17,17,37,137,130, +18,69,4,37,75,48,145,4,36,169,136,138,128,2,70,36,131,138,136,2,102,224, +29,126,190,225,222,187,170,171,187,127,239,120,170,122,251,91,207,204,116, +247,78,239,214,247,249,76,13,0,18,102,148,136,136,80,4,3,0,97,225,49,81, +246,166,6,36,87,55,119,18,246,45,160,5,116,112,227,5,40,10,53,58,66,223, +214,214,10,192,241,143,254,223,227,235,56,128,118,250,167,50,59,99,253, +215,227,255,109,48,250,250,69,83,1,128,108,97,29,230,27,77,13,131,117,55, +172,245,168,17,81,49,0,32,118,206,17,58,16,19,177,163,133,97,205,18,5,47, +16,214,228,29,29,240,71,239,172,137,197,231,143,246,254,235,28,71,123,67, +88,195,215,224,104,41,148,168,0,0,8,73,112,158,20,71,13,128,115,132,75, +0,96,152,194,125,131,194,1,96,184,9,0,135,14,53,144,226,11,128,248,58,124, +142,116,88,216,126,88,75,144,96,45,238,243,31,198,9,248,183,49,125,254, +57,38,133,18,240,79,253,231,187,252,21,204,14,138,202,6,74,106,242,36,67, +74,104,144,79,20,37,198,207,247,127,121,103,254,7,17,22,26,251,143,249, +118,118,128,214,47,220,201,1,238,119,238,19,15,112,0,138,64,25,24,0,37, +160,6,228,1,9,24,2,10,8,5,65,192,7,68,193,42,6,248,1,223,24,191,131,49, +59,23,27,238,143,56,20,21,20,16,24,67,210,135,119,208,143,100,30,78,149, +149,38,41,202,43,168,0,176,243,123,248,51,197,26,219,95,179,64,108,131, +255,202,121,194,251,166,68,3,39,39,255,149,139,64,3,112,199,17,0,98,235, +191,114,18,240,253,33,150,1,208,151,79,141,141,138,251,147,67,237,124,160, +1,1,208,3,22,192,9,248,128,16,16,7,50,240,170,85,129,38,208,3,198,192,2, +216,0,71,224,6,188,0,21,4,130,48,120,221,7,192,17,112,12,164,130,12,112, +6,156,7,69,160,20,92,6,213,160,30,92,7,45,160,3,244,128,123,224,33,24,6, +99,224,21,152,2,243,224,3,88,5,95,193,47,8,130,176,16,17,98,134,56,33,126, +72,4,146,130,20,33,50,164,3,25,67,86,144,61,228,6,121,67,1,80,56,20,11, +29,129,142,67,25,80,14,84,4,149,65,53,208,53,168,13,234,129,30,64,35,208, +11,104,26,122,7,125,129,126,34,144,8,90,4,11,130,23,33,138,144,67,144,17, +250,8,75,132,35,194,19,17,128,136,68,196,35,82,16,167,17,5,136,114,196, +85,68,51,162,7,241,16,49,134,152,66,124,64,108,32,1,146,6,201,134,20,64, +202,32,201,72,67,164,13,210,29,233,143,140,66,38,34,211,145,121,200,114, +100,3,178,29,121,31,249,20,57,133,92,70,254,64,97,80,204,40,18,74,6,165, +137,50,67,57,161,168,168,72,84,34,42,19,85,132,170,70,53,163,250,81,79, +81,211,168,85,212,22,154,136,230,65,75,161,53,208,230,104,87,116,0,250, +0,58,21,157,135,174,68,223,66,223,69,143,161,231,209,95,49,24,12,27,70, +12,163,134,49,195,184,97,130,49,135,49,153,152,18,76,35,166,27,51,130,153, +197,108,96,177,88,78,172,20,86,27,107,131,165,96,99,176,169,216,66,236, +85,236,29,236,40,118,30,251,29,71,131,227,199,41,226,76,112,238,184,112, +92,50,46,15,87,139,235,194,141,226,22,113,191,240,12,120,17,188,6,222,6, +239,139,63,132,207,198,95,193,183,227,159,224,231,241,191,8,140,4,49,130, +54,193,145,16,76,56,70,40,32,52,16,238,18,94,19,214,104,104,104,4,105,212, +105,236,104,130,104,146,104,10,104,154,104,6,104,166,105,126,208,50,209, +74,210,26,210,122,208,198,210,158,166,173,162,237,166,125,65,187,70,36, +18,69,137,122,68,119,98,12,241,52,177,134,216,71,156,36,126,167,99,166, +147,165,51,167,243,165,59,74,87,76,215,76,55,74,183,66,143,167,23,161,215, +167,247,162,143,167,207,163,191,65,255,132,126,153,1,207,32,202,96,200, +64,97,72,100,40,102,104,99,152,96,216,96,100,102,84,96,180,97,12,99,204, +100,172,101,124,192,184,196,132,101,18,101,50,102,242,101,74,97,186,204, +212,199,52,203,140,100,22,98,54,100,166,50,31,103,190,194,124,151,121,158, +5,195,34,198,98,206,18,204,146,193,82,207,50,196,178,202,202,196,170,204, +234,204,122,144,181,152,181,147,117,138,13,201,38,202,102,206,22,202,150, +205,118,157,109,156,237,39,59,47,187,62,187,31,123,26,123,3,251,40,251, +55,14,110,14,61,14,63,142,116,142,70,142,49,142,159,156,36,78,99,206,16, +206,179,156,45,156,111,184,80,92,146,92,118,92,7,184,46,114,221,229,90, +230,102,225,214,228,166,114,167,115,95,231,126,201,131,224,145,228,177, +231,57,204,115,153,231,17,207,6,47,31,175,41,111,4,111,33,111,31,239,50, +31,27,159,30,95,48,223,57,190,46,190,119,252,204,252,58,252,65,252,231, +248,239,240,191,39,177,146,244,73,161,164,2,82,63,105,85,128,71,192,76, +32,86,160,76,96,72,224,151,160,152,160,147,96,178,96,163,224,27,33,130, +16,89,200,95,232,156,80,175,208,170,48,191,176,181,240,17,225,58,225,151, +34,120,17,178,72,160,72,190,200,125,145,111,162,98,162,46,162,39,69,91, +68,151,196,56,196,204,197,226,197,234,196,94,139,19,197,117,197,35,197, +203,197,159,73,96,36,200,18,33,18,37,18,195,146,8,73,21,201,64,201,98,201, +39,82,8,41,85,169,32,169,18,169,17,105,180,180,186,116,184,116,185,244, +132,12,173,140,190,76,156,76,157,204,180,44,155,172,149,108,178,108,139, +236,138,156,176,156,187,220,89,185,251,114,91,242,42,242,161,242,87,228, +95,41,48,41,88,40,36,43,180,43,124,81,148,84,164,42,22,43,62,83,34,42,153, +40,29,85,106,85,250,172,44,165,236,167,124,81,249,185,10,179,138,181,202, +73,149,94,149,77,85,53,213,40,213,6,213,119,106,194,106,222,106,23,212, +38,200,44,100,91,114,38,121,64,29,173,110,160,126,84,189,67,253,135,134, +170,70,140,198,117,141,79,154,50,154,33,154,181,154,75,90,98,90,126,90, +87,180,102,181,5,181,41,218,101,218,83,58,36,29,111,157,75,58,83,186,2, +186,20,221,114,221,25,61,33,61,95,189,74,189,69,125,9,253,96,253,171,250, +43,6,242,6,81,6,183,12,190,25,106,24,38,24,118,27,33,141,76,141,210,141, +134,140,153,140,157,140,139,140,39,77,4,77,2,76,234,76,86,77,85,76,15,155, +118,155,161,205,44,205,206,154,77,152,243,154,83,205,107,204,87,45,212, +44,18,44,250,45,105,45,29,44,139,44,103,172,36,173,162,172,218,173,17,214, +22,214,185,214,175,247,136,236,9,223,211,98,3,108,204,109,114,109,222,216, +138,217,70,218,222,182,195,216,217,218,21,219,45,216,43,216,31,177,191, +239,192,236,176,207,161,214,225,171,163,129,99,182,227,43,39,113,167,88, +167,94,103,122,103,15,231,26,231,111,46,70,46,57,46,83,174,114,174,9,174, +15,221,184,220,130,220,90,221,177,238,206,238,149,238,27,123,141,247,158, +223,59,239,161,226,145,234,49,238,41,230,121,208,243,129,23,151,87,168, +87,231,62,250,125,148,125,55,188,209,222,46,222,181,222,191,41,54,148,114, +202,134,143,185,207,5,159,85,170,33,53,159,250,193,87,207,247,156,239,59, +63,109,191,28,191,69,127,109,255,28,255,165,0,237,128,220,128,119,129,186, +129,121,129,203,65,134,65,69,65,159,131,205,130,75,131,191,133,216,132, +84,133,108,135,186,132,54,134,225,194,188,195,218,194,153,194,67,194,251, +247,243,237,63,184,127,36,66,42,34,53,98,42,82,35,242,124,228,106,148,101, +84,101,52,20,237,25,221,26,195,2,27,239,163,88,241,216,19,177,211,113,58, +113,197,113,223,15,56,31,184,113,144,241,96,248,193,71,135,36,15,165,29, +90,140,55,137,175,56,140,58,76,61,220,123,68,224,200,177,35,211,9,250,9, +101,137,80,162,79,98,239,81,161,163,41,71,231,147,76,147,170,143,17,142, +133,28,123,156,44,159,156,147,188,126,220,229,120,123,10,111,74,82,202, +236,9,211,19,117,169,116,169,81,169,19,39,53,79,150,158,66,157,10,58,53, +148,166,148,86,152,182,149,238,155,62,152,33,159,145,151,241,59,147,154, +57,152,165,144,85,144,181,125,218,255,244,80,182,106,246,197,51,152,51, +225,103,198,207,234,158,173,206,97,204,137,207,153,205,181,206,109,62,71, +58,151,126,110,253,252,190,243,15,242,148,243,74,243,9,249,177,249,83,5, +86,5,173,133,194,133,103,10,127,23,5,22,141,21,27,20,55,94,224,185,144, +118,225,91,137,111,201,232,69,189,139,13,165,188,165,25,165,63,47,5,93, +122,94,102,90,214,92,46,90,158,119,25,115,57,238,242,194,21,231,43,247, +43,200,21,53,149,92,149,25,149,155,85,225,85,83,213,246,213,253,53,106, +53,53,181,60,181,217,117,136,186,216,186,119,87,61,174,14,215,27,213,183, +54,200,52,148,53,178,53,102,52,129,166,216,166,247,215,188,175,141,95,183, +188,222,123,131,124,163,225,166,200,205,11,183,152,111,165,55,67,205,135, +154,87,91,2,91,166,90,221,90,71,218,44,218,122,219,53,219,111,221,150,189, +93,213,33,208,81,220,201,218,153,221,69,232,74,233,218,190,19,127,103,163, +59,162,123,185,39,160,103,182,119,95,239,171,62,215,190,103,253,118,253, +67,119,45,239,14,220,51,185,215,119,95,255,254,157,1,237,129,142,7,26,15, +218,6,201,131,45,15,85,31,54,63,82,121,116,235,177,202,227,91,67,170,67, +205,79,212,158,180,14,171,15,183,143,104,141,116,141,234,142,246,60,53, +122,122,239,153,249,179,135,99,123,198,70,198,157,198,159,79,120,76,76, +61,247,125,190,244,34,244,197,231,151,113,47,127,189,74,122,141,126,157, +254,134,225,77,222,36,207,100,249,91,137,183,141,83,170,83,157,211,70,211, +143,102,28,102,94,205,82,103,63,204,69,207,253,158,79,89,32,46,228,45,242, +47,214,44,41,46,117,188,51,121,55,252,126,239,251,249,15,17,31,126,45,167, +126,100,252,120,97,69,124,229,230,39,189,79,143,86,93,87,231,63,71,125, +222,254,146,185,198,185,86,181,174,188,222,187,97,187,49,249,53,236,235, +175,111,233,223,57,191,87,255,32,255,184,255,211,229,231,226,175,3,191, +177,191,11,54,37,54,219,183,44,183,94,111,135,109,111,71,80,162,40,127, +149,2,72,184,33,252,253,1,248,82,5,215,9,110,112,249,52,12,215,84,116,127, +234,181,191,7,18,250,83,14,22,66,106,208,16,34,8,73,68,86,163,60,208,16, +186,3,227,143,101,195,62,194,157,196,147,241,43,132,10,26,47,90,46,218, +113,226,121,58,107,122,122,250,65,134,52,70,43,38,60,211,16,115,22,139, +35,43,27,235,75,182,139,236,126,28,82,28,107,156,237,92,39,184,173,120, +88,121,166,121,235,248,226,248,13,73,12,164,73,129,58,193,195,66,230,194, +28,194,75,34,109,162,153,98,30,226,242,18,72,137,9,201,90,169,4,105,123, +25,113,153,45,217,167,114,181,242,73,10,46,138,114,74,88,165,73,229,22, +149,108,213,0,53,61,50,23,121,93,253,177,70,149,102,178,150,167,54,89,135, +69,103,85,247,177,94,173,254,41,3,127,67,19,35,17,99,140,241,162,201,128, +105,173,217,105,243,72,11,23,75,45,43,33,107,130,245,250,158,87,54,189, +182,213,118,167,237,163,28,92,28,53,157,248,157,145,206,243,46,15,92,175, +186,157,113,143,222,235,234,161,229,41,224,133,245,250,184,111,204,187, +147,82,229,147,67,77,244,13,241,219,235,111,21,160,23,168,26,36,23,44,25, +34,25,42,29,166,20,174,179,127,79,4,53,242,64,84,102,116,121,76,75,236, +163,184,217,3,63,14,49,196,139,29,214,61,226,146,176,63,241,212,209,178, +164,219,199,198,146,63,165,16,78,136,164,234,159,244,58,117,56,45,63,189, +57,227,89,230,218,105,230,108,165,51,14,103,99,115,242,115,219,206,189, +201,3,249,34,5,22,133,17,69,121,197,93,23,230,47,210,151,146,47,249,148, +101,149,183,93,94,168,96,169,52,168,138,172,46,175,121,90,135,190,170,94, +31,222,80,209,248,230,26,219,117,219,27,153,55,7,154,49,45,70,173,199,219, +250,110,163,59,76,59,211,186,30,119,51,244,56,245,22,246,189,189,43,124, +47,248,126,211,192,215,65,205,135,199,30,221,31,162,125,98,59,124,126,228, +249,83,238,103,158,99,165,227,111,159,243,189,240,124,89,252,234,197,27, +246,73,167,183,185,83,35,51,244,179,214,115,25,243,3,139,152,37,163,119, +201,239,187,63,108,125,212,90,137,255,212,182,250,253,139,218,90,220,250, +173,141,141,111,42,223,99,127,52,255,252,246,155,188,25,191,213,177,189, +189,187,255,187,251,191,187,255,255,159,247,255,15,183,239,4,135,42,0,101, +48,87,186,117,3,224,4,247,37,112,19,215,131,253,3,62,182,243,56,193,81, +15,64,53,186,255,108,72,212,223,31,39,252,69,203,16,172,145,48,130,98,0, +22,224,1,13,124,17,61,96,2,172,128,29,112,193,36,42,0,68,96,22,149,134, +185,89,5,168,3,29,152,157,205,128,53,176,7,174,192,19,102,209,32,16,1,226, +64,2,72,129,57,52,7,20,130,50,80,3,154,64,27,204,159,15,192,40,204,158, +115,224,35,248,10,79,129,135,153,147,23,18,135,121,83,27,50,133,89,211, +19,10,130,98,160,36,40,19,42,128,174,64,77,80,39,52,8,77,64,115,208,103, +104,11,38,75,46,132,56,66,21,97,132,176,71,80,16,17,136,163,48,79,150,32, +234,17,157,136,199,136,55,136,143,136,77,36,29,146,15,41,135,212,67,218, +35,169,200,88,100,42,178,0,89,139,236,68,62,65,206,32,215,81,88,20,23,74, +22,165,15,83,99,16,42,1,117,22,85,129,106,67,13,161,102,81,223,97,90,20, +68,147,209,214,104,42,250,16,58,27,93,129,238,64,143,162,223,97,0,134,29, +35,135,49,193,120,97,98,49,89,152,10,76,23,102,28,243,9,139,195,146,176, +26,88,7,108,40,204,133,151,176,109,216,103,216,21,28,14,39,132,211,198, +185,226,162,113,217,48,15,222,197,77,227,54,241,156,120,21,188,29,62,28, +159,129,175,194,247,227,103,240,219,4,30,130,6,193,149,16,71,56,71,184, +78,24,33,124,162,161,163,145,161,177,162,9,161,201,160,169,165,25,164,121, +79,75,128,217,207,146,54,132,54,147,182,158,118,136,246,19,145,129,168, +72,116,36,198,17,11,136,237,196,215,196,109,58,1,58,35,186,0,186,116,186, +6,186,17,186,13,122,78,122,109,122,10,125,42,125,45,204,122,235,12,156, +12,58,12,84,134,52,134,70,134,49,134,95,140,2,140,166,140,225,140,231,24, +111,51,206,192,255,107,5,38,87,166,36,166,106,166,97,166,239,204,36,102, +115,230,72,230,34,230,62,230,101,22,86,22,93,150,64,150,28,150,14,150,5, +86,6,86,13,86,63,214,108,214,118,214,121,54,6,54,77,182,0,182,28,182,46, +182,247,236,172,236,6,236,225,236,69,236,247,217,215,56,72,28,214,28,241, +28,85,28,99,156,8,78,121,78,79,206,12,206,54,206,37,46,54,46,35,174,104, +174,114,174,97,174,109,110,89,110,47,238,44,238,14,238,101,30,30,30,75, +152,227,234,120,94,243,210,242,106,241,134,241,150,240,14,241,110,243,201, +243,81,248,114,248,250,249,54,248,197,248,93,249,211,249,59,248,87,72,36, +146,61,41,133,212,66,122,47,192,43,96,39,144,34,208,42,176,44,72,130,233, +45,77,176,75,112,77,72,66,200,11,102,183,65,97,32,172,42,28,38,124,25,38, +55,70,17,115,145,36,145,86,145,85,81,113,81,111,209,66,209,17,49,130,152, +161,88,130,88,179,216,170,184,132,56,85,188,68,252,185,4,147,132,181,196, +41,137,94,137,45,73,117,201,24,201,38,201,101,41,113,41,95,169,75,82,175, +165,57,165,157,164,115,164,159,192,180,102,46,115,82,166,95,22,33,171,43, +155,32,123,91,246,135,156,154,92,156,220,77,185,53,121,5,249,8,249,70,249, +21,5,25,133,80,133,58,133,247,138,18,138,65,138,213,138,75,74,98,74,1,74, +85,74,11,202,162,202,254,202,149,202,11,42,162,42,254,42,149,42,11,170, +162,170,254,170,149,170,11,106,162,106,254,106,149,106,139,100,49,114,0, +185,138,188,168,46,166,30,160,94,165,190,168,33,170,225,175,81,169,177, +160,41,162,233,167,121,69,115,78,75,72,203,71,171,76,107,74,155,95,219, +75,251,130,246,43,29,78,29,87,157,60,157,103,186,76,186,54,186,89,186,131, +122,88,61,99,189,100,189,59,122,155,250,26,250,7,245,155,245,215,13,20, +13,34,12,26,12,62,26,74,25,6,27,214,24,46,26,137,26,249,25,85,24,205,25, +11,25,83,141,203,141,103,96,74,163,152,148,153,204,152,10,154,250,152,150, +155,206,154,9,155,249,154,85,152,45,152,139,153,7,194,156,246,193,66,218, +34,220,162,209,226,179,165,146,101,172,101,139,229,15,43,77,171,4,171,110, +152,212,140,173,79,89,63,220,67,183,199,110,207,185,61,19,54,92,54,94,54, +101,54,243,182,18,182,161,182,77,182,235,118,100,187,4,187,30,123,180,189, +133,253,105,251,167,14,28,14,158,14,229,14,139,142,210,142,145,142,205, +142,191,157,244,157,78,58,61,118,102,118,118,117,190,232,60,231,34,229, +18,233,210,226,178,229,106,228,154,225,58,234,198,225,182,207,173,210,237, +163,187,178,251,17,247,190,189,52,123,237,247,22,237,157,246,144,240,136, +244,104,243,132,60,205,61,207,122,190,244,18,244,10,246,186,225,245,123, +159,209,190,172,125,227,222,252,222,129,222,215,188,127,82,140,40,89,148, +9,31,146,79,176,207,77,159,77,170,41,245,44,245,149,175,136,111,132,111, +187,31,202,207,198,175,208,111,206,95,206,255,144,127,127,0,125,128,123, +64,69,192,106,160,86,224,201,192,209,32,190,160,160,160,91,193,80,176,85, +112,65,240,92,136,124,200,145,144,129,80,214,80,74,104,125,232,207,48,147, +176,220,176,183,225,210,225,135,194,239,237,103,222,239,189,191,126,255, +207,8,211,136,243,17,51,145,114,145,9,145,131,81,28,81,254,81,55,96,142, +179,137,46,137,254,16,163,30,115,42,102,60,86,56,54,42,182,39,142,62,206, +43,174,62,238,215,1,139,3,133,7,150,14,170,29,76,61,56,118,72,248,80,244, +161,222,120,166,120,74,252,181,195,224,176,237,225,210,195,159,142,232, +30,201,62,50,153,32,155,144,152,48,148,200,159,184,63,241,206,81,250,163, +251,142,54,37,129,36,187,164,178,164,47,199,12,142,229,30,155,75,86,78, +62,145,60,126,92,236,248,129,227,3,41,156,41,193,41,183,79,208,158,240, +60,209,112,98,59,213,54,181,44,245,203,73,195,147,231,79,46,156,82,59,149, +118,234,101,154,84,90,66,218,80,58,41,61,50,189,47,131,53,195,63,163,53, +147,144,185,55,179,62,115,59,203,46,235,114,214,198,105,211,211,133,167, +63,100,235,100,159,201,158,57,163,124,230,228,153,23,103,165,206,38,158, +29,206,17,202,137,203,25,200,229,206,13,207,237,57,199,114,46,224,92,219, +121,226,121,239,243,55,242,48,121,110,121,87,243,65,190,67,126,85,254,207, +130,61,5,101,5,27,133,230,133,37,133,159,139,140,138,10,138,62,22,235,23, +159,47,126,119,65,251,66,206,133,133,18,205,146,236,146,185,139,234,23, +179,46,206,148,170,149,102,150,78,95,82,189,148,121,105,186,76,181,44,179, +108,186,92,173,60,179,124,230,50,249,242,233,203,115,87,52,174,156,185, +178,80,161,93,145,91,241,174,82,175,50,191,242,99,149,81,85,113,213,151, +106,243,234,75,213,223,107,108,106,170,106,182,106,157,107,27,234,48,117, +94,117,205,87,233,174,250,95,237,170,103,175,143,168,31,104,16,104,136, +111,120,218,40,221,120,162,241,109,19,185,41,167,233,195,53,227,107,165, +215,126,92,119,188,222,112,3,119,131,122,163,243,38,199,205,232,155,67, +183,36,110,157,184,53,213,172,213,156,223,188,214,98,211,82,215,138,107, +245,109,237,105,227,109,139,111,155,104,87,110,207,105,255,116,219,250, +118,109,7,174,195,191,163,191,83,168,243,88,231,84,151,110,215,197,174, +205,59,30,119,58,186,185,187,15,119,191,234,209,236,41,238,249,213,235, +209,219,209,199,211,151,208,55,217,175,219,127,233,46,116,215,231,110,223, +61,145,123,169,247,150,238,91,220,175,27,32,14,236,31,24,125,160,252,32, +239,193,143,193,189,131,93,15,5,30,166,60,92,124,100,241,168,254,49,195, +227,152,199,19,67,154,67,165,79,16,79,252,159,12,14,203,14,231,14,127,27, +217,59,210,61,42,50,154,54,186,242,212,225,105,235,51,222,103,199,159,45, +141,89,143,221,24,231,28,79,28,159,155,176,152,104,122,206,246,60,225,249, +236,11,243,23,77,47,217,95,38,188,156,123,101,249,234,250,107,206,215,73, +175,151,222,216,188,105,153,228,155,76,157,92,121,235,244,182,115,74,100, +42,107,234,235,180,215,244,189,25,185,153,130,89,48,27,52,59,58,167,57, +119,101,158,56,31,55,255,118,193,124,225,250,34,207,98,234,226,167,37,183, +165,190,119,50,239,242,223,67,239,67,223,143,127,208,251,80,183,204,186, +156,180,252,225,163,243,199,158,21,233,149,252,79,136,79,97,159,158,175, +26,173,54,126,230,254,156,250,249,203,23,175,47,131,107,170,107,229,235, +116,235,241,235,11,27,14,27,119,190,74,127,45,248,134,254,22,245,109,242, +187,229,247,214,31,34,63,114,126,108,255,12,251,249,242,151,233,175,91, +191,5,127,159,249,189,181,25,178,249,98,203,116,235,214,182,208,246,217, +191,234,199,93,255,223,245,255,93,255,223,245,255,93,255,223,245,255,93, +255,223,245,255,93,255,223,245,255,93,255,223,245,255,93,255,223,245,255, +93,255,255,63,239,255,209,254,74,138,127,106,0,218,40,0,208,223,183,183, +215,120,1,192,182,3,176,25,181,189,253,171,100,123,123,243,10,0,200,23, +0,116,71,254,121,23,112,39,172,100,0,192,189,113,119,114,84,124,232,16, +245,232,63,191,135,247,55,155,183,225,119,50,24,122,205,0,0,0,9,112,72, +89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,13,83,105,84,88,116,88,77, +76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,120,58, +120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111, +98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107, +61,34,88,77,80,32,67,111,114,101,32,53,46,52,46,48,34,62,10,32,32,32,60, +114,100,102,58,82,68,70,32,120,109,108,110,115,58,114,100,102,61,34,104, +116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57, +47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35, +34,62,10,32,32,32,32,32,32,60,114,100,102,58,68,101,115,99,114,105,112, +116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,10,32,32,32, +32,32,32,32,32,32,32,32,32,120,109,108,110,115,58,116,105,102,102,61,34, +104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47, +116,105,102,102,47,49,46,48,47,34,10,32,32,32,32,32,32,32,32,32,32,32,32, +120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116, +116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104, +111,116,111,115,104,111,112,47,49,46,48,47,34,10,32,32,32,32,32,32,32,32, +32,32,32,32,120,109,108,110,115,58,101,120,105,102,61,34,104,116,116,112, +58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,101,120,105,102, +47,49,46,48,47,34,10,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,110, +115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114, +103,47,100,99,47,101,108,101,109,101,110,116,115,47,49,46,49,47,34,10,32, +32,32,32,32,32,32,32,32,32,32,32,120,109,108,110,115,58,120,109,112,77, +77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111, +109,47,120,97,112,47,49,46,48,47,109,109,47,34,10,32,32,32,32,32,32,32, +32,32,32,32,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116, +116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112, +47,49,46,48,47,115,84,121,112,101,47,82,101,115,111,117,114,99,101,69,118, +101,110,116,35,34,10,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,110, +115,58,120,109,112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111, +98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34,62,10,32,32,32,32, +32,32,32,32,32,60,116,105,102,102,58,82,101,115,111,108,117,116,105,111, +110,85,110,105,116,62,50,60,47,116,105,102,102,58,82,101,115,111,108,117, +116,105,111,110,85,110,105,116,62,10,32,32,32,32,32,32,32,32,32,60,116, +105,102,102,58,79,114,105,101,110,116,97,116,105,111,110,62,49,60,47,116, +105,102,102,58,79,114,105,101,110,116,97,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,60,112,104,111,116,111,115,104,111,112,58,73,67,67,80, +114,111,102,105,108,101,62,83,50,52,66,51,55,48,32,67,97,108,105,98,114, +97,116,101,100,60,47,112,104,111,116,111,115,104,111,112,58,73,67,67,80, +114,111,102,105,108,101,62,10,32,32,32,32,32,32,32,32,32,60,112,104,111, +116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101,62,51,60,47, +112,104,111,116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101, +62,10,32,32,32,32,32,32,32,32,32,60,112,104,111,116,111,115,104,111,112, +58,72,105,115,116,111,114,121,62,50,48,49,54,45,48,50,45,48,56,84,49,52, +58,53,56,58,51,50,45,48,55,58,48,48,38,35,120,57,59,70,105,108,101,32,49, +48,46,112,115,100,32,111,112,101,110,101,100,38,35,120,65,59,50,48,49,54, +45,48,50,45,48,56,84,49,52,58,53,56,58,51,55,45,48,55,58,48,48,38,35,120, +57,59,70,105,108,101,32,49,48,46,112,115,100,32,115,97,118,101,100,38,35, +120,65,59,50,48,49,55,45,48,53,45,48,50,84,48,55,58,48,48,58,50,53,45,48, +53,58,48,48,38,35,120,57,59,70,105,108,101,32,49,48,46,112,115,100,32,111, +112,101,110,101,100,38,35,120,65,59,50,48,49,55,45,48,53,45,48,50,84,48, +55,58,48,49,58,53,54,45,48,53,58,48,48,38,35,120,57,59,70,105,108,101,32, +99,108,117,115,116,101,114,50,46,112,115,100,32,115,97,118,101,100,38,35, +120,65,59,50,48,49,55,45,48,53,45,48,50,84,48,55,58,48,54,58,52,51,45,48, +53,58,48,48,38,35,120,57,59,70,105,108,101,32,99,108,117,115,116,101,114, +50,46,112,115,100,32,115,97,118,101,100,38,35,120,65,59,60,47,112,104,111, +116,111,115,104,111,112,58,72,105,115,116,111,114,121,62,10,32,32,32,32, +32,32,32,32,32,60,101,120,105,102,58,80,105,120,101,108,88,68,105,109,101, +110,115,105,111,110,62,50,53,54,60,47,101,120,105,102,58,80,105,120,101, +108,88,68,105,109,101,110,115,105,111,110,62,10,32,32,32,32,32,32,32,32, +32,60,101,120,105,102,58,67,111,108,111,114,83,112,97,99,101,62,54,53,53, +51,53,60,47,101,120,105,102,58,67,111,108,111,114,83,112,97,99,101,62,10, +32,32,32,32,32,32,32,32,32,60,101,120,105,102,58,80,105,120,101,108,89, +68,105,109,101,110,115,105,111,110,62,50,53,54,60,47,101,120,105,102,58, +80,105,120,101,108,89,68,105,109,101,110,115,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,60,100,99,58,102,111,114,109,97,116,62,97,112,112,108, +105,99,97,116,105,111,110,47,118,110,100,46,97,100,111,98,101,46,112,104, +111,116,111,115,104,111,112,60,47,100,99,58,102,111,114,109,97,116,62,10, +32,32,32,32,32,32,32,32,32,60,120,109,112,77,77,58,79,114,105,103,105,110, +97,108,68,111,99,117,109,101,110,116,73,68,62,120,109,112,46,100,105,100, +58,53,52,52,100,55,54,98,99,45,97,97,50,55,45,52,54,55,98,45,97,55,101, +101,45,55,97,101,56,48,53,49,52,51,48,55,50,60,47,120,109,112,77,77,58, +79,114,105,103,105,110,97,108,68,111,99,117,109,101,110,116,73,68,62,10, +32,32,32,32,32,32,32,32,32,60,120,109,112,77,77,58,72,105,115,116,111,114, +121,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,100,102,58,83,101, +113,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,100,102,58, +108,105,32,114,100,102,58,112,97,114,115,101,84,121,112,101,61,34,82,101, +115,111,117,114,99,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,69,118,116,58,115,111,102,116,119,97,114,101, +65,103,101,110,116,62,65,100,111,98,101,32,80,104,111,116,111,115,104,111, +112,32,67,67,32,50,48,49,53,32,40,77,97,99,105,110,116,111,115,104,41,60, +47,115,116,69,118,116,58,115,111,102,116,119,97,114,101,65,103,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,69,118,116,58,119,104,101,110,62,50,48,49,54,45,48,49,45,51,48,84,50, +51,58,50,49,58,51,56,43,48,55,58,48,48,60,47,115,116,69,118,116,58,119, +104,101,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,69,118,116,58,105,110,115,116,97,110,99,101,73,68,62,120,109, +112,46,105,105,100,58,53,52,52,100,55,54,98,99,45,97,97,50,55,45,52,54, +55,98,45,97,55,101,101,45,55,97,101,56,48,53,49,52,51,48,55,50,60,47,115, +116,69,118,116,58,105,110,115,116,97,110,99,101,73,68,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,97,99, +116,105,111,110,62,99,114,101,97,116,101,100,60,47,115,116,69,118,116,58, +97,99,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,114,100,102,58,108,105,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,114,100,102,58,108,105,32,114,100,102,58,112,97,114,115,101, +84,121,112,101,61,34,82,101,115,111,117,114,99,101,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,115, +111,102,116,119,97,114,101,65,103,101,110,116,62,65,100,111,98,101,32,80, +104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,53,32,40,77,97,99, +105,110,116,111,115,104,41,60,47,115,116,69,118,116,58,115,111,102,116, +119,97,114,101,65,103,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,69,118,116,58,99,104,97,110,103,101,100, +62,47,60,47,115,116,69,118,116,58,99,104,97,110,103,101,100,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58, +119,104,101,110,62,50,48,49,54,45,48,49,45,51,48,84,50,51,58,50,50,58,53, +50,43,48,55,58,48,48,60,47,115,116,69,118,116,58,119,104,101,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118, +116,58,105,110,115,116,97,110,99,101,73,68,62,120,109,112,46,105,105,100, +58,98,48,54,97,101,100,99,55,45,55,50,54,99,45,52,49,48,50,45,97,100,54, +54,45,50,57,55,52,100,55,97,52,55,50,101,102,60,47,115,116,69,118,116,58, +105,110,115,116,97,110,99,101,73,68,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,97,99,116,105,111,110, +62,115,97,118,101,100,60,47,115,116,69,118,116,58,97,99,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,114,100,102,58, +108,105,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,100,102, +58,108,105,32,114,100,102,58,112,97,114,115,101,84,121,112,101,61,34,82, +101,115,111,117,114,99,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,69,118,116,58,115,111,102,116,119,97,114,101, +65,103,101,110,116,62,65,100,111,98,101,32,80,104,111,116,111,115,104,111, +112,32,67,67,32,50,48,49,53,32,40,77,97,99,105,110,116,111,115,104,41,60, +47,115,116,69,118,116,58,115,111,102,116,119,97,114,101,65,103,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,69,118,116,58,99,104,97,110,103,101,100,62,47,60,47,115,116,69,118, +116,58,99,104,97,110,103,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,69,118,116,58,119,104,101,110,62,50,48, +49,55,45,48,53,45,48,50,84,48,55,58,48,54,58,52,51,45,48,53,58,48,48,60, +47,115,116,69,118,116,58,119,104,101,110,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,105,110,115,116, +97,110,99,101,73,68,62,120,109,112,46,105,105,100,58,102,49,101,57,100, +97,50,102,45,97,99,51,50,45,52,99,98,48,45,57,55,102,48,45,48,49,100,48, +51,100,55,51,97,57,57,49,60,47,115,116,69,118,116,58,105,110,115,116,97, +110,99,101,73,68,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,69,118,116,58,97,99,116,105,111,110,62,115,97,118,101, +100,60,47,115,116,69,118,116,58,97,99,116,105,111,110,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,114,100,102,58,108,105,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,114,100,102,58,83,101,113,62,10, +32,32,32,32,32,32,32,32,32,60,47,120,109,112,77,77,58,72,105,115,116,111, +114,121,62,10,32,32,32,32,32,32,32,32,32,60,120,109,112,77,77,58,73,110, +115,116,97,110,99,101,73,68,62,120,109,112,46,105,105,100,58,102,49,101, +57,100,97,50,102,45,97,99,51,50,45,52,99,98,48,45,57,55,102,48,45,48,49, +100,48,51,100,55,51,97,57,57,49,60,47,120,109,112,77,77,58,73,110,115,116, +97,110,99,101,73,68,62,10,32,32,32,32,32,32,32,32,32,60,120,109,112,77, +77,58,68,111,99,117,109,101,110,116,73,68,62,97,100,111,98,101,58,100,111, +99,105,100,58,112,104,111,116,111,115,104,111,112,58,56,97,97,98,50,99, +102,99,45,54,102,98,100,45,49,49,55,97,45,98,98,54,53,45,56,49,99,52,55, +101,98,56,50,56,51,97,60,47,120,109,112,77,77,58,68,111,99,117,109,101, +110,116,73,68,62,10,32,32,32,32,32,32,32,32,32,60,120,109,112,58,67,114, +101,97,116,101,68,97,116,101,62,50,48,49,54,45,48,49,45,51,48,84,50,51, +58,50,49,58,51,56,43,48,55,58,48,48,60,47,120,109,112,58,67,114,101,97, +116,101,68,97,116,101,62,10,32,32,32,32,32,32,32,32,32,60,120,109,112,58, +77,101,116,97,100,97,116,97,68,97,116,101,62,50,48,49,55,45,48,53,45,48, +50,84,48,55,58,48,54,58,52,51,45,48,53,58,48,48,60,47,120,109,112,58,77, +101,116,97,100,97,116,97,68,97,116,101,62,10,32,32,32,32,32,32,32,32,32, +60,120,109,112,58,77,111,100,105,102,121,68,97,116,101,62,50,48,49,55,45, +48,53,45,48,50,84,48,55,58,48,54,58,52,51,45,48,53,58,48,48,60,47,120,109, +112,58,77,111,100,105,102,121,68,97,116,101,62,10,32,32,32,32,32,32,32, +32,32,60,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,62,65, +100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48, +49,53,32,40,77,97,99,105,110,116,111,115,104,41,60,47,120,109,112,58,67, +114,101,97,116,111,114,84,111,111,108,62,10,32,32,32,32,32,32,60,47,114, +100,102,58,68,101,115,99,114,105,112,116,105,111,110,62,10,32,32,32,60, +47,114,100,102,58,82,68,70,62,10,60,47,120,58,120,109,112,109,101,116,97, +62,10,0,83,152,155,0,0,7,223,73,68,65,84,88,9,173,22,11,108,83,215,245, +222,247,177,29,199,6,226,12,6,221,80,51,186,73,91,70,129,192,250,91,200, +112,9,93,168,180,49,104,107,135,16,10,161,65,129,46,85,171,49,9,117,25, +133,71,53,208,152,166,10,74,203,70,129,162,82,17,168,61,173,27,203,200, +232,66,49,13,91,153,0,69,136,128,86,65,248,117,124,18,19,199,241,247,253, +239,206,121,206,203,28,22,178,21,184,210,245,185,247,156,243,206,255,156, +107,66,238,243,146,36,137,27,78,228,157,240,195,241,222,53,46,79,9,247, +235,21,239,215,108,110,220,191,30,33,8,180,140,202,163,15,234,160,131,167, +123,60,160,112,216,166,84,255,134,111,140,227,129,182,81,133,190,50,198, +24,161,148,146,68,58,214,17,87,175,207,145,118,173,138,217,124,182,186, +97,195,101,19,191,8,44,61,91,106,57,227,225,198,191,85,228,25,87,150,206, +36,229,180,156,210,17,226,29,241,40,207,230,179,101,223,167,8,48,144,67, +217,11,243,86,123,39,143,47,235,114,136,206,177,166,105,50,80,130,242,25, +199,113,84,213,148,104,231,205,142,135,222,61,240,171,36,160,44,126,52, +66,192,159,123,93,16,105,8,53,33,133,154,155,234,134,73,4,158,145,156,126, +91,50,35,136,31,110,221,115,10,36,191,36,96,158,113,109,109,149,18,170, +42,127,226,18,220,224,36,83,160,6,116,216,154,219,225,37,138,150,109,71, +239,67,129,16,143,209,178,141,25,222,0,168,29,155,97,36,104,21,84,68,210, +129,135,73,53,219,191,132,188,107,62,173,175,237,142,95,59,203,81,209,37, +114,78,129,50,206,113,51,246,175,200,107,123,150,7,145,222,87,212,55,68, +231,16,69,129,80,128,15,5,194,38,56,100,21,112,48,28,224,194,193,176,129, +31,222,190,236,106,222,240,252,206,133,60,231,122,141,35,116,130,201,204, +30,157,168,63,91,179,167,254,195,166,234,45,203,157,156,115,44,100,219, +39,240,66,146,231,132,164,166,43,109,107,247,174,56,99,127,139,50,7,13, +144,24,180,17,149,172,68,213,135,170,124,187,130,135,98,200,144,143,199, +59,46,12,187,4,158,175,175,217,81,83,236,25,215,108,152,58,209,77,141,240, +156,72,68,222,65,122,211,183,106,215,238,93,214,252,122,205,142,197,78, +209,253,78,161,211,83,64,41,71,178,106,154,200,90,170,113,205,222,229,219, +48,21,193,112,208,176,12,64,207,209,211,23,255,80,89,225,112,11,111,114, +60,125,208,52,216,21,53,67,94,254,205,252,67,237,54,157,96,106,114,38,91, +57,252,69,237,123,231,220,142,194,111,129,103,42,248,34,130,109,154,83, +112,58,82,74,170,35,174,244,212,77,240,150,156,134,236,64,1,106,26,230, +157,163,156,3,29,232,83,186,31,222,248,193,43,157,24,9,28,30,86,152,87, +238,243,151,136,110,250,113,193,24,126,26,225,204,34,132,162,219,248,184, +110,183,191,4,141,67,35,64,57,131,136,88,38,52,46,216,88,76,76,54,94,211, +84,194,12,38,66,219,81,102,152,162,166,67,73,152,204,235,230,61,75,40,196, +31,232,26,51,153,200,76,211,97,24,186,42,130,13,2,43,248,33,26,66,200,44, +142,35,179,34,86,81,208,66,82,237,26,45,8,153,164,42,27,224,62,66,39,220, +11,138,233,34,100,69,35,234,119,86,249,236,52,189,253,251,166,152,170,42, +221,20,166,172,9,149,14,70,128,30,166,225,93,53,212,110,205,208,111,97, +123,98,59,230,111,3,218,209,212,7,90,50,50,48,163,81,129,166,155,20,20, +67,245,1,195,192,102,196,32,134,170,39,150,133,42,74,95,60,232,63,227,154, +168,92,0,216,177,50,60,215,143,209,200,178,212,38,176,21,131,235,0,37,20, +161,161,27,36,157,77,111,238,75,247,238,207,202,25,130,222,3,77,197,13, +103,71,90,78,146,126,53,126,16,117,18,255,81,147,247,127,237,50,137,68, +8,251,70,249,87,110,48,65,111,116,120,65,136,102,82,161,128,10,201,104, +54,147,137,113,91,221,99,201,97,119,145,240,85,16,94,224,28,197,143,215, +77,121,241,148,202,135,247,190,253,203,183,142,76,249,250,99,87,116,213, +40,213,13,93,144,181,204,213,132,210,183,234,141,150,85,251,78,94,136,196, +167,149,204,236,23,168,99,46,132,157,135,200,240,170,174,146,132,220,247, +147,45,127,94,253,199,0,20,225,182,109,141,230,144,34,172,121,247,209,217, +174,81,220,22,194,147,7,97,132,92,207,222,96,213,158,137,98,133,119,130, +184,85,78,104,50,216,236,132,173,56,61,130,43,213,163,189,186,107,254,223, +55,161,35,176,232,242,202,166,113,59,15,111,236,129,51,195,186,90,39,173, +131,10,160,108,229,211,175,151,121,136,247,7,200,148,34,201,150,223,182, +174,237,96,48,138,145,134,184,193,37,73,144,188,129,85,37,61,225,131,163, +53,166,151,132,31,109,122,169,125,38,91,241,209,119,179,13,135,158,48,27, +0,190,116,108,38,171,11,61,246,42,178,215,73,117,174,129,207,44,144,155, +116,57,12,122,153,79,195,243,237,184,255,188,5,235,128,42,33,11,33,15,149, +58,161,173,8,78,56,146,238,165,97,34,200,235,33,5,46,35,11,115,190,128, +115,37,122,84,35,113,147,133,145,126,121,214,82,93,98,187,97,134,80,83, +98,140,59,135,125,151,107,85,18,134,62,199,104,144,200,128,115,126,98,74, +82,240,191,7,155,213,98,32,108,241,190,233,21,75,255,52,163,163,174,101, +70,28,225,243,161,71,102,161,146,192,142,105,79,213,126,48,253,76,237,239, +202,226,8,3,59,166,207,70,124,195,246,237,216,251,214,90,212,210,94,100, +159,37,137,13,70,211,198,221,9,82,12,61,108,115,225,238,199,75,196,98,249, +60,244,191,160,166,77,226,40,228,136,220,111,104,122,84,252,102,243,11, +39,46,130,0,58,111,195,228,113,7,126,222,217,141,194,164,35,71,4,233,201, +39,245,133,173,29,37,162,207,183,7,158,220,169,48,11,78,107,177,216,146, +253,79,151,93,198,104,96,84,238,164,216,198,195,28,240,91,214,114,158,108, +181,115,52,21,228,164,102,205,1,132,142,81,84,52,11,213,0,50,55,156,156, +33,216,202,49,98,235,252,126,43,148,194,152,162,247,11,39,76,172,32,188, +80,136,16,239,182,240,255,7,114,145,1,46,13,90,207,48,12,98,66,239,219, +27,239,48,56,114,25,61,5,140,185,236,210,111,7,66,80,198,148,5,66,127,241, +153,132,77,77,71,187,129,205,100,233,232,77,24,51,108,234,130,247,218,138, +45,239,25,254,241,24,121,113,254,163,17,43,76,169,91,44,156,140,42,6,117, +48,151,105,24,20,97,10,238,136,71,17,15,220,56,101,72,208,62,16,90,138, +194,3,140,193,251,49,55,166,102,179,103,132,209,99,120,28,68,14,223,88, +94,147,149,211,31,46,157,211,219,112,146,137,4,140,28,89,61,76,66,204,127, +32,68,248,214,151,59,187,148,24,249,126,170,91,235,84,51,70,63,66,25,238, +136,151,24,86,49,35,168,24,55,22,92,152,82,43,5,153,158,235,203,250,47, +157,63,174,102,211,217,248,197,243,31,169,215,62,255,49,40,165,239,124, +135,194,3,244,5,86,78,73,238,131,202,13,147,191,108,127,154,43,210,92,85, +207,111,253,180,228,185,191,93,250,36,120,252,106,63,194,103,91,78,76,178, +249,202,203,203,189,207,182,157,123,37,240,143,207,175,4,142,95,141,62, +119,244,179,159,34,13,139,209,230,249,159,16,35,145,207,100,223,109,33, +207,28,235,106,95,114,73,99,193,19,215,116,132,207,180,119,181,219,252, +11,14,159,157,93,251,89,154,45,60,29,101,213,29,221,172,246,159,41,246, +163,191,118,86,33,29,74,102,136,92,251,27,132,67,172,11,7,161,2,113,13, +140,18,235,62,144,243,42,40,56,72,232,212,76,180,7,10,142,49,132,240,192, +79,153,215,220,102,69,203,36,220,83,6,60,197,186,162,100,225,249,207,194, +211,75,8,207,127,15,197,93,156,116,106,136,30,196,217,107,120,2,188,116, +54,131,85,72,96,196,33,40,56,67,86,160,224,138,120,248,191,70,17,106,89, +185,243,192,162,57,214,92,48,146,253,237,168,20,254,131,23,224,198,14,82, +83,169,99,40,103,210,197,25,119,156,7,195,27,48,168,61,119,144,160,168, +240,164,220,184,186,52,113,249,194,113,53,157,202,34,212,224,142,120,63, +12,165,150,249,143,31,76,95,233,106,82,226,241,94,220,120,110,157,247,72, +43,1,99,195,193,92,193,34,239,93,175,252,241,90,185,185,57,175,72,165,33, +78,148,175,222,228,197,125,215,138,70,250,208,50,2,60,178,120,0,218,197, +105,127,147,95,108,249,103,155,126,255,160,109,196,112,18,145,54,18,253, +182,111,254,13,86,98,75,173,41,57,76,70,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_46 = 10712; +static unsigned char xml_res_file_46[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, +108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, +92,114,206,105,201,57,131,228,40,32,203,146,147,100,21,5,17,17,37,137,130, +18,69,4,37,75,48,145,4,36,169,136,138,128,2,70,36,131,138,136,2,102,224, +29,126,190,225,222,187,170,171,187,127,239,120,170,122,251,91,207,204,116, +247,78,239,214,247,249,76,13,0,18,102,148,136,136,80,4,3,0,97,225,49,81, +246,166,6,36,87,55,119,18,246,45,160,5,116,112,227,5,40,10,53,58,66,223, +214,214,10,192,241,143,254,223,227,235,56,128,118,250,167,50,59,99,253, +215,227,255,109,48,250,250,69,83,1,128,108,97,29,230,27,77,13,131,117,55, +172,245,168,17,81,49,0,32,118,206,17,58,16,19,177,163,133,97,205,18,5,47, +16,214,228,29,29,240,71,239,172,137,197,231,143,246,254,235,28,71,123,67, +88,195,215,224,104,41,148,168,0,0,8,73,112,158,20,71,13,128,115,132,75, +0,96,152,194,125,131,194,1,96,184,9,0,135,14,53,144,226,11,128,248,58,124, +142,116,88,216,126,88,75,144,96,45,238,243,31,198,9,248,183,49,125,254, +57,38,133,18,240,79,253,231,187,252,21,204,14,138,202,6,74,106,242,36,67, +74,104,144,79,20,37,198,207,247,127,121,103,254,7,17,22,26,251,143,249, +118,118,128,214,47,220,201,1,238,119,238,19,15,112,0,138,64,25,24,0,37, +160,6,228,1,9,24,2,10,8,5,65,192,7,68,193,42,6,248,1,223,24,191,131,49, +59,23,27,238,143,56,20,21,20,16,24,67,210,135,119,208,143,100,30,78,149, +149,38,41,202,43,168,0,176,243,123,248,51,197,26,219,95,179,64,108,131, +255,202,121,194,251,166,68,3,39,39,255,149,139,64,3,112,199,17,0,98,235, +191,114,18,240,253,33,150,1,208,151,79,141,141,138,251,147,67,237,124,160, +1,1,208,3,22,192,9,248,128,16,16,7,50,240,170,85,129,38,208,3,198,192,2, +216,0,71,224,6,188,0,21,4,130,48,120,221,7,192,17,112,12,164,130,12,112, +6,156,7,69,160,20,92,6,213,160,30,92,7,45,160,3,244,128,123,224,33,24,6, +99,224,21,152,2,243,224,3,88,5,95,193,47,8,130,176,16,17,98,134,56,33,126, +72,4,146,130,20,33,50,164,3,25,67,86,144,61,228,6,121,67,1,80,56,20,11, +29,129,142,67,25,80,14,84,4,149,65,53,208,53,168,13,234,129,30,64,35,208, +11,104,26,122,7,125,129,126,34,144,8,90,4,11,130,23,33,138,144,67,144,17, +250,8,75,132,35,194,19,17,128,136,68,196,35,82,16,167,17,5,136,114,196, +85,68,51,162,7,241,16,49,134,152,66,124,64,108,32,1,146,6,201,134,20,64, +202,32,201,72,67,164,13,210,29,233,143,140,66,38,34,211,145,121,200,114, +100,3,178,29,121,31,249,20,57,133,92,70,254,64,97,80,204,40,18,74,6,165, +137,50,67,57,161,168,168,72,84,34,42,19,85,132,170,70,53,163,250,81,79, +81,211,168,85,212,22,154,136,230,65,75,161,53,208,230,104,87,116,0,250, +0,58,21,157,135,174,68,223,66,223,69,143,161,231,209,95,49,24,12,27,70, +12,163,134,49,195,184,97,130,49,135,49,153,152,18,76,35,166,27,51,130,153, +197,108,96,177,88,78,172,20,86,27,107,131,165,96,99,176,169,216,66,236, +85,236,29,236,40,118,30,251,29,71,131,227,199,41,226,76,112,238,184,112, +92,50,46,15,87,139,235,194,141,226,22,113,191,240,12,120,17,188,6,222,6, +239,139,63,132,207,198,95,193,183,227,159,224,231,241,191,8,140,4,49,130, +54,193,145,16,76,56,70,40,32,52,16,238,18,94,19,214,104,104,104,4,105,212, +105,236,104,130,104,146,104,10,104,154,104,6,104,166,105,126,208,50,209, +74,210,26,210,122,208,198,210,158,166,173,162,237,166,125,65,187,70,36, +18,69,137,122,68,119,98,12,241,52,177,134,216,71,156,36,126,167,99,166, +147,165,51,167,243,165,59,74,87,76,215,76,55,74,183,66,143,167,23,161,215, +167,247,162,143,167,207,163,191,65,255,132,126,153,1,207,32,202,96,200, +64,97,72,100,40,102,104,99,152,96,216,96,100,102,84,96,180,97,12,99,204, +100,172,101,124,192,184,196,132,101,18,101,50,102,242,101,74,97,186,204, +212,199,52,203,140,100,22,98,54,100,166,50,31,103,190,194,124,151,121,158, +5,195,34,198,98,206,18,204,146,193,82,207,50,196,178,202,202,196,170,204, +234,204,122,144,181,152,181,147,117,138,13,201,38,202,102,206,22,202,150, +205,118,157,109,156,237,39,59,47,187,62,187,31,123,26,123,3,251,40,251, +55,14,110,14,61,14,63,142,116,142,70,142,49,142,159,156,36,78,99,206,16, +206,179,156,45,156,111,184,80,92,146,92,118,92,7,184,46,114,221,229,90, +230,102,225,214,228,166,114,167,115,95,231,126,201,131,224,145,228,177, +231,57,204,115,153,231,17,207,6,47,31,175,41,111,4,111,33,111,31,239,50, +31,27,159,30,95,48,223,57,190,46,190,119,252,204,252,58,252,65,252,231, +248,239,240,191,39,177,146,244,73,161,164,2,82,63,105,85,128,71,192,76, +32,86,160,76,96,72,224,151,160,152,160,147,96,178,96,163,224,27,33,130, +16,89,200,95,232,156,80,175,208,170,48,191,176,181,240,17,225,58,225,151, +34,120,17,178,72,160,72,190,200,125,145,111,162,98,162,46,162,39,69,91, +68,151,196,56,196,204,197,226,197,234,196,94,139,19,197,117,197,35,197, +203,197,159,73,96,36,200,18,33,18,37,18,195,146,8,73,21,201,64,201,98,201, +39,82,8,41,85,169,32,169,18,169,17,105,180,180,186,116,184,116,185,244, +132,12,173,140,190,76,156,76,157,204,180,44,155,172,149,108,178,108,139, +236,138,156,176,156,187,220,89,185,251,114,91,242,42,242,161,242,87,228, +95,41,48,41,88,40,36,43,180,43,124,81,148,84,164,42,22,43,62,83,34,42,153, +40,29,85,106,85,250,172,44,165,236,167,124,81,249,185,10,179,138,181,202, +73,149,94,149,77,85,53,213,40,213,6,213,119,106,194,106,222,106,23,212, +38,200,44,100,91,114,38,121,64,29,173,110,160,126,84,189,67,253,135,134, +170,70,140,198,117,141,79,154,50,154,33,154,181,154,75,90,98,90,126,90, +87,180,102,181,5,181,41,218,101,218,83,58,36,29,111,157,75,58,83,186,2, +186,20,221,114,221,25,61,33,61,95,189,74,189,69,125,9,253,96,253,171,250, +43,6,242,6,81,6,183,12,190,25,106,24,38,24,118,27,33,141,76,141,210,141, +134,140,153,140,157,140,139,140,39,77,4,77,2,76,234,76,86,77,85,76,15,155, +118,155,161,205,44,205,206,154,77,152,243,154,83,205,107,204,87,45,212, +44,18,44,250,45,105,45,29,44,139,44,103,172,36,173,162,172,218,173,17,214, +22,214,185,214,175,247,136,236,9,223,211,98,3,108,204,109,114,109,222,216, +138,217,70,218,222,182,195,216,217,218,21,219,45,216,43,216,31,177,191, +239,192,236,176,207,161,214,225,171,163,129,99,182,227,43,39,113,167,88, +167,94,103,122,103,15,231,26,231,111,46,70,46,57,46,83,174,114,174,9,174, +15,221,184,220,130,220,90,221,177,238,206,238,149,238,27,123,141,247,158, +223,59,239,161,226,145,234,49,238,41,230,121,208,243,129,23,151,87,168, +87,231,62,250,125,148,125,55,188,209,222,46,222,181,222,191,41,54,148,114, +202,134,143,185,207,5,159,85,170,33,53,159,250,193,87,207,247,156,239,59, +63,109,191,28,191,69,127,109,255,28,255,165,0,237,128,220,128,119,129,186, +129,121,129,203,65,134,65,69,65,159,131,205,130,75,131,191,133,216,132, +84,133,108,135,186,132,54,134,225,194,188,195,218,194,153,194,67,194,251, +247,243,237,63,184,127,36,66,42,34,53,98,42,82,35,242,124,228,106,148,101, +84,101,52,20,237,25,221,26,195,2,27,239,163,88,241,216,19,177,211,113,58, +113,197,113,223,15,56,31,184,113,144,241,96,248,193,71,135,36,15,165,29, +90,140,55,137,175,56,140,58,76,61,220,123,68,224,200,177,35,211,9,250,9, +101,137,80,162,79,98,239,81,161,163,41,71,231,147,76,147,170,143,17,142, +133,28,123,156,44,159,156,147,188,126,220,229,120,123,10,111,74,82,202, +236,9,211,19,117,169,116,169,81,169,19,39,53,79,150,158,66,157,10,58,53, +148,166,148,86,152,182,149,238,155,62,152,33,159,145,151,241,59,147,154, +57,152,165,144,85,144,181,125,218,255,244,80,182,106,246,197,51,152,51, +225,103,198,207,234,158,173,206,97,204,137,207,153,205,181,206,109,62,71, +58,151,126,110,253,252,190,243,15,242,148,243,74,243,9,249,177,249,83,5, +86,5,173,133,194,133,103,10,127,23,5,22,141,21,27,20,55,94,224,185,144, +118,225,91,137,111,201,232,69,189,139,13,165,188,165,25,165,63,47,5,93, +122,94,102,90,214,92,46,90,158,119,25,115,57,238,242,194,21,231,43,247, +43,200,21,53,149,92,149,25,149,155,85,225,85,83,213,246,213,253,53,106, +53,53,181,60,181,217,117,136,186,216,186,119,87,61,174,14,215,27,213,183, +54,200,52,148,53,178,53,102,52,129,166,216,166,247,215,188,175,141,95,183, +188,222,123,131,124,163,225,166,200,205,11,183,152,111,165,55,67,205,135, +154,87,91,2,91,166,90,221,90,71,218,44,218,122,219,53,219,111,221,150,189, +93,213,33,208,81,220,201,218,153,221,69,232,74,233,218,190,19,127,103,163, +59,162,123,185,39,160,103,182,119,95,239,171,62,215,190,103,253,118,253, +67,119,45,239,14,220,51,185,215,119,95,255,254,157,1,237,129,142,7,26,15, +218,6,201,131,45,15,85,31,54,63,82,121,116,235,177,202,227,91,67,170,67, +205,79,212,158,180,14,171,15,183,143,104,141,116,141,234,142,246,60,53, +122,122,239,153,249,179,135,99,123,198,70,198,157,198,159,79,120,76,76, +61,247,125,190,244,34,244,197,231,151,113,47,127,189,74,122,141,126,157, +254,134,225,77,222,36,207,100,249,91,137,183,141,83,170,83,157,211,70,211, +143,102,28,102,94,205,82,103,63,204,69,207,253,158,79,89,32,46,228,45,242, +47,214,44,41,46,117,188,51,121,55,252,126,239,251,249,15,17,31,126,45,167, +126,100,252,120,97,69,124,229,230,39,189,79,143,86,93,87,231,63,71,125, +222,254,146,185,198,185,86,181,174,188,222,187,97,187,49,249,53,236,235, +175,111,233,223,57,191,87,255,32,255,184,255,211,229,231,226,175,3,191, +177,191,11,54,37,54,219,183,44,183,94,111,135,109,111,71,80,162,40,127, +149,2,72,184,33,252,253,1,248,82,5,215,9,110,112,249,52,12,215,84,116,127, +234,181,191,7,18,250,83,14,22,66,106,208,16,34,8,73,68,86,163,60,208,16, +186,3,227,143,101,195,62,194,157,196,147,241,43,132,10,26,47,90,46,218, +113,226,121,58,107,122,122,250,65,134,52,70,43,38,60,211,16,115,22,139, +35,43,27,235,75,182,139,236,126,28,82,28,107,156,237,92,39,184,173,120, +88,121,166,121,235,248,226,248,13,73,12,164,73,129,58,193,195,66,230,194, +28,194,75,34,109,162,153,98,30,226,242,18,72,137,9,201,90,169,4,105,123, +25,113,153,45,217,167,114,181,242,73,10,46,138,114,74,88,165,73,229,22, +149,108,213,0,53,61,50,23,121,93,253,177,70,149,102,178,150,167,54,89,135, +69,103,85,247,177,94,173,254,41,3,127,67,19,35,17,99,140,241,162,201,128, +105,173,217,105,243,72,11,23,75,45,43,33,107,130,245,250,158,87,54,189, +182,213,118,167,237,163,28,92,28,53,157,248,157,145,206,243,46,15,92,175, +186,157,113,143,222,235,234,161,229,41,224,133,245,250,184,111,204,187, +147,82,229,147,67,77,244,13,241,219,235,111,21,160,23,168,26,36,23,44,25, +34,25,42,29,166,20,174,179,127,79,4,53,242,64,84,102,116,121,76,75,236, +163,184,217,3,63,14,49,196,139,29,214,61,226,146,176,63,241,212,209,178, +164,219,199,198,146,63,165,16,78,136,164,234,159,244,58,117,56,45,63,189, +57,227,89,230,218,105,230,108,165,51,14,103,99,115,242,115,219,206,189, +201,3,249,34,5,22,133,17,69,121,197,93,23,230,47,210,151,146,47,249,148, +101,149,183,93,94,168,96,169,52,168,138,172,46,175,121,90,135,190,170,94, +31,222,80,209,248,230,26,219,117,219,27,153,55,7,154,49,45,70,173,199,219, +250,110,163,59,76,59,211,186,30,119,51,244,56,245,22,246,189,189,43,124, +47,248,126,211,192,215,65,205,135,199,30,221,31,162,125,98,59,124,126,228, +249,83,238,103,158,99,165,227,111,159,243,189,240,124,89,252,234,197,27, +246,73,167,183,185,83,35,51,244,179,214,115,25,243,3,139,152,37,163,119, +201,239,187,63,108,125,212,90,137,255,212,182,250,253,139,218,90,220,250, +173,141,141,111,42,223,99,127,52,255,252,246,155,188,25,191,213,177,189, +189,187,255,187,251,191,187,255,255,159,247,255,15,183,239,4,135,42,0,101, +48,87,186,117,3,224,4,247,37,112,19,215,131,253,3,62,182,243,56,193,81, +15,64,53,186,255,108,72,212,223,31,39,252,69,203,16,172,145,48,130,98,0, +22,224,1,13,124,17,61,96,2,172,128,29,112,193,36,42,0,68,96,22,149,134, +185,89,5,168,3,29,152,157,205,128,53,176,7,174,192,19,102,209,32,16,1,226, +64,2,72,129,57,52,7,20,130,50,80,3,154,64,27,204,159,15,192,40,204,158, +115,224,35,248,10,79,129,135,153,147,23,18,135,121,83,27,50,133,89,211, +19,10,130,98,160,36,40,19,42,128,174,64,77,80,39,52,8,77,64,115,208,103, +104,11,38,75,46,132,56,66,21,97,132,176,71,80,16,17,136,163,48,79,150,32, +234,17,157,136,199,136,55,136,143,136,77,36,29,146,15,41,135,212,67,218, +35,169,200,88,100,42,178,0,89,139,236,68,62,65,206,32,215,81,88,20,23,74, +22,165,15,83,99,16,42,1,117,22,85,129,106,67,13,161,102,81,223,97,90,20, +68,147,209,214,104,42,250,16,58,27,93,129,238,64,143,162,223,97,0,134,29, +35,135,49,193,120,97,98,49,89,152,10,76,23,102,28,243,9,139,195,146,176, +26,88,7,108,40,204,133,151,176,109,216,103,216,21,28,14,39,132,211,198, +185,226,162,113,217,48,15,222,197,77,227,54,241,156,120,21,188,29,62,28, +159,129,175,194,247,227,103,240,219,4,30,130,6,193,149,16,71,56,71,184, +78,24,33,124,162,161,163,145,161,177,162,9,161,201,160,169,165,25,164,121, +79,75,128,217,207,146,54,132,54,147,182,158,118,136,246,19,145,129,168, +72,116,36,198,17,11,136,237,196,215,196,109,58,1,58,35,186,0,186,116,186, +6,186,17,186,13,122,78,122,109,122,10,125,42,125,45,204,122,235,12,156, +12,58,12,84,134,52,134,70,134,49,134,95,140,2,140,166,140,225,140,231,24, +111,51,206,192,255,107,5,38,87,166,36,166,106,166,97,166,239,204,36,102, +115,230,72,230,34,230,62,230,101,22,86,22,93,150,64,150,28,150,14,150,5, +86,6,86,13,86,63,214,108,214,118,214,121,54,6,54,77,182,0,182,28,182,46, +182,247,236,172,236,6,236,225,236,69,236,247,217,215,56,72,28,214,28,241, +28,85,28,99,156,8,78,121,78,79,206,12,206,54,206,37,46,54,46,35,174,104, +174,114,174,97,174,109,110,89,110,47,238,44,238,14,238,101,30,30,30,75, +152,227,234,120,94,243,210,242,106,241,134,241,150,240,14,241,110,243,201, +243,81,248,114,248,250,249,54,248,197,248,93,249,211,249,59,248,87,72,36, +146,61,41,133,212,66,122,47,192,43,96,39,144,34,208,42,176,44,72,130,233, +45,77,176,75,112,77,72,66,200,11,102,183,65,97,32,172,42,28,38,124,25,38, +55,70,17,115,145,36,145,86,145,85,81,113,81,111,209,66,209,17,49,130,152, +161,88,130,88,179,216,170,184,132,56,85,188,68,252,185,4,147,132,181,196, +41,137,94,137,45,73,117,201,24,201,38,201,101,41,113,41,95,169,75,82,175, +165,57,165,157,164,115,164,159,192,180,102,46,115,82,166,95,22,33,171,43, +155,32,123,91,246,135,156,154,92,156,220,77,185,53,121,5,249,8,249,70,249, +21,5,25,133,80,133,58,133,247,138,18,138,65,138,213,138,75,74,98,74,1,74, +85,74,11,202,162,202,254,202,149,202,11,42,162,42,254,42,149,42,11,170, +162,170,254,170,149,170,11,106,162,106,254,106,149,106,139,100,49,114,0, +185,138,188,168,46,166,30,160,94,165,190,168,33,170,225,175,81,169,177, +160,41,162,233,167,121,69,115,78,75,72,203,71,171,76,107,74,155,95,219, +75,251,130,246,43,29,78,29,87,157,60,157,103,186,76,186,54,186,89,186,131, +122,88,61,99,189,100,189,59,122,155,250,26,250,7,245,155,245,215,13,20, +13,34,12,26,12,62,26,74,25,6,27,214,24,46,26,137,26,249,25,85,24,205,25, +11,25,83,141,203,141,103,96,74,163,152,148,153,204,152,10,154,250,152,150, +155,206,154,9,155,249,154,85,152,45,152,139,153,7,194,156,246,193,66,218, +34,220,162,209,226,179,165,146,101,172,101,139,229,15,43,77,171,4,171,110, +152,212,140,173,79,89,63,220,67,183,199,110,207,185,61,19,54,92,54,94,54, +101,54,243,182,18,182,161,182,77,182,235,118,100,187,4,187,30,123,180,189, +133,253,105,251,167,14,28,14,158,14,229,14,139,142,210,142,145,142,205, +142,191,157,244,157,78,58,61,118,102,118,118,117,190,232,60,231,34,229, +18,233,210,226,178,229,106,228,154,225,58,234,198,225,182,207,173,210,237, +163,187,178,251,17,247,190,189,52,123,237,247,22,237,157,246,144,240,136, +244,104,243,132,60,205,61,207,122,190,244,18,244,10,246,186,225,245,123, +159,209,190,172,125,227,222,252,222,129,222,215,188,127,82,140,40,89,148, +9,31,146,79,176,207,77,159,77,170,41,245,44,245,149,175,136,111,132,111, +187,31,202,207,198,175,208,111,206,95,206,255,144,127,127,0,125,128,123, +64,69,192,106,160,86,224,201,192,209,32,190,160,160,160,91,193,80,176,85, +112,65,240,92,136,124,200,145,144,129,80,214,80,74,104,125,232,207,48,147, +176,220,176,183,225,210,225,135,194,239,237,103,222,239,189,191,126,255, +207,8,211,136,243,17,51,145,114,145,9,145,131,81,28,81,254,81,55,96,142, +179,137,46,137,254,16,163,30,115,42,102,60,86,56,54,42,182,39,142,62,206, +43,174,62,238,215,1,139,3,133,7,150,14,170,29,76,61,56,118,72,248,80,244, +161,222,120,166,120,74,252,181,195,224,176,237,225,210,195,159,142,232, +30,201,62,50,153,32,155,144,152,48,148,200,159,184,63,241,206,81,250,163, +251,142,54,37,129,36,187,164,178,164,47,199,12,142,229,30,155,75,86,78, +62,145,60,126,92,236,248,129,227,3,41,156,41,193,41,183,79,208,158,240, +60,209,112,98,59,213,54,181,44,245,203,73,195,147,231,79,46,156,82,59,149, +118,234,101,154,84,90,66,218,80,58,41,61,50,189,47,131,53,195,63,163,53, +147,144,185,55,179,62,115,59,203,46,235,114,214,198,105,211,211,133,167, +63,100,235,100,159,201,158,57,163,124,230,228,153,23,103,165,206,38,158, +29,206,17,202,137,203,25,200,229,206,13,207,237,57,199,114,46,224,92,219, +121,226,121,239,243,55,242,48,121,110,121,87,243,65,190,67,126,85,254,207, +130,61,5,101,5,27,133,230,133,37,133,159,139,140,138,10,138,62,22,235,23, +159,47,126,119,65,251,66,206,133,133,18,205,146,236,146,185,139,234,23, +179,46,206,148,170,149,102,150,78,95,82,189,148,121,105,186,76,181,44,179, +108,186,92,173,60,179,124,230,50,249,242,233,203,115,87,52,174,156,185, +178,80,161,93,145,91,241,174,82,175,50,191,242,99,149,81,85,113,213,151, +106,243,234,75,213,223,107,108,106,170,106,182,106,157,107,27,234,48,117, +94,117,205,87,233,174,250,95,237,170,103,175,143,168,31,104,16,104,136, +111,120,218,40,221,120,162,241,109,19,185,41,167,233,195,53,227,107,165, +215,126,92,119,188,222,112,3,119,131,122,163,243,38,199,205,232,155,67, +183,36,110,157,184,53,213,172,213,156,223,188,214,98,211,82,215,138,107, +245,109,237,105,227,109,139,111,155,104,87,110,207,105,255,116,219,250, +118,109,7,174,195,191,163,191,83,168,243,88,231,84,151,110,215,197,174, +205,59,30,119,58,186,185,187,15,119,191,234,209,236,41,238,249,213,235, +209,219,209,199,211,151,208,55,217,175,219,127,233,46,116,215,231,110,223, +61,145,123,169,247,150,238,91,220,175,27,32,14,236,31,24,125,160,252,32, +239,193,143,193,189,131,93,15,5,30,166,60,92,124,100,241,168,254,49,195, +227,152,199,19,67,154,67,165,79,16,79,252,159,12,14,203,14,231,14,127,27, +217,59,210,61,42,50,154,54,186,242,212,225,105,235,51,222,103,199,159,45, +141,89,143,221,24,231,28,79,28,159,155,176,152,104,122,206,246,60,225,249, +236,11,243,23,77,47,217,95,38,188,156,123,101,249,234,250,107,206,215,73, +175,151,222,216,188,105,153,228,155,76,157,92,121,235,244,182,115,74,100, +42,107,234,235,180,215,244,189,25,185,153,130,89,48,27,52,59,58,167,57, +119,101,158,56,31,55,255,118,193,124,225,250,34,207,98,234,226,167,37,183, +165,190,119,50,239,242,223,67,239,67,223,143,127,208,251,80,183,204,186, +156,180,252,225,163,243,199,158,21,233,149,252,79,136,79,97,159,158,175, +26,173,54,126,230,254,156,250,249,203,23,175,47,131,107,170,107,229,235, +116,235,241,235,11,27,14,27,119,190,74,127,45,248,134,254,22,245,109,242, +187,229,247,214,31,34,63,114,126,108,255,12,251,249,242,151,233,175,91, +191,5,127,159,249,189,181,25,178,249,98,203,116,235,214,182,208,246,217, +191,234,199,93,255,223,245,255,93,255,223,245,255,93,255,223,245,255,93, +255,223,245,255,93,255,223,245,255,93,255,223,245,255,93,255,223,245,255, +93,255,255,63,239,255,209,254,74,138,127,106,0,218,40,0,208,223,183,183, +215,120,1,192,182,3,176,25,181,189,253,171,100,123,123,243,10,0,200,23, +0,116,71,254,121,23,112,39,172,100,0,192,189,113,119,114,84,124,232,16, +245,232,63,191,135,247,55,155,183,225,119,50,24,122,205,0,0,0,9,112,72, +89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,13,191,105,84,88,116,88,77, +76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,120,58, +120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111, +98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107, +61,34,88,77,80,32,67,111,114,101,32,53,46,52,46,48,34,62,10,32,32,32,60, +114,100,102,58,82,68,70,32,120,109,108,110,115,58,114,100,102,61,34,104, +116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57, +47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35, +34,62,10,32,32,32,32,32,32,60,114,100,102,58,68,101,115,99,114,105,112, +116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,10,32,32,32, +32,32,32,32,32,32,32,32,32,120,109,108,110,115,58,116,105,102,102,61,34, +104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47, +116,105,102,102,47,49,46,48,47,34,10,32,32,32,32,32,32,32,32,32,32,32,32, +120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116, +116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104, +111,116,111,115,104,111,112,47,49,46,48,47,34,10,32,32,32,32,32,32,32,32, +32,32,32,32,120,109,108,110,115,58,101,120,105,102,61,34,104,116,116,112, +58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,101,120,105,102, +47,49,46,48,47,34,10,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,110, +115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114, +103,47,100,99,47,101,108,101,109,101,110,116,115,47,49,46,49,47,34,10,32, +32,32,32,32,32,32,32,32,32,32,32,120,109,108,110,115,58,120,109,112,77, +77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111, +109,47,120,97,112,47,49,46,48,47,109,109,47,34,10,32,32,32,32,32,32,32, +32,32,32,32,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116, +116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112, +47,49,46,48,47,115,84,121,112,101,47,82,101,115,111,117,114,99,101,69,118, +101,110,116,35,34,10,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,110, +115,58,120,109,112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111, +98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34,62,10,32,32,32,32, +32,32,32,32,32,60,116,105,102,102,58,82,101,115,111,108,117,116,105,111, +110,85,110,105,116,62,50,60,47,116,105,102,102,58,82,101,115,111,108,117, +116,105,111,110,85,110,105,116,62,10,32,32,32,32,32,32,32,32,32,60,116, 105,102,102,58,79,114,105,101,110,116,97,116,105,111,110,62,49,60,47,116, 105,102,102,58,79,114,105,101,110,116,97,116,105,111,110,62,10,32,32,32, -32,32,32,60,47,114,100,102,58,68,101,115,99,114,105,112,116,105,111,110, -62,10,32,32,32,60,47,114,100,102,58,82,68,70,62,10,60,47,120,58,120,109, -112,109,101,116,97,62,10,76,194,39,89,0,0,4,201,73,68,65,84,88,9,197,151, -59,75,107,89,20,199,247,137,70,163,70,137,140,88,136,194,248,230,98,41, -88,219,95,16,27,63,130,16,139,1,153,102,154,91,8,51,88,89,8,83,24,252,20, -162,204,84,22,214,130,165,133,111,80,176,114,48,163,81,163,209,156,249, -255,118,178,143,231,156,60,28,238,29,238,44,88,217,143,245,220,255,189, -246,217,59,198,252,207,228,125,16,255,35,249,7,230,53,98,191,102,166,201, -68,75,19,217,215,138,254,181,207,4,17,86,86,86,104,127,16,103,196,189,95, -201,216,226,195,250,12,181,234,26,3,196,176,191,176,176,144,126,124,124, -252,245,249,249,121,101,119,119,247,111,205,125,22,111,204,205,205,165, -223,222,222,128,206,19,25,245,205,217,217,153,25,29,29,53,45,45,45,198, -247,43,168,58,217,209,209,145,73,167,211,97,153,143,97,185,92,46,92,94, -94,102,111,111,111,255,148,47,144,120,19,155,86,126,160,187,187,187,182, -68,34,241,169,191,191,223,101,154,187,184,184,24,28,26,26,178,65,209,33, -160,146,52,27,27,27,102,105,105,201,116,118,118,6,50,217,154,98,177,104, -214,214,214,204,248,248,184,73,165,82,70,65,49,179,164,68,123,87,87,87, -115,74,224,71,77,16,220,46,60,72,160,181,181,85,58,126,113,98,98,162,36, -97,15,43,39,184,130,150,197,65,49,182,183,183,155,100,50,105,104,73,8,118, -228,100,109,109,109,86,7,116,96,37,231,11,89,53,137,180,116,217,202,191, -156,77,144,0,19,82,78,104,133,4,43,3,251,235,235,43,1,60,205,219,4,28,204, -172,140,173,168,218,216,54,46,67,39,140,64,85,151,253,170,24,90,171,247, -194,168,14,35,13,91,23,153,248,15,6,56,140,56,141,32,16,14,64,112,7,111, -56,17,230,24,179,231,80,35,153,147,163,67,31,14,235,50,15,53,76,0,136,31, -30,30,108,49,57,184,9,78,17,50,166,224,112,234,100,244,153,99,172,253,182, -206,221,22,32,43,149,74,129,174,21,86,127,106,18,184,185,185,177,162,211, -211,83,147,203,229,108,49,57,71,172,128,0,215,215,215,102,125,125,221,34, -68,145,65,200,208,83,149,27,157,30,155,156,147,185,4,10,133,130,213,13, -255,212,36,208,211,211,99,203,122,108,108,204,100,179,217,8,2,110,149,4, -31,25,25,177,39,193,37,135,140,149,19,116,121,121,57,114,12,65,14,217,254, -254,190,57,63,63,15,199,175,217,2,95,206,243,104,200,200,239,234,234,10, -234,192,89,17,8,135,28,185,240,89,103,190,106,103,58,58,58,44,114,206,134, -22,132,176,139,83,128,128,50,44,235,124,167,230,231,231,191,156,156,156, -176,146,84,245,24,218,85,57,39,108,1,171,100,229,142,157,83,198,200,208, -225,91,65,223,217,57,153,211,117,173,251,234,185,241,119,111,3,4,4,105, -66,89,22,183,182,182,126,35,139,225,225,225,159,5,89,7,253,240,241,1,70, -198,64,238,96,71,199,141,195,80,215,179,67,55,76,113,4,60,21,16,183,87, -70,48,122,28,43,142,15,45,252,242,242,98,158,158,158,130,163,230,230,93, -75,161,1,63,71,149,62,186,48,118,238,248,134,131,211,15,16,112,2,93,74, -124,42,125,110,53,46,22,246,146,253,131,88,17,253,122,71,13,25,193,243, -249,188,217,220,220,180,5,231,106,0,116,88,8,183,104,156,106,18,112,10, -221,221,221,246,86,11,39,128,35,86,134,227,122,71,141,85,18,124,113,113, -49,114,83,178,109,216,237,237,237,153,227,227,99,23,194,182,13,19,32,24, -199,44,158,0,86,56,172,119,212,208,71,198,53,205,141,24,38,230,225,56,197, -107,32,144,179,74,224,174,199,200,128,27,162,15,67,232,54,146,161,239,244, -172,114,245,167,97,2,146,87,188,134,181,191,189,143,207,136,223,248,22, -248,130,17,133,132,138,202,94,155,218,10,107,192,16,6,70,182,199,193,89, -85,179,169,53,145,249,146,121,178,195,103,100,31,2,4,244,213,147,47,47, -169,42,78,74,233,78,112,21,128,76,197,147,80,5,123,58,74,94,184,213,188, -135,13,45,44,136,57,182,86,199,141,177,129,37,75,92,93,93,153,157,157,157, -130,30,186,183,54,219,234,143,123,32,248,122,130,117,43,192,154,206,237, -47,170,214,124,95,95,223,231,193,193,193,156,146,74,43,17,80,32,65,187, -207,247,247,247,102,114,114,18,20,16,165,240,37,89,145,36,184,69,185,200, -64,163,98,102,236,234,183,183,183,185,10,179,226,63,196,160,16,121,25,105, -108,204,244,244,52,171,135,2,100,212,239,17,243,150,139,51,31,44,51,53, -53,245,5,166,47,98,46,174,199,24,31,142,194,190,163,31,162,131,131,3,30, -164,80,121,118,118,54,51,48,48,224,101,50,153,18,208,86,166,223,127,117, -109,219,55,1,47,96,232,240,240,208,126,27,244,33,243,132,222,187,162,122, -58,150,101,157,255,94,189,35,124,208,13,11,227,142,25,251,252,33,209,221, -253,187,250,35,226,103,65,25,201,58,228,128,55,191,221,2,233,20,53,31,247, -103,85,165,195,167,180,93,124,62,51,51,243,147,252,7,239,245,186,6,88,81, -19,42,166,36,207,117,198,141,72,58,214,25,151,89,35,29,230,41,88,233,148, -84,11,247,205,244,190,187,172,33,2,202,164,153,236,91,18,141,32,250,15, -155,96,209,13,138,0,157,146,0,0,0,0,73,69,78,68,174,66,96,130}; +32,32,32,32,32,32,60,112,104,111,116,111,115,104,111,112,58,73,67,67,80, +114,111,102,105,108,101,62,83,50,52,66,51,55,48,32,67,97,108,105,98,114, +97,116,101,100,60,47,112,104,111,116,111,115,104,111,112,58,73,67,67,80, +114,111,102,105,108,101,62,10,32,32,32,32,32,32,32,32,32,60,112,104,111, +116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101,62,51,60,47, +112,104,111,116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101, +62,10,32,32,32,32,32,32,32,32,32,60,112,104,111,116,111,115,104,111,112, +58,72,105,115,116,111,114,121,62,50,48,49,54,45,48,50,45,48,56,84,49,52, +58,53,56,58,51,50,45,48,55,58,48,48,38,35,120,57,59,70,105,108,101,32,49, +48,46,112,115,100,32,111,112,101,110,101,100,38,35,120,65,59,50,48,49,54, +45,48,50,45,48,56,84,49,52,58,53,56,58,51,55,45,48,55,58,48,48,38,35,120, +57,59,70,105,108,101,32,49,48,46,112,115,100,32,115,97,118,101,100,38,35, +120,65,59,50,48,49,55,45,48,53,45,48,50,84,48,55,58,48,48,58,50,53,45,48, +53,58,48,48,38,35,120,57,59,70,105,108,101,32,49,48,46,112,115,100,32,111, +112,101,110,101,100,38,35,120,65,59,50,48,49,55,45,48,53,45,48,50,84,48, +55,58,48,49,58,53,54,45,48,53,58,48,48,38,35,120,57,59,70,105,108,101,32, +99,108,117,115,116,101,114,50,46,112,115,100,32,115,97,118,101,100,38,35, +120,65,59,50,48,49,55,45,48,53,45,48,50,84,48,55,58,48,54,58,52,51,45,48, +53,58,48,48,38,35,120,57,59,70,105,108,101,32,99,108,117,115,116,101,114, +50,46,112,115,100,32,115,97,118,101,100,38,35,120,65,59,50,48,49,55,45, +48,53,45,48,51,84,49,48,58,52,54,58,50,52,45,48,53,58,48,48,38,35,120,57, +59,70,105,108,101,32,99,108,117,115,116,101,114,50,46,112,115,100,32,111, +112,101,110,101,100,38,35,120,65,59,50,48,49,55,45,48,53,45,48,51,84,49, +48,58,52,56,45,48,53,58,48,48,38,35,120,57,59,70,105,108,101,32,99,108, +117,115,116,101,114,50,95,98,119,46,112,115,100,32,115,97,118,101,100,38, +35,120,65,59,60,47,112,104,111,116,111,115,104,111,112,58,72,105,115,116, +111,114,121,62,10,32,32,32,32,32,32,32,32,32,60,101,120,105,102,58,80,105, +120,101,108,88,68,105,109,101,110,115,105,111,110,62,50,53,54,60,47,101, +120,105,102,58,80,105,120,101,108,88,68,105,109,101,110,115,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,60,101,120,105,102,58,67,111,108,111,114, +83,112,97,99,101,62,54,53,53,51,53,60,47,101,120,105,102,58,67,111,108, +111,114,83,112,97,99,101,62,10,32,32,32,32,32,32,32,32,32,60,101,120,105, +102,58,80,105,120,101,108,89,68,105,109,101,110,115,105,111,110,62,50,53, +54,60,47,101,120,105,102,58,80,105,120,101,108,89,68,105,109,101,110,115, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,60,100,99,58,102,111,114,109, +97,116,62,97,112,112,108,105,99,97,116,105,111,110,47,118,110,100,46,97, +100,111,98,101,46,112,104,111,116,111,115,104,111,112,60,47,100,99,58,102, +111,114,109,97,116,62,10,32,32,32,32,32,32,32,32,32,60,120,109,112,77,77, +58,79,114,105,103,105,110,97,108,68,111,99,117,109,101,110,116,73,68,62, +120,109,112,46,100,105,100,58,53,52,52,100,55,54,98,99,45,97,97,50,55,45, +52,54,55,98,45,97,55,101,101,45,55,97,101,56,48,53,49,52,51,48,55,50,60, +47,120,109,112,77,77,58,79,114,105,103,105,110,97,108,68,111,99,117,109, +101,110,116,73,68,62,10,32,32,32,32,32,32,32,32,32,60,120,109,112,77,77, +58,72,105,115,116,111,114,121,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,114,100,102,58,83,101,113,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,114,100,102,58,108,105,32,114,100,102,58,112,97,114,115,101, +84,121,112,101,61,34,82,101,115,111,117,114,99,101,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,115, +111,102,116,119,97,114,101,65,103,101,110,116,62,65,100,111,98,101,32,80, +104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,53,32,40,77,97,99, +105,110,116,111,115,104,41,60,47,115,116,69,118,116,58,115,111,102,116, +119,97,114,101,65,103,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,69,118,116,58,119,104,101,110,62,50,48, +49,54,45,48,49,45,51,48,84,50,51,58,50,49,58,51,56,43,48,55,58,48,48,60, +47,115,116,69,118,116,58,119,104,101,110,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,105,110,115,116, +97,110,99,101,73,68,62,120,109,112,46,105,105,100,58,53,52,52,100,55,54, +98,99,45,97,97,50,55,45,52,54,55,98,45,97,55,101,101,45,55,97,101,56,48, +53,49,52,51,48,55,50,60,47,115,116,69,118,116,58,105,110,115,116,97,110, +99,101,73,68,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,69,118,116,58,97,99,116,105,111,110,62,99,114,101,97,116,101, +100,60,47,115,116,69,118,116,58,97,99,116,105,111,110,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,114,100,102,58,108,105,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,100,102,58,108,105,32, +114,100,102,58,112,97,114,115,101,84,121,112,101,61,34,82,101,115,111,117, +114,99,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,69,118,116,58,115,111,102,116,119,97,114,101,65,103,101,110, +116,62,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67, +32,50,48,49,53,32,40,77,97,99,105,110,116,111,115,104,41,60,47,115,116, +69,118,116,58,115,111,102,116,119,97,114,101,65,103,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116, +58,99,104,97,110,103,101,100,62,47,60,47,115,116,69,118,116,58,99,104,97, +110,103,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,69,118,116,58,119,104,101,110,62,50,48,49,54,45,48,49,45, +51,48,84,50,51,58,50,50,58,53,50,43,48,55,58,48,48,60,47,115,116,69,118, +116,58,119,104,101,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,69,118,116,58,105,110,115,116,97,110,99,101,73,68, +62,120,109,112,46,105,105,100,58,98,48,54,97,101,100,99,55,45,55,50,54, +99,45,52,49,48,50,45,97,100,54,54,45,50,57,55,52,100,55,97,52,55,50,101, +102,60,47,115,116,69,118,116,58,105,110,115,116,97,110,99,101,73,68,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69, +118,116,58,97,99,116,105,111,110,62,115,97,118,101,100,60,47,115,116,69, +118,116,58,97,99,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,114,100,102,58,108,105,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,114,100,102,58,108,105,32,114,100,102,58,112,97, +114,115,101,84,121,112,101,61,34,82,101,115,111,117,114,99,101,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118, +116,58,115,111,102,116,119,97,114,101,65,103,101,110,116,62,65,100,111, +98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,53,32, +40,77,97,99,105,110,116,111,115,104,41,60,47,115,116,69,118,116,58,115, +111,102,116,119,97,114,101,65,103,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,99,104,97,110, +103,101,100,62,47,60,47,115,116,69,118,116,58,99,104,97,110,103,101,100, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +69,118,116,58,119,104,101,110,62,50,48,49,55,45,48,53,45,48,51,84,49,48, +58,52,56,45,48,53,58,48,48,60,47,115,116,69,118,116,58,119,104,101,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +69,118,116,58,105,110,115,116,97,110,99,101,73,68,62,120,109,112,46,105, +105,100,58,51,50,48,48,100,101,55,54,45,54,52,57,102,45,52,100,102,48,45, +97,48,57,57,45,52,102,54,48,54,101,50,55,102,56,102,56,60,47,115,116,69, +118,116,58,105,110,115,116,97,110,99,101,73,68,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,69,118,116,58,97,99,116, +105,111,110,62,115,97,118,101,100,60,47,115,116,69,118,116,58,97,99,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,114, +100,102,58,108,105,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,114, +100,102,58,83,101,113,62,10,32,32,32,32,32,32,32,32,32,60,47,120,109,112, +77,77,58,72,105,115,116,111,114,121,62,10,32,32,32,32,32,32,32,32,32,60, +120,109,112,77,77,58,73,110,115,116,97,110,99,101,73,68,62,120,109,112, +46,105,105,100,58,51,50,48,48,100,101,55,54,45,54,52,57,102,45,52,100,102, +48,45,97,48,57,57,45,52,102,54,48,54,101,50,55,102,56,102,56,60,47,120, +109,112,77,77,58,73,110,115,116,97,110,99,101,73,68,62,10,32,32,32,32,32, +32,32,32,32,60,120,109,112,77,77,58,68,111,99,117,109,101,110,116,73,68, +62,97,100,111,98,101,58,100,111,99,105,100,58,112,104,111,116,111,115,104, +111,112,58,56,97,102,52,55,100,57,48,45,55,48,48,48,45,49,49,55,97,45,98, +98,54,53,45,56,49,99,52,55,101,98,56,50,56,51,97,60,47,120,109,112,77,77, +58,68,111,99,117,109,101,110,116,73,68,62,10,32,32,32,32,32,32,32,32,32, +60,120,109,112,58,67,114,101,97,116,101,68,97,116,101,62,50,48,49,54,45, +48,49,45,51,48,84,50,51,58,50,49,58,51,56,43,48,55,58,48,48,60,47,120,109, +112,58,67,114,101,97,116,101,68,97,116,101,62,10,32,32,32,32,32,32,32,32, +32,60,120,109,112,58,77,101,116,97,100,97,116,97,68,97,116,101,62,50,48, +49,55,45,48,53,45,48,51,84,49,48,58,52,56,45,48,53,58,48,48,60,47,120,109, +112,58,77,101,116,97,100,97,116,97,68,97,116,101,62,10,32,32,32,32,32,32, +32,32,32,60,120,109,112,58,77,111,100,105,102,121,68,97,116,101,62,50,48, +49,55,45,48,53,45,48,51,84,49,48,58,52,56,45,48,53,58,48,48,60,47,120,109, +112,58,77,111,100,105,102,121,68,97,116,101,62,10,32,32,32,32,32,32,32, +32,32,60,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,62,65, +100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48, +49,53,32,40,77,97,99,105,110,116,111,115,104,41,60,47,120,109,112,58,67, +114,101,97,116,111,114,84,111,111,108,62,10,32,32,32,32,32,32,60,47,114, +100,102,58,68,101,115,99,114,105,112,116,105,111,110,62,10,32,32,32,60, +47,114,100,102,58,82,68,70,62,10,60,47,120,58,120,109,112,109,101,116,97, +62,10,123,69,148,137,0,0,7,98,73,68,65,84,88,9,173,86,123,104,149,231,25, +255,174,231,150,28,235,57,137,183,196,204,68,55,77,107,67,35,99,3,25,130, +148,14,41,91,5,203,146,46,203,234,148,168,77,41,206,30,70,161,118,27,88, +40,237,218,149,185,213,178,150,172,193,208,146,196,120,6,130,200,82,152, +200,153,241,159,193,168,74,234,230,174,70,186,94,76,98,206,37,57,151,239, +250,238,247,251,122,190,195,73,57,233,98,237,27,222,188,239,251,60,207, +251,92,127,239,243,29,73,250,146,199,177,99,199,148,90,42,151,162,215,146, +253,194,180,42,35,202,129,253,7,122,14,246,61,241,60,87,40,244,156,170, +226,87,108,200,149,221,93,110,168,28,211,237,235,234,139,203,43,212,243, +145,72,120,155,36,160,20,22,10,133,226,101,145,115,30,26,76,14,206,249, +114,190,185,154,233,242,153,119,178,94,187,118,205,11,198,173,23,175,215, +213,69,182,21,139,197,82,209,40,217,92,121,38,157,250,124,57,95,247,151, +149,1,234,17,187,119,239,142,54,196,27,255,173,105,218,42,215,117,133,44, +201,178,144,132,80,20,69,182,109,123,230,246,220,236,166,179,103,207,206, +67,214,147,167,19,26,255,221,253,248,52,215,150,101,201,174,227,72,66,81, +37,225,194,180,87,3,120,134,63,210,107,141,187,46,193,206,157,59,17,196, +167,137,28,31,31,207,153,166,117,81,213,84,201,21,174,33,132,176,177,90, +122,64,151,12,203,154,96,244,93,93,93,42,28,161,199,222,168,233,0,46,46, +171,52,4,84,42,149,178,161,73,28,58,116,168,145,26,71,199,70,122,179,233, +12,0,33,135,100,69,214,160,43,144,78,167,83,167,78,141,116,147,31,139,197, +22,217,92,100,136,222,157,62,125,218,149,81,58,58,209,221,221,173,36,147, +201,154,185,243,209,124,240,96,255,247,53,69,253,185,44,75,235,112,103, +90,184,238,209,55,127,247,230,153,71,31,253,222,1,69,82,86,105,154,18,215, +117,125,30,56,152,183,93,251,252,240,240,240,164,127,151,14,85,28,168,38, +246,37,250,226,131,199,7,231,40,80,77,231,153,131,105,103,228,124,227,209, +21,247,140,56,168,47,167,170,170,146,134,185,176,48,223,59,48,56,48,210, +219,219,251,67,85,214,6,130,193,96,24,65,73,166,101,74,150,105,62,53,60, +58,252,91,6,203,224,60,7,252,195,225,196,225,29,193,128,246,154,172,40, +27,16,201,77,195,180,127,124,226,248,137,9,159,207,172,80,17,134,87,195, +131,125,135,254,26,12,134,238,5,248,76,80,117,16,173,64,64,15,24,37,227, +242,39,51,31,239,139,175,108,184,74,97,199,117,44,222,193,221,0,207,134, +89,234,24,27,27,123,159,193,177,121,120,105,238,239,239,111,213,117,245, +66,56,18,238,132,96,140,43,207,164,211,211,174,211,93,42,232,2,242,158, +7,123,246,236,105,128,67,107,97,28,136,119,117,128,77,198,211,211,109,203, +38,0,163,225,80,120,47,248,146,101,91,150,235,128,239,184,1,199,118,76, +69,86,36,225,136,71,232,136,148,146,20,2,194,3,133,30,84,31,11,135,67,26, +27,135,227,216,2,75,137,103,61,172,254,128,178,201,238,164,147,72,36,226, +112,192,229,249,204,153,51,115,166,97,221,226,30,79,158,70,4,158,30,34, +149,145,102,231,22,210,61,11,2,120,156,78,121,186,204,134,100,131,198,145, +194,95,165,15,88,142,37,179,142,188,64,207,217,66,16,137,100,25,86,238, +232,177,163,247,33,252,49,69,85,154,127,246,252,115,55,109,203,76,252,226, +133,87,83,166,99,190,28,116,2,39,145,221,0,156,96,56,1,219,177,37,195,48, +126,93,76,23,255,162,107,129,151,88,26,216,50,61,139,146,20,40,21,109,201, +52,75,127,224,25,88,114,25,189,231,78,113,62,155,204,100,178,14,208,26, +130,19,50,0,21,74,207,101,10,66,118,254,166,41,242,159,235,235,235,238, +87,80,26,180,213,78,77,215,255,152,72,60,185,17,79,107,40,51,159,219,191, +144,207,255,3,141,55,203,53,157,205,252,232,84,114,248,247,239,166,222, +157,202,23,22,18,22,74,130,120,2,156,220,23,74,249,196,185,115,231,174, +18,87,204,166,87,79,31,100,143,239,127,252,193,96,40,240,27,24,218,128, +91,31,205,124,114,235,177,175,221,215,190,35,22,91,121,2,31,148,146,36, +139,32,160,100,160,52,161,76,58,251,236,43,47,190,250,114,57,50,25,109, +120,53,26,205,52,206,196,9,177,69,160,138,135,31,122,120,155,164,43,223, +245,228,44,247,220,248,249,241,203,216,211,174,7,100,175,4,4,89,249,210, +5,48,58,118,237,218,21,71,26,115,124,106,137,175,110,250,142,7,52,132,192, +154,202,128,140,109,59,18,75,70,165,251,246,237,11,13,13,13,149,96,220, +195,67,57,50,175,119,148,3,163,65,78,111,248,193,250,231,69,93,201,39,110, +223,190,221,44,119,56,169,144,203,38,179,217,156,173,170,40,141,35,80,26, +37,148,201,100,156,124,58,147,164,252,212,212,20,59,161,175,135,47,202, +139,140,60,63,48,212,90,227,100,144,164,145,231,143,69,37,72,60,115,120, +135,166,7,95,67,9,218,128,233,27,182,101,60,125,252,151,39,254,244,196, +83,7,190,29,12,133,126,5,92,180,0,168,31,20,140,210,145,183,94,127,235, +2,218,175,62,48,48,192,55,46,117,116,116,196,38,39,39,211,101,197,21,108, +249,134,150,90,229,114,234,221,254,167,251,91,163,225,200,63,35,117,17, +205,48,76,9,221,75,42,228,243,214,66,169,216,254,198,241,55,254,3,5,114, +79,79,207,234,209,209,81,47,213,184,199,136,236,206,206,206,214,249,124, +254,109,212,231,1,60,157,171,209,186,186,189,87,174,92,153,130,252,178, +156,160,144,151,190,160,166,163,15,132,209,7,74,232,3,14,250,64,17,125, +32,172,7,84,173,11,50,18,162,213,124,227,213,117,206,229,114,239,160,17, +237,192,247,190,142,43,207,148,95,238,240,140,83,216,193,183,156,77,130, +61,0,138,188,149,103,210,125,101,96,113,47,151,235,44,182,110,221,26,55, +109,251,1,211,52,225,179,35,184,242,220,222,222,222,0,57,62,239,202,93, +95,199,103,215,74,154,230,51,197,100,150,125,128,96,67,207,231,202,51,233, +188,212,212,212,228,224,51,224,57,128,35,149,171,248,121,53,135,206,53, +9,167,85,56,192,79,168,138,121,245,250,245,235,183,193,103,3,170,0,18,251, +154,67,5,218,5,83,58,50,50,114,123,235,253,247,94,178,29,231,235,80,22, +44,21,75,255,42,22,204,222,161,147,67,239,149,113,66,5,52,44,8,184,233, +233,233,2,9,112,236,146,105,24,223,64,243,138,171,138,146,138,214,215,31, +153,157,157,157,1,107,17,218,41,251,185,131,70,124,129,158,158,221,107, +252,125,153,238,241,90,219,219,91,87,181,124,229,98,172,169,37,203,117, +243,230,205,27,125,185,111,109,217,18,93,191,113,227,145,88,243,250,155, +241,230,150,153,181,27,218,126,82,230,85,244,250,178,75,174,204,68,53,179, +234,236,41,105,108,110,153,136,174,107,22,245,171,215,218,92,27,155,90, +38,124,249,230,13,155,30,92,217,180,94,68,215,172,19,245,152,220,175,107, +109,221,85,230,47,210,235,223,225,90,19,36,4,27,234,237,215,143,50,98,61, +0,151,155,189,61,133,31,121,17,242,40,131,111,68,190,33,18,222,124,227, +198,141,91,13,77,77,47,149,28,247,89,220,42,122,6,100,41,28,208,212,23, +211,31,126,248,83,156,137,7,175,95,120,188,170,127,53,211,83,101,156,162, +116,68,254,47,0,167,72,242,36,0,10,192,225,219,143,21,231,247,105,156,66, +248,217,53,65,73,96,40,204,201,125,80,214,46,145,135,65,236,212,28,75,166, +230,51,210,116,84,52,174,93,115,17,207,242,155,4,92,80,85,222,139,70,235, +246,230,210,105,254,116,211,22,178,217,191,175,92,113,15,223,99,39,132, +139,17,93,127,97,250,163,15,78,130,199,12,46,233,0,120,203,30,149,108,181, +181,181,85,64,138,219,21,58,53,109,1,24,57,151,173,245,14,5,105,204,199, +13,215,69,198,113,174,206,104,245,254,14,205,252,127,113,223,137,90,146, +228,125,30,127,209,157,255,1,20,12,21,53,43,45,50,60,0,0,0,0,73,69,78,68, +174,66,96,130}; -static size_t xml_res_size_45 = 2625; -static unsigned char xml_res_file_45[] = { +static size_t xml_res_size_47 = 2625; +static unsigned char xml_res_file_47[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -46539,8 +48521,8 @@ static unsigned char xml_res_file_45[] = { 26,37,165,252,254,210,95,21,238,127,1,34,180,187,130,229,69,29,163,0,0, 0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_46 = 2243; -static unsigned char xml_res_file_46[] = { +static size_t xml_res_size_48 = 2243; +static unsigned char xml_res_file_48[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -46652,8 +48634,8 @@ static unsigned char xml_res_file_46[] = { 175,41,244,191,125,252,95,252,28,100,139,98,189,9,108,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_47 = 4437; -static unsigned char xml_res_file_47[] = { +static size_t xml_res_size_49 = 4437; +static unsigned char xml_res_file_49[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0, 92,114,168,102,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0, 0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77, @@ -46868,8 +48850,8 @@ static unsigned char xml_res_file_47[] = { 36,73,146,36,73,146,36,73,146,36,73,146,36,73,146,36,85,206,255,3,240,28, 234,151,201,113,160,142,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_48 = 1751; -static unsigned char xml_res_file_48[] = { +static size_t xml_res_size_50 = 1751; +static unsigned char xml_res_file_50[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -46955,8 +48937,8 @@ static unsigned char xml_res_file_48[] = { 254,14,59,20,159,201,43,206,36,140,89,92,92,156,154,158,158,86,215,139, 186,231,237,95,188,7,108,11,46,234,44,6,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_49 = 10241; -static unsigned char xml_res_file_49[] = { +static size_t xml_res_size_51 = 10241; +static unsigned char xml_res_file_51[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -47455,8 +49437,8 @@ static unsigned char xml_res_file_49[] = { 221,233,94,221,159,211,151,60,228,255,22,255,15,3,187,247,93,31,232,0,62, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_50 = 10042; -static unsigned char xml_res_file_50[] = { +static size_t xml_res_size_52 = 10042; +static unsigned char xml_res_file_52[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -47945,8 +49927,8 @@ static unsigned char xml_res_file_50[] = { 214,254,37,116,90,88,80,24,255,95,227,31,101,196,74,39,123,69,52,234,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_51 = 11009; -static unsigned char xml_res_file_51[] = { +static size_t xml_res_size_53 = 11009; +static unsigned char xml_res_file_53[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -48483,8 +50465,8 @@ static unsigned char xml_res_file_51[] = { 84,165,167,232,142,36,127,86,163,174,91,137,255,43,227,127,0,1,142,242, 167,70,163,233,170,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_52 = 10635; -static unsigned char xml_res_file_52[] = { +static size_t xml_res_size_54 = 10635; +static unsigned char xml_res_file_54[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -49002,8 +50984,8 @@ static unsigned char xml_res_file_52[] = { 198,57,212,119,117,234,131,24,244,191,65,254,3,20,185,203,98,175,110,245, 108,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_53 = 12333; -static unsigned char xml_res_file_53[] = { +static size_t xml_res_size_55 = 12333; +static unsigned char xml_res_file_55[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -49601,8 +51583,8 @@ static unsigned char xml_res_file_53[] = { 137,225,17,240,234,254,191,173,67,34,128,172,24,126,254,95,25,230,171,173, 255,2,82,43,219,209,204,16,249,64,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_54 = 11957; -static unsigned char xml_res_file_54[] = { +static size_t xml_res_size_56 = 11957; +static unsigned char xml_res_file_56[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -50182,8 +52164,8 @@ static unsigned char xml_res_file_54[] = { 213,65,34,194,127,3,103,235,88,211,218,134,26,176,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_55 = 1527; -static unsigned char xml_res_file_55[] = { +static size_t xml_res_size_57 = 1527; +static unsigned char xml_res_file_57[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50259,8 +52241,8 @@ static unsigned char xml_res_file_55[] = { 158,213,255,33,199,111,197,65,73,182,175,184,146,122,40,248,23,138,134, 120,91,58,192,207,111,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_56 = 9975; -static unsigned char xml_res_file_56[] = { +static size_t xml_res_size_58 = 9975; +static unsigned char xml_res_file_58[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -50745,8 +52727,8 @@ static unsigned char xml_res_file_56[] = { 142,36,198,42,138,253,142,228,253,160,123,74,182,168,132,251,160,218,78, 43,252,13,184,83,207,161,24,198,38,74,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_57 = 1430; -static unsigned char xml_res_file_57[] = { +static size_t xml_res_size_59 = 1430; +static unsigned char xml_res_file_59[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -50817,8 +52799,8 @@ static unsigned char xml_res_file_57[] = { 121,251,23,114,167,99,154,246,210,189,250,0,0,0,0,73,69,78,68,174,66,96, 130}; -static size_t xml_res_size_58 = 1583; -static unsigned char xml_res_file_58[] = { +static size_t xml_res_size_60 = 1583; +static unsigned char xml_res_file_60[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -50896,8 +52878,8 @@ static unsigned char xml_res_file_58[] = { 66,198,193,174,226,237,122,252,220,37,108,61,139,131,17,227,129,220,95, 5,254,4,115,28,214,82,231,146,206,48,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_59 = 1673; -static unsigned char xml_res_file_59[] = { +static size_t xml_res_size_61 = 1673; +static unsigned char xml_res_file_61[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -50980,8 +52962,8 @@ static unsigned char xml_res_file_59[] = { 139,125,187,129,181,236,216,95,71,203,95,229,202,22,81,103,184,206,155, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_60 = 1664; -static unsigned char xml_res_file_60[] = { +static size_t xml_res_size_62 = 1664; +static unsigned char xml_res_file_62[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -51063,8 +53045,8 @@ static unsigned char xml_res_file_60[] = { 223,45,187,101,192,98,0,133,217,22,190,23,91,123,11,62,82,223,70,90,254, 2,66,37,8,30,168,225,208,235,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_61 = 1288; -static unsigned char xml_res_file_61[] = { +static size_t xml_res_size_63 = 1288; +static unsigned char xml_res_file_63[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -51128,8 +53110,8 @@ static unsigned char xml_res_file_61[] = { 81,201,31,218,113,181,3,164,164,117,90,42,109,254,1,127,251,96,172,92,235, 221,68,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_62 = 1272; -static unsigned char xml_res_file_62[] = { +static size_t xml_res_size_64 = 1272; +static unsigned char xml_res_file_64[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -51192,8 +53174,8 @@ static unsigned char xml_res_file_62[] = { 214,83,179,55,112,63,31,202,214,232,127,69,254,14,183,206,111,69,195,122, 49,187,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_63 = 2000; -static unsigned char xml_res_file_63[] = { +static size_t xml_res_size_65 = 2000; +static unsigned char xml_res_file_65[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -51291,8 +53273,8 @@ static unsigned char xml_res_file_63[] = { 48,241,28,230,217,196,11,255,251,15,105,219,159,125,192,137,46,186,0,0, 0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_64 = 1498; -static unsigned char xml_res_file_64[] = { +static size_t xml_res_size_66 = 1498; +static unsigned char xml_res_file_66[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -51367,8 +53349,8 @@ static unsigned char xml_res_file_64[] = { 160,17,160,255,214,244,79,162,182,168,120,144,155,250,62,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_65 = 7221; -static unsigned char xml_res_file_65[] = { +static size_t xml_res_size_67 = 7449; +static unsigned char xml_res_file_67[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, 62,10,60,114,101,115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99, @@ -51569,152 +53551,162 @@ static unsigned char xml_res_file_65[] = { 32,60,116,111,111,108,116,105,112,62,67,111,110,100,105,116,105,111,110, 97,108,32,80,108,111,116,60,47,116,111,111,108,116,105,112,62,10,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116, -111,111,108,34,32,110,97,109,101,61,34,73,68,95,77,79,82,65,78,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108, -111,114,95,51,50,120,51,50,95,50,49,46,112,110,103,60,47,98,105,116,109, -97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,103,114,97, -121,95,51,50,120,51,50,95,50,49,46,112,110,103,60,47,98,105,116,109,97, -112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,77,111, -114,97,110,32,83,99,97,116,116,101,114,32,80,108,111,116,60,47,116,111, -111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111, -111,108,34,32,110,97,109,101,61,34,73,68,77,95,67,79,82,82,69,76,79,71, -82,65,77,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, -97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111, -108,111,114,95,51,50,120,51,50,95,50,50,46,112,110,103,60,47,98,105,116, -109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100, -97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,103,114, -97,121,95,51,50,120,51,50,95,50,50,46,112,110,103,60,47,98,105,116,109, -97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,78, -111,110,112,97,114,97,109,101,116,114,105,99,32,83,112,97,116,105,97,108, -32,65,117,116,111,99,111,114,114,101,108,97,116,105,111,110,60,47,116,111, -111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111, -111,108,34,32,110,97,109,101,61,34,73,68,95,76,73,83,65,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112, -112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114, -95,51,50,120,51,50,95,50,51,46,112,110,103,60,47,98,105,116,109,97,112, -62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112, -112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,103,114,97,121,95, -51,50,120,51,50,95,50,51,46,112,110,103,60,47,98,105,116,109,97,112,50, -62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,67,108,117,115, -116,101,114,32,77,97,112,115,60,47,116,111,111,108,116,105,112,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,84,73, -77,69,95,67,72,79,79,83,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116, +116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61, +34,73,68,95,67,76,85,83,84,69,82,73,78,71,95,67,72,79,73,67,69,83,34,62, +10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,51, +50,120,51,50,95,51,56,46,112,110,103,60,47,98,105,116,109,97,112,62,10, +32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,103,114,97,121,95,51,50, +120,51,50,95,51,56,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10, +32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,67,108,117,115,116, +101,114,115,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108, +34,32,110,97,109,101,61,34,73,68,95,77,79,82,65,78,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,51, +50,120,51,50,95,50,49,46,112,110,103,60,47,98,105,116,109,97,112,62,10, +32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,103,114,97,121,95,51,50, +120,51,50,95,50,49,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10, +32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,77,111,114,97,110,32, +83,99,97,116,116,101,114,32,80,108,111,116,60,47,116,111,111,108,116,105, +112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32, +110,97,109,101,61,34,73,68,77,95,67,79,82,82,69,76,79,71,82,65,77,34,62, +10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,51, +50,120,51,50,95,50,50,46,112,110,103,60,47,98,105,116,109,97,112,62,10, +32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,103,114,97,121,95,51,50, +120,51,50,95,50,50,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10, +32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,78,111,110,112,97,114, +97,109,101,116,114,105,99,32,83,112,97,116,105,97,108,32,65,117,116,111, +99,111,114,114,101,108,97,116,105,111,110,60,47,116,111,111,108,116,105, +112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32, +110,97,109,101,61,34,73,68,95,76,73,83,65,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115, +111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,51,50,120, +51,50,95,50,51,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32, +32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115, +111,117,114,99,101,115,46,99,112,112,36,103,114,97,121,95,51,50,120,51, +50,95,50,51,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32, +32,32,32,60,116,111,111,108,116,105,112,62,67,108,117,115,116,101,114,32, +77,97,112,115,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108, +34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,84,73,77,69,95,67,72, +79,79,83,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, +100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99, +111,108,111,114,95,51,50,120,51,50,95,50,53,46,112,110,103,60,47,98,105, +116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71, +100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,103, +114,97,121,95,51,50,120,51,50,95,50,53,46,112,110,103,60,47,98,105,116, +109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62, +84,105,109,101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,77, +95,76,73,78,69,95,67,72,65,82,84,34,62,10,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,99,111,108,111,114,95,51,50,120,51,50,95,50,53,46,112,110, +99,112,112,36,99,111,108,111,114,95,51,50,120,51,50,95,50,54,46,112,110, 103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109, 97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,103,114,97,121,95,51,50,120,51,50,95,50,53,46,112,110,103, +99,112,112,36,103,114,97,121,95,51,50,120,51,50,95,50,54,46,112,110,103, 60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108, -116,105,112,62,84,105,109,101,60,47,116,111,111,108,116,105,112,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101, -61,34,73,68,77,95,76,73,78,69,95,67,72,65,82,84,34,62,10,32,32,32,32,32, -32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,51,50,120,51,50,95, -50,54,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, -60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,103,114,97,121,95,51,50,120,51,50,95,50, -54,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32, -60,116,111,111,108,116,105,112,62,65,118,101,114,97,103,101,115,32,67,104, -97,114,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108, -34,32,110,97,109,101,61,34,73,68,95,82,69,71,82,69,83,83,73,79,78,95,67, -76,65,83,83,73,67,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62, -71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36, -99,111,108,111,114,95,51,50,120,51,50,95,50,55,46,112,110,103,60,47,98, -105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50, -62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112, -36,103,114,97,121,95,51,50,120,51,50,95,50,55,46,112,110,103,60,47,98,105, -116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112, -62,82,101,103,114,101,115,115,105,111,110,60,47,116,111,111,108,116,105, -112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,84,111,111,108,66,97,114,34,32,110,97,109,101,61,34,84, -111,111,108,66,97,114,95,77,65,80,34,62,10,32,32,32,32,60,115,116,121,108, -101,62,119,120,84,66,95,70,76,65,84,124,119,120,84,66,95,72,79,82,73,90, -79,78,84,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,60,98,105,116, -109,97,112,115,105,122,101,62,50,52,44,50,52,60,47,98,105,116,109,97,112, -115,105,122,101,62,10,32,32,32,32,60,109,97,114,103,105,110,115,62,49,44, -49,60,47,109,97,114,103,105,110,115,62,10,32,32,32,32,60,111,98,106,101, +116,105,112,62,65,118,101,114,97,103,101,115,32,67,104,97,114,116,60,47, +116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,95,76,65,89,69,82,34,62,10,32,32,32,32, -32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,50,52,120,50,52,95, -50,56,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, -60,116,111,111,108,116,105,112,62,83,101,108,101,99,116,60,47,116,111,111, -108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111, -108,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,73,78,86,69, -82,84,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108, -111,114,95,50,52,120,50,52,95,50,57,46,112,110,103,60,47,98,105,116,109, -97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,73,110, -118,101,114,116,32,83,101,108,101,99,116,60,47,116,111,111,108,116,105, +61,34,73,68,95,82,69,71,82,69,83,83,73,79,78,95,67,76,65,83,83,73,67,34, +62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95, +51,50,120,51,50,95,50,55,46,112,110,103,60,47,98,105,116,109,97,112,62, +10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,103,114,97,121,95,51, +50,120,51,50,95,50,55,46,112,110,103,60,47,98,105,116,109,97,112,50,62, +10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,82,101,103,114,101, +115,115,105,111,110,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, +111,111,108,66,97,114,34,32,110,97,109,101,61,34,84,111,111,108,66,97,114, +95,77,65,80,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,84,66, +95,70,76,65,84,124,119,120,84,66,95,72,79,82,73,90,79,78,84,65,76,60,47, +115,116,121,108,101,62,10,32,32,32,32,60,98,105,116,109,97,112,115,105, +122,101,62,50,52,44,50,52,60,47,98,105,116,109,97,112,115,105,122,101,62, +10,32,32,32,32,60,109,97,114,103,105,110,115,62,49,44,49,60,47,109,97,114, +103,105,110,115,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,83,69, +76,69,67,84,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116, +109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, +99,112,112,36,99,111,108,111,114,95,50,52,120,50,52,95,50,56,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111, +108,116,105,112,62,83,101,108,101,99,116,60,47,116,111,111,108,116,105, 112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,90, -79,79,77,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109, -97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99, -112,112,36,99,111,108,111,114,95,50,52,120,50,52,95,51,48,46,112,110,103, -60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108, -116,105,112,62,90,111,111,109,32,73,110,60,47,116,111,111,108,116,105,112, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110, -97,109,101,61,34,73,68,95,90,79,79,77,95,79,85,84,95,76,65,89,69,82,34, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,73,78,86,69,82,84,34, 62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, 82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95, -50,52,120,50,52,95,51,49,46,112,110,103,60,47,98,105,116,109,97,112,62, -10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,90,111,111,109,32, -79,117,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,80, -65,78,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97, -112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112, -112,36,99,111,108,111,114,95,50,52,120,50,52,95,51,50,46,112,110,103,60, -47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116, -105,112,62,80,97,110,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +50,52,120,50,52,95,50,57,46,112,110,103,60,47,98,105,116,109,97,112,62, +10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,73,110,118,101,114, +116,32,83,101,108,101,99,116,60,47,116,111,111,108,116,105,112,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,90,79,79,77,95,76,65, +89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, +97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111, +108,111,114,95,50,52,120,50,52,95,51,48,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,90, +111,111,109,32,73,110,60,47,116,111,111,108,116,105,112,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73, -68,95,69,88,84,69,78,84,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60, +68,95,90,79,79,77,95,79,85,84,95,76,65,89,69,82,34,62,10,32,32,32,32,32, +32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, +114,99,101,115,46,99,112,112,36,99,111,108,111,114,95,50,52,120,50,52,95, +51,49,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, +60,116,111,111,108,116,105,112,62,90,111,111,109,32,79,117,116,60,47,116, +111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116, +111,111,108,34,32,110,97,109,101,61,34,73,68,95,80,65,78,95,76,65,89,69, +82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111, +114,95,50,52,120,50,52,95,51,50,46,112,110,103,60,47,98,105,116,109,97, +112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,80,97,110, +60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,69,88,84,69,78, +84,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112, +62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112, +36,99,111,108,111,114,95,50,52,120,50,52,95,51,51,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105, +112,62,70,117,108,108,32,69,120,116,101,110,116,60,47,116,111,111,108,116, +105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,84, +79,79,76,66,65,82,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60, 98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,99,111,108,111,114,95,50,52,120,50,52,95,51,51, +101,115,46,99,112,112,36,99,111,108,111,114,95,50,52,120,50,52,95,51,52, 46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116, -111,111,108,116,105,112,62,70,117,108,108,32,69,120,116,101,110,116,60, -47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97, -109,101,61,34,73,68,95,84,79,79,76,66,65,82,95,66,65,83,69,77,65,80,34, -62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, -82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111,108,111,114,95, -50,52,120,50,52,95,51,52,46,112,110,103,60,47,98,105,116,109,97,112,62, -10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,66,97,115,101,32, -77,97,112,32,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95, -82,69,70,82,69,83,72,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98, -105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101, -115,46,99,112,112,36,99,111,108,111,114,95,50,52,120,50,52,95,51,54,46, -112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116, -111,111,108,116,105,112,62,82,101,102,114,101,115,104,60,47,116,111,111, -108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101, -62,10}; +111,111,108,116,105,112,62,66,97,115,101,32,77,97,112,32,60,47,116,111, +111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111, +111,108,34,32,110,97,109,101,61,34,73,68,95,82,69,70,82,69,83,72,95,76, +65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, +97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,99,111, +108,111,114,95,50,52,120,50,52,95,51,54,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,82, +101,102,114,101,115,104,60,47,116,111,111,108,116,105,112,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, +62,10,60,47,114,101,115,111,117,114,99,101,62,10}; -static size_t xml_res_size_66 = 3365; -static unsigned char xml_res_file_66[] = { +static size_t xml_res_size_68 = 3365; +static unsigned char xml_res_file_68[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -51880,8 +53872,8 @@ static unsigned char xml_res_file_66[] = { 180,31,144,11,38,41,82,240,164,43,249,114,174,7,213,117,219,20,255,19,223, 1,15,216,103,214,89,223,125,221,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_67 = 3346; -static unsigned char xml_res_file_67[] = { +static size_t xml_res_size_69 = 3346; +static unsigned char xml_res_file_69[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -52046,8 +54038,8 @@ static unsigned char xml_res_file_67[] = { 201,147,201,21,200,101,243,100,61,159,130,63,75,220,129,160,200,7,254,27, 253,0,195,96,86,66,54,92,220,231,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_68 = 609; -static unsigned char xml_res_file_68[] = { +static size_t xml_res_size_70 = 609; +static unsigned char xml_res_file_70[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, @@ -52078,8 +54070,8 @@ static unsigned char xml_res_file_68[] = { 190,63,183,58,126,206,249,39,254,247,109,252,13,206,142,107,5,43,120,247, 99,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_69 = 3228; -static unsigned char xml_res_file_69[] = { +static size_t xml_res_size_71 = 3228; +static unsigned char xml_res_file_71[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -52239,8 +54231,8 @@ static unsigned char xml_res_file_69[] = { 126,72,11,248,185,255,151,250,3,112,209,99,14,94,111,166,195,0,0,0,0,73, 69,78,68,174,66,96,130}; -static size_t xml_res_size_70 = 3024; -static unsigned char xml_res_file_70[] = { +static size_t xml_res_size_72 = 3024; +static unsigned char xml_res_file_72[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -52390,8 +54382,8 @@ static unsigned char xml_res_file_70[] = { 166,142,253,193,127,241,11,137,146,30,245,215,180,86,95,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_71 = 2962; -static unsigned char xml_res_file_71[] = { +static size_t xml_res_size_73 = 2962; +static unsigned char xml_res_file_73[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -52538,8 +54530,8 @@ static unsigned char xml_res_file_71[] = { 201,186,107,254,143,188,1,209,114,213,146,197,130,195,27,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_72 = 3005; -static unsigned char xml_res_file_72[] = { +static size_t xml_res_size_74 = 3005; +static unsigned char xml_res_file_74[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -52688,8 +54680,8 @@ static unsigned char xml_res_file_72[] = { 131,146,155,102,180,99,225,93,220,1,60,225,28,92,109,44,234,115,0,0,0,0, 73,69,78,68,174,66,96,130}; -static size_t xml_res_size_73 = 2921; -static unsigned char xml_res_file_73[] = { +static size_t xml_res_size_75 = 2921; +static unsigned char xml_res_file_75[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -52834,8 +54826,8 @@ static unsigned char xml_res_file_73[] = { 246,69,230,91,187,1,129,127,206,78,232,178,29,133,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_74 = 3024; -static unsigned char xml_res_file_74[] = { +static size_t xml_res_size_76 = 3024; +static unsigned char xml_res_file_76[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,47,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,72,199,157,150,119,84,84,215,22,135,207,189,119,122,161,205, @@ -52986,8 +54978,8 @@ static unsigned char xml_res_file_74[] = { 222,250,127,38,242,95,235,27,235,137,9,203,200,10,46,200,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_75 = 2971; -static unsigned char xml_res_file_75[] = { +static size_t xml_res_size_77 = 2971; +static unsigned char xml_res_file_77[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,47,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,72,199,157,150,119,84,84,215,22,135,207,189,119,122,161,205, @@ -53135,8 +55127,8 @@ static unsigned char xml_res_file_75[] = { 56,235,241,70,82,203,231,143,191,2,249,47,251,1,160,231,198,102,206,67, 117,57,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_76 = 3008; -static unsigned char xml_res_file_76[] = { +static size_t xml_res_size_78 = 3008; +static unsigned char xml_res_file_78[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -53285,8 +55277,8 @@ static unsigned char xml_res_file_76[] = { 242,168,126,9,90,247,247,10,124,112,229,95,248,1,87,174,180,20,56,13,112, 123,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_77 = 2957; -static unsigned char xml_res_file_77[] = { +static size_t xml_res_size_79 = 2957; +static unsigned char xml_res_file_79[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -53432,8 +55424,8 @@ static unsigned char xml_res_file_77[] = { 32,89,100,242,29,192,69,175,172,215,119,229,199,109,100,4,248,193,42,254, 181,23,165,102,140,53,220,35,174,150,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_78 = 3012; -static unsigned char xml_res_file_78[] = { +static size_t xml_res_size_80 = 3012; +static unsigned char xml_res_file_80[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -53582,8 +55574,8 @@ static unsigned char xml_res_file_78[] = { 168,3,150,227,94,51,28,231,134,255,174,95,167,236,5,79,240,121,45,128,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_79 = 2989; -static unsigned char xml_res_file_79[] = { +static size_t xml_res_size_81 = 2989; +static unsigned char xml_res_file_81[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -53731,8 +55723,8 @@ static unsigned char xml_res_file_79[] = { 234,183,45,91,219,113,121,218,202,79,155,250,175,243,11,2,109,192,130,43, 37,146,142,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_80 = 3009; -static unsigned char xml_res_file_80[] = { +static size_t xml_res_size_82 = 3009; +static unsigned char xml_res_file_82[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -53881,8 +55873,8 @@ static unsigned char xml_res_file_80[] = { 120,93,79,198,117,121,150,77,255,252,28,118,230,15,23,175,6,61,101,63,69, 139,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_81 = 3005; -static unsigned char xml_res_file_81[] = { +static size_t xml_res_size_83 = 3005; +static unsigned char xml_res_file_83[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -54031,8 +56023,8 @@ static unsigned char xml_res_file_81[] = { 76,203,49,211,85,34,79,190,172,15,78,254,2,57,252,123,185,193,119,25,170, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_82 = 762; -static unsigned char xml_res_file_82[] = { +static size_t xml_res_size_84 = 762; +static unsigned char xml_res_file_84[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0, 0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77, @@ -54070,8 +56062,8 @@ static unsigned char xml_res_file_82[] = { 38,62,244,246,4,183,102,163,9,140,63,153,217,179,210,63,94,237,43,138,198, 62,195,111,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_83 = 695; -static unsigned char xml_res_file_83[] = { +static size_t xml_res_size_85 = 695; +static unsigned char xml_res_file_85[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0, 0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77, @@ -54107,8 +56099,8 @@ static unsigned char xml_res_file_83[] = { 84,245,180,121,248,7,84,112,245,219,13,141,90,10,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_84 = 2998; -static unsigned char xml_res_file_84[] = { +static size_t xml_res_size_86 = 2998; +static unsigned char xml_res_file_86[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,47,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,72,199,157,150,119,84,84,215,22,135,207,189,119,122,161,205, @@ -54257,8 +56249,8 @@ static unsigned char xml_res_file_84[] = { 191,243,28,125,119,227,139,216,84,68,148,250,213,154,146,71,0,63,37,255, 15,186,152,219,74,199,43,153,61,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_85 = 2925; -static unsigned char xml_res_file_85[] = { +static size_t xml_res_size_87 = 2925; +static unsigned char xml_res_file_87[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,47,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,72,199,157,150,119,84,84,215,22,135,207,189,119,122,161,205, @@ -54404,8 +56396,8 @@ static unsigned char xml_res_file_85[] = { 205,203,34,85,190,61,62,126,99,220,240,207,243,1,77,102,162,184,175,155, 10,18,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_86 = 2923; -static unsigned char xml_res_file_86[] = { +static size_t xml_res_size_88 = 2923; +static unsigned char xml_res_file_88[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -54550,8 +56542,8 @@ static unsigned char xml_res_file_86[] = { 179,173,193,122,181,129,15,243,51,197,185,200,167,190,122,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_87 = 2905; -static unsigned char xml_res_file_87[] = { +static size_t xml_res_size_89 = 2905; +static unsigned char xml_res_file_89[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -54695,8 +56687,8 @@ static unsigned char xml_res_file_87[] = { 235,108,18,208,58,219,59,112,122,3,92,85,140,150,76,68,228,137,0,0,0,0, 73,69,78,68,174,66,96,130}; -static size_t xml_res_size_88 = 3014; -static unsigned char xml_res_file_88[] = { +static size_t xml_res_size_90 = 3014; +static unsigned char xml_res_file_90[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -54845,8 +56837,8 @@ static unsigned char xml_res_file_88[] = { 245,26,143,192,190,86,118,160,113,205,156,196,255,117,126,0,209,175,37, 40,253,59,215,158,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_89 = 2941; -static unsigned char xml_res_file_89[] = { +static size_t xml_res_size_91 = 2941; +static unsigned char xml_res_file_91[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -54992,8 +56984,8 @@ static unsigned char xml_res_file_89[] = { 193,94,234,127,197,7,186,173,247,44,43,91,206,130,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_90 = 2941; -static unsigned char xml_res_file_90[] = { +static size_t xml_res_size_92 = 2941; +static unsigned char xml_res_file_92[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -55139,8 +57131,8 @@ static unsigned char xml_res_file_90[] = { 194,107,131,63,147,172,43,42,9,61,124,34,0,0,0,0,73,69,78,68,174,66,96, 130}; -static size_t xml_res_size_91 = 2907; -static unsigned char xml_res_file_91[] = { +static size_t xml_res_size_93 = 2907; +static unsigned char xml_res_file_93[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -55284,8 +57276,8 @@ static unsigned char xml_res_file_91[] = { 168,246,235,95,224,255,63,211,27,80,216,72,20,16,97,214,244,0,0,0,0,73, 69,78,68,174,66,96,130}; -static size_t xml_res_size_92 = 2943; -static unsigned char xml_res_file_92[] = { +static size_t xml_res_size_94 = 2943; +static unsigned char xml_res_file_94[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -55431,8 +57423,8 @@ static unsigned char xml_res_file_92[] = { 138,187,243,55,158,114,229,232,209,249,11,153,198,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_93 = 2932; -static unsigned char xml_res_file_93[] = { +static size_t xml_res_size_95 = 2932; +static unsigned char xml_res_file_95[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -55577,8 +57569,8 @@ static unsigned char xml_res_file_93[] = { 170,56,16,175,134,40,15,83,38,228,50,160,97,216,254,140,15,229,175,111, 201,14,110,98,226,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_94 = 3031; -static unsigned char xml_res_file_94[] = { +static size_t xml_res_size_96 = 3031; +static unsigned char xml_res_file_96[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -55728,8 +57720,8 @@ static unsigned char xml_res_file_94[] = { 22,114,140,77,92,200,177,39,100,175,250,134,255,194,15,118,12,189,168,159, 104,202,81,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_95 = 2994; -static unsigned char xml_res_file_95[] = { +static size_t xml_res_size_97 = 2994; +static unsigned char xml_res_file_97[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -55877,8 +57869,8 @@ static unsigned char xml_res_file_95[] = { 250,211,141,84,189,140,123,151,170,45,244,205,208,125,133,95,63,63,178, 40,148,204,192,109,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_96 = 2927; -static unsigned char xml_res_file_96[] = { +static size_t xml_res_size_98 = 2927; +static unsigned char xml_res_file_98[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56023,8 +58015,8 @@ static unsigned char xml_res_file_96[] = { 114,214,181,166,149,68,98,23,47,187,151,5,24,153,192,238,91,0,0,0,0,73, 69,78,68,174,66,96,130}; -static size_t xml_res_size_97 = 2895; -static unsigned char xml_res_file_97[] = { +static size_t xml_res_size_99 = 2895; +static unsigned char xml_res_file_99[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56167,8 +58159,8 @@ static unsigned char xml_res_file_97[] = { 245,32,123,157,95,122,112,251,23,46,212,160,179,174,211,245,116,34,237, 171,118,68,111,135,212,74,155,251,37,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_98 = 3017; -static unsigned char xml_res_file_98[] = { +static size_t xml_res_size_100 = 3017; +static unsigned char xml_res_file_100[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56317,8 +58309,8 @@ static unsigned char xml_res_file_98[] = { 115,247,62,239,199,165,7,51,40,111,227,95,75,246,46,222,122,228,23,103, 173,34,100,12,174,240,242,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_99 = 2949; -static unsigned char xml_res_file_99[] = { +static size_t xml_res_size_101 = 2949; +static unsigned char xml_res_file_101[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56464,8 +58456,8 @@ static unsigned char xml_res_file_99[] = { 67,165,123,0,231,173,98,250,197,127,3,82,185,231,199,163,90,166,119,0,0, 0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_100 = 3037; -static unsigned char xml_res_file_100[] = { +static size_t xml_res_size_102 = 3037; +static unsigned char xml_res_file_102[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56615,8 +58607,8 @@ static unsigned char xml_res_file_100[] = { 103,2,172,205,7,32,192,35,158,215,180,255,255,28,252,0,225,53,37,78,5,240, 218,243,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_101 = 2981; -static unsigned char xml_res_file_101[] = { +static size_t xml_res_size_103 = 2981; +static unsigned char xml_res_file_103[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56764,8 +58756,8 @@ static unsigned char xml_res_file_101[] = { 87,248,113,14,126,1,250,84,190,218,6,220,209,169,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_102 = 3005; -static unsigned char xml_res_file_102[] = { +static size_t xml_res_size_104 = 3005; +static unsigned char xml_res_file_104[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -56914,8 +58906,8 @@ static unsigned char xml_res_file_102[] = { 185,131,63,79,249,91,192,19,197,25,242,100,158,154,38,179,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_103 = 2956; -static unsigned char xml_res_file_103[] = { +static size_t xml_res_size_105 = 2956; +static unsigned char xml_res_file_105[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -57061,8 +59053,8 @@ static unsigned char xml_res_file_103[] = { 54,247,34,118,159,138,126,87,218,103,170,103,190,90,152,55,62,128,63,86, 90,194,77,111,150,35,90,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_104 = 332; -static unsigned char xml_res_file_104[] = { +static size_t xml_res_size_106 = 332; +static unsigned char xml_res_file_106[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,15,8,6,0,0, 0,237,115,79,47,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,0,0,255,0,0,71,219,143,146,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -57080,8 +59072,8 @@ static unsigned char xml_res_file_104[] = { 34,194,87,24,124,3,212,86,58,128,235,195,80,32,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_105 = 326; -static unsigned char xml_res_file_105[] = { +static size_t xml_res_size_107 = 326; +static unsigned char xml_res_file_107[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,15,8,6,0,0, 0,237,115,79,47,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,0,0,255,0,0,71,219,143,146,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -57098,8 +59090,8 @@ static unsigned char xml_res_file_105[] = { 23,74,186,232,26,123,174,247,253,36,82,251,163,180,242,239,226,13,172,113, 143,52,249,113,176,169,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_106 = 351; -static unsigned char xml_res_file_106[] = { +static size_t xml_res_size_108 = 351; +static unsigned char xml_res_file_108[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,15,8,6,0,0, 0,237,115,79,47,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,0,0,255,0,0,71,219,143,146,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -57117,8 +59109,8 @@ static unsigned char xml_res_file_106[] = { 180,247,147,205,115,29,103,250,222,191,196,126,219,41,158,111,255,39,241, 111,136,95,112,120,64,148,115,30,191,44,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_107 = 345; -static unsigned char xml_res_file_107[] = { +static size_t xml_res_size_109 = 345; +static unsigned char xml_res_file_109[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,15,8,6,0,0, 0,237,115,79,47,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,0,0,255,0,0,71,219,143,146,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -57136,8 +59128,8 @@ static unsigned char xml_res_file_107[] = { 137,248,4,78,10,14,112,222,253,111,127,166,191,76,124,2,252,139,154,84, 172,167,51,247,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_108 = 331; -static unsigned char xml_res_file_108[] = { +static size_t xml_res_size_110 = 331; +static unsigned char xml_res_file_110[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,15,8,6,0,0, 0,237,115,79,47,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,0,0,255,0,0,71,219,143,146,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -57154,8 +59146,8 @@ static unsigned char xml_res_file_108[] = { 72,32,73,144,4,246,64,149,119,100,216,86,229,90,249,67,13,182,128,150,210, 123,246,0,132,22,211,113,34,14,56,65,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_109 = 313; -static unsigned char xml_res_file_109[] = { +static size_t xml_res_size_111 = 313; +static unsigned char xml_res_file_111[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,15,8,6,0,0, 0,237,115,79,47,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,0,0,255,0,0,71,219,143,146,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -57172,8 +59164,8 @@ static unsigned char xml_res_file_109[] = { 72,87,66,212,116,15,111,14,165,105,78,152,220,40,131,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_110 = 2896; -static unsigned char xml_res_file_110[] = { +static size_t xml_res_size_112 = 2896; +static unsigned char xml_res_file_112[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -57316,8 +59308,8 @@ static unsigned char xml_res_file_110[] = { 185,196,222,84,139,5,174,228,14,165,174,48,180,221,62,41,93,81,160,19,9, 88,1,36,217,54,208,228,70,53,114,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_111 = 2900; -static unsigned char xml_res_file_111[] = { +static size_t xml_res_size_113 = 2900; +static unsigned char xml_res_file_113[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -57461,8 +59453,8 @@ static unsigned char xml_res_file_111[] = { 107,117,28,246,248,215,159,41,59,49,84,150,240,163,29,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_112 = 2898; -static unsigned char xml_res_file_112[] = { +static size_t xml_res_size_114 = 2898; +static unsigned char xml_res_file_114[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -57606,8 +59598,8 @@ static unsigned char xml_res_file_112[] = { 116,81,248,51,158,64,198,57,213,92,114,148,56,0,0,0,0,73,69,78,68,174,66, 96,130}; -static size_t xml_res_size_113 = 2906; -static unsigned char xml_res_file_113[] = { +static size_t xml_res_size_115 = 2906; +static unsigned char xml_res_file_115[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -57751,8 +59743,8 @@ static unsigned char xml_res_file_113[] = { 118,198,127,211,9,200,89,46,156,243,103,124,0,143,212,57,86,196,168,65, 88,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_114 = 2893; -static unsigned char xml_res_file_114[] = { +static size_t xml_res_size_116 = 2893; +static unsigned char xml_res_file_116[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -57895,8 +59887,8 @@ static unsigned char xml_res_file_114[] = { 229,221,156,239,86,240,117,7,165,79,10,239,112,216,182,244,231,4,129,40, 48,102,181,67,202,134,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_115 = 2908; -static unsigned char xml_res_file_115[] = { +static size_t xml_res_size_117 = 2908; +static unsigned char xml_res_file_117[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58040,8 +60032,8 @@ static unsigned char xml_res_file_115[] = { 22,226,185,131,154,79,98,178,20,48,231,91,255,1,181,15,59,109,133,246,71, 216,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_116 = 263; -static unsigned char xml_res_file_116[] = { +static size_t xml_res_size_118 = 263; +static unsigned char xml_res_file_118[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,14,8,6,0,0, 0,38,47,156,138,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,193,0,193,0,193,81,56,116,69,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -58055,8 +60047,8 @@ static unsigned char xml_res_file_116[] = { 47,214,96,67,116,203,20,114,8,246,125,217,185,1,29,110,36,200,159,172,93, 0,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_117 = 265; -static unsigned char xml_res_file_117[] = { +static size_t xml_res_size_119 = 265; +static unsigned char xml_res_file_119[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,14,8,6,0,0, 0,38,47,156,138,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,193,0,193,0,193,81,56,116,69,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -58070,8 +60062,8 @@ static unsigned char xml_res_file_117[] = { 187,177,183,93,238,162,155,166,176,134,96,159,255,185,31,220,186,35,77, 20,109,41,83,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_118 = 272; -static unsigned char xml_res_file_118[] = { +static size_t xml_res_size_120 = 272; +static unsigned char xml_res_file_120[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,14,8,6,0,0, 0,38,47,156,138,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,193,0,193,0,193,81,56,116,69,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -58086,8 +60078,8 @@ static unsigned char xml_res_file_118[] = { 158,5,251,62,192,223,95,0,49,204,232,71,100,163,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_119 = 276; -static unsigned char xml_res_file_119[] = { +static size_t xml_res_size_121 = 276; +static unsigned char xml_res_file_121[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,14,8,6,0,0, 0,38,47,156,138,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,193,0,193,0,193,81,56,116,69,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, @@ -58102,8 +60094,8 @@ static unsigned char xml_res_file_119[] = { 24,19,24,224,11,193,134,47,78,251,98,125,223,0,0,0,0,73,69,78,68,174,66, 96,130}; -static size_t xml_res_size_120 = 3049; -static unsigned char xml_res_file_120[] = { +static size_t xml_res_size_122 = 3049; +static unsigned char xml_res_file_122[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58254,8 +60246,8 @@ static unsigned char xml_res_file_120[] = { 194,192,117,206,67,51,229,251,167,26,59,242,31,140,31,169,191,145,200,88, 61,192,72,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_121 = 2990; -static unsigned char xml_res_file_121[] = { +static size_t xml_res_size_123 = 2990; +static unsigned char xml_res_file_123[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58403,8 +60395,8 @@ static unsigned char xml_res_file_121[] = { 104,227,235,254,163,30,39,205,239,190,248,241,29,252,143,241,5,45,239,176, 58,155,57,156,76,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_122 = 2956; -static unsigned char xml_res_file_122[] = { +static size_t xml_res_size_124 = 2956; +static unsigned char xml_res_file_124[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58550,8 +60542,8 @@ static unsigned char xml_res_file_122[] = { 69,6,148,4,51,243,218,91,175,230,121,46,67,198,7,239,222,156,131,191,235, 13,56,77,128,25,212,54,247,122,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_123 = 2916; -static unsigned char xml_res_file_123[] = { +static size_t xml_res_size_125 = 2916; +static unsigned char xml_res_file_125[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58695,8 +60687,8 @@ static unsigned char xml_res_file_123[] = { 72,109,109,183,3,146,82,249,70,233,29,154,39,93,218,165,55,84,133,61,252, 202,78,196,229,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_124 = 3007; -static unsigned char xml_res_file_124[] = { +static size_t xml_res_size_126 = 3007; +static unsigned char xml_res_file_126[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58845,8 +60837,8 @@ static unsigned char xml_res_file_124[] = { 253,128,239,189,121,250,223,166,7,168,200,66,0,92,21,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_125 = 2972; -static unsigned char xml_res_file_125[] = { +static size_t xml_res_size_127 = 2972; +static unsigned char xml_res_file_127[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, 108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, @@ -58993,8 +60985,8 @@ static unsigned char xml_res_file_125[] = { 233,163,32,229,14,144,36,155,132,227,169,0,224,6,75,176,82,4,189,106,152, 148,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_126 = 10216; -static unsigned char xml_res_file_126[] = { +static size_t xml_res_size_128 = 10216; +static unsigned char xml_res_file_128[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, 62,10,60,114,101,115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99, @@ -59536,88 +61528,90 @@ void GdaInitXmlResource() XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_19.png"), xml_res_file_42, xml_res_size_42, wxT("image/png")); XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_20.png"), xml_res_file_43, xml_res_size_43, wxT("image/png")); XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_20.png"), xml_res_file_44, xml_res_size_44, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_21.png"), xml_res_file_45, xml_res_size_45, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_21.png"), xml_res_file_46, xml_res_size_46, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_22.png"), xml_res_file_47, xml_res_size_47, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_22.png"), xml_res_file_48, xml_res_size_48, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_23.png"), xml_res_file_49, xml_res_size_49, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_23.png"), xml_res_file_50, xml_res_size_50, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_25.png"), xml_res_file_51, xml_res_size_51, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_25.png"), xml_res_file_52, xml_res_size_52, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_26.png"), xml_res_file_53, xml_res_size_53, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_26.png"), xml_res_file_54, xml_res_size_54, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_27.png"), xml_res_file_55, xml_res_size_55, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_27.png"), xml_res_file_56, xml_res_size_56, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_28.png"), xml_res_file_57, xml_res_size_57, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_29.png"), xml_res_file_58, xml_res_size_58, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_30.png"), xml_res_file_59, xml_res_size_59, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_31.png"), xml_res_file_60, xml_res_size_60, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_32.png"), xml_res_file_61, xml_res_size_61, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_33.png"), xml_res_file_62, xml_res_size_62, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_34.png"), xml_res_file_63, xml_res_size_63, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_36.png"), xml_res_file_64, xml_res_size_64, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$toolbar.xrc"), xml_res_file_65, xml_res_size_65, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-open-folder.png"), xml_res_file_66, xml_res_size_66, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-open-folder_disabled.png"), xml_res_file_67, xml_res_size_67, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-close-folder.png"), xml_res_file_68, xml_res_size_68, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-close-folder_disabled.png"), xml_res_file_69, xml_res_size_69, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_36.png"), xml_res_file_70, xml_res_size_70, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_36_disabled.png"), xml_res_file_71, xml_res_size_71, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_2.png"), xml_res_file_72, xml_res_size_72, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_2_disabled.png"), xml_res_file_73, xml_res_size_73, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_4.png"), xml_res_file_74, xml_res_size_74, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_4_disabled.png"), xml_res_file_75, xml_res_size_75, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_5.png"), xml_res_file_76, xml_res_size_76, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_5_disabled.png"), xml_res_file_77, xml_res_size_77, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_6.png"), xml_res_file_78, xml_res_size_78, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_6_disabled.png"), xml_res_file_79, xml_res_size_79, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_9.png"), xml_res_file_80, xml_res_size_80, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_9_disabled.png"), xml_res_file_81, xml_res_size_81, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_10.png"), xml_res_file_82, xml_res_size_82, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_10_disabled.png"), xml_res_file_83, xml_res_size_83, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_14.png"), xml_res_file_84, xml_res_size_84, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_14_disabled.png"), xml_res_file_85, xml_res_size_85, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_12.png"), xml_res_file_86, xml_res_size_86, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_12_disabled.png"), xml_res_file_87, xml_res_size_87, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_13.png"), xml_res_file_88, xml_res_size_88, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_13_disabled.png"), xml_res_file_89, xml_res_size_89, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_15.png"), xml_res_file_90, xml_res_size_90, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_15_disabled.png"), xml_res_file_91, xml_res_size_91, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_17.png"), xml_res_file_92, xml_res_size_92, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_17_disabled.png"), xml_res_file_93, xml_res_size_93, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_16.png"), xml_res_file_94, xml_res_size_94, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_16_disabled.png"), xml_res_file_95, xml_res_size_95, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_18.png"), xml_res_file_96, xml_res_size_96, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_18_disabled.png"), xml_res_file_97, xml_res_size_97, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_19.png"), xml_res_file_98, xml_res_size_98, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_19_disabled.png"), xml_res_file_99, xml_res_size_99, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_20.png"), xml_res_file_100, xml_res_size_100, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_20_disabled.png"), xml_res_file_101, xml_res_size_101, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_21.png"), xml_res_file_102, xml_res_size_102, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_21_disabled.png"), xml_res_file_103, xml_res_size_103, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_22.png"), xml_res_file_104, xml_res_size_104, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_22_disabled.png"), xml_res_file_105, xml_res_size_105, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_23.png"), xml_res_file_106, xml_res_size_106, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_23_disabled.png"), xml_res_file_107, xml_res_size_107, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_24.png"), xml_res_file_108, xml_res_size_108, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_24_disabled.png"), xml_res_file_109, xml_res_size_109, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_25.png"), xml_res_file_110, xml_res_size_110, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_25_disabled.png"), xml_res_file_111, xml_res_size_111, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_26.png"), xml_res_file_112, xml_res_size_112, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_26_disabled.png"), xml_res_file_113, xml_res_size_113, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_27.png"), xml_res_file_114, xml_res_size_114, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_27_disabled.png"), xml_res_file_115, xml_res_size_115, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_28.png"), xml_res_file_116, xml_res_size_116, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_28_disabled.png"), xml_res_file_117, xml_res_size_117, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_29.png"), xml_res_file_118, xml_res_size_118, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_29_disabled.png"), xml_res_file_119, xml_res_size_119, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_30.png"), xml_res_file_120, xml_res_size_120, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_30_disabled.png"), xml_res_file_121, xml_res_size_121, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_31.png"), xml_res_file_122, xml_res_size_122, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_31_disabled.png"), xml_res_file_123, xml_res_size_123, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_32.png"), xml_res_file_124, xml_res_size_124, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_32_disabled.png"), xml_res_file_125, xml_res_size_125, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$panel.xrc"), xml_res_file_126, xml_res_size_126, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_38.png"), xml_res_file_45, xml_res_size_45, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_38.png"), xml_res_file_46, xml_res_size_46, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_21.png"), xml_res_file_47, xml_res_size_47, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_21.png"), xml_res_file_48, xml_res_size_48, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_22.png"), xml_res_file_49, xml_res_size_49, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_22.png"), xml_res_file_50, xml_res_size_50, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_23.png"), xml_res_file_51, xml_res_size_51, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_23.png"), xml_res_file_52, xml_res_size_52, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_25.png"), xml_res_file_53, xml_res_size_53, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_25.png"), xml_res_file_54, xml_res_size_54, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_26.png"), xml_res_file_55, xml_res_size_55, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_26.png"), xml_res_file_56, xml_res_size_56, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_27.png"), xml_res_file_57, xml_res_size_57, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_27.png"), xml_res_file_58, xml_res_size_58, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_28.png"), xml_res_file_59, xml_res_size_59, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_29.png"), xml_res_file_60, xml_res_size_60, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_30.png"), xml_res_file_61, xml_res_size_61, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_31.png"), xml_res_file_62, xml_res_size_62, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_32.png"), xml_res_file_63, xml_res_size_63, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_33.png"), xml_res_file_64, xml_res_size_64, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_34.png"), xml_res_file_65, xml_res_size_65, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_36.png"), xml_res_file_66, xml_res_size_66, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$toolbar.xrc"), xml_res_file_67, xml_res_size_67, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-open-folder.png"), xml_res_file_68, xml_res_size_68, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-open-folder_disabled.png"), xml_res_file_69, xml_res_size_69, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-close-folder.png"), xml_res_file_70, xml_res_size_70, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBar-close-folder_disabled.png"), xml_res_file_71, xml_res_size_71, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_36.png"), xml_res_file_72, xml_res_size_72, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_36_disabled.png"), xml_res_file_73, xml_res_size_73, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_2.png"), xml_res_file_74, xml_res_size_74, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_2_disabled.png"), xml_res_file_75, xml_res_size_75, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_4.png"), xml_res_file_76, xml_res_size_76, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_4_disabled.png"), xml_res_file_77, xml_res_size_77, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_5.png"), xml_res_file_78, xml_res_size_78, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_5_disabled.png"), xml_res_file_79, xml_res_size_79, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_6.png"), xml_res_file_80, xml_res_size_80, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_6_disabled.png"), xml_res_file_81, xml_res_size_81, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_9.png"), xml_res_file_82, xml_res_size_82, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_9_disabled.png"), xml_res_file_83, xml_res_size_83, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_10.png"), xml_res_file_84, xml_res_size_84, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_10_disabled.png"), xml_res_file_85, xml_res_size_85, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_14.png"), xml_res_file_86, xml_res_size_86, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_14_disabled.png"), xml_res_file_87, xml_res_size_87, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_12.png"), xml_res_file_88, xml_res_size_88, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_12_disabled.png"), xml_res_file_89, xml_res_size_89, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_13.png"), xml_res_file_90, xml_res_size_90, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_13_disabled.png"), xml_res_file_91, xml_res_size_91, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_15.png"), xml_res_file_92, xml_res_size_92, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_15_disabled.png"), xml_res_file_93, xml_res_size_93, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_17.png"), xml_res_file_94, xml_res_size_94, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_17_disabled.png"), xml_res_file_95, xml_res_size_95, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_16.png"), xml_res_file_96, xml_res_size_96, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_16_disabled.png"), xml_res_file_97, xml_res_size_97, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_18.png"), xml_res_file_98, xml_res_size_98, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_18_disabled.png"), xml_res_file_99, xml_res_size_99, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_19.png"), xml_res_file_100, xml_res_size_100, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_19_disabled.png"), xml_res_file_101, xml_res_size_101, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_20.png"), xml_res_file_102, xml_res_size_102, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_20_disabled.png"), xml_res_file_103, xml_res_size_103, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_21.png"), xml_res_file_104, xml_res_size_104, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_21_disabled.png"), xml_res_file_105, xml_res_size_105, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_22.png"), xml_res_file_106, xml_res_size_106, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_22_disabled.png"), xml_res_file_107, xml_res_size_107, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_23.png"), xml_res_file_108, xml_res_size_108, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_23_disabled.png"), xml_res_file_109, xml_res_size_109, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_24.png"), xml_res_file_110, xml_res_size_110, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_24_disabled.png"), xml_res_file_111, xml_res_size_111, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_25.png"), xml_res_file_112, xml_res_size_112, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_25_disabled.png"), xml_res_file_113, xml_res_size_113, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_26.png"), xml_res_file_114, xml_res_size_114, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_26_disabled.png"), xml_res_file_115, xml_res_size_115, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_27.png"), xml_res_file_116, xml_res_size_116, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_27_disabled.png"), xml_res_file_117, xml_res_size_117, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_28.png"), xml_res_file_118, xml_res_size_118, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_28_disabled.png"), xml_res_file_119, xml_res_size_119, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_29.png"), xml_res_file_120, xml_res_size_120, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_29_disabled.png"), xml_res_file_121, xml_res_size_121, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_30.png"), xml_res_file_122, xml_res_size_122, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_30_disabled.png"), xml_res_file_123, xml_res_size_123, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_31.png"), xml_res_file_124, xml_res_size_124, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_31_disabled.png"), xml_res_file_125, xml_res_size_125, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_32.png"), xml_res_file_126, xml_res_size_126, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$ToolBarBitmaps_32_disabled.png"), xml_res_file_127, xml_res_size_127, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$panel.xrc"), xml_res_file_128, xml_res_size_128, wxT("text/xml")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$dialogs.xrc")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$data_viewer_dialogs.xrc")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$menus.xrc")); diff --git a/rc/color/24x24/38.png b/rc/color/24x24/38.png new file mode 100644 index 000000000..06ee5ce15 Binary files /dev/null and b/rc/color/24x24/38.png differ diff --git a/rc/color/32x32/38.png b/rc/color/32x32/38.png new file mode 100644 index 000000000..41c1c9ce7 Binary files /dev/null and b/rc/color/32x32/38.png differ diff --git a/rc/color/64x64/38.png b/rc/color/64x64/38.png new file mode 100644 index 000000000..21a109e00 Binary files /dev/null and b/rc/color/64x64/38.png differ diff --git a/rc/data_viewer_dialogs.xrc b/rc/data_viewer_dialogs.xrc index ec433eaaa..804ab25ae 100644 --- a/rc/data_viewer_dialogs.xrc +++ b/rc/data_viewer_dialogs.xrc @@ -109,7 +109,7 @@ wxHORIZONTAL - wxALIGN_LEFT + wxALIGN_LEFT | wxEXPAND @@ -141,17 +141,17 @@ 23,2d - wxALIGN_RIGHT + wxALIGN_RIGHT | wxEXPAND wxHORIZONTAL - wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTRE_HORIZONTAL + wxLEFT|wxRIGHT|wxEXPAND 15 wxVERTICAL - wxALL|wxEXPAND|wxALIGN_CENTRE_HORIZONTAL + wxALL|wxEXPAND 5 diff --git a/rc/dialogs.xrc b/rc/dialogs.xrc index 111d23f6f..c5c489d5d 100644 --- a/rc/dialogs.xrc +++ b/rc/dialogs.xrc @@ -1128,7 +1128,7 @@ - + wxALIGN_RIGHT|wxALL @@ -1181,7 +1181,7 @@ - + wxALIGN_RIGHT|wxALL @@ -1261,7 +1261,7 @@ - + wxALIGN_RIGHT|wxALL @@ -1341,7 +1341,7 @@ - + wxALIGN_RIGHT|wxALL @@ -1431,7 +1431,7 @@ - + wxALIGN_RIGHT|wxALL @@ -1541,7 +1541,7 @@ - + wxALIGN_RIGHT|wxALL @@ -1674,7 +1674,7 @@ wxALIGN_CENTER_HORIZONTAL|wxALL 5 - + @@ -1828,7 +1828,7 @@ wxALIGN_CENTER_HORIZONTAL|wxALL 5 - + @@ -1939,7 +1939,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2075,7 +2075,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2161,7 +2161,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2267,7 +2267,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2373,7 +2373,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2504,7 +2504,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2658,7 +2658,7 @@ - + wxALIGN_RIGHT|wxALL @@ -2833,7 +2833,7 @@ wxALIGN_CENTER_HORIZONTAL|wxALL 5 - + @@ -3027,7 +3027,7 @@ wxALIGN_CENTER_HORIZONTAL|wxALL 5 - + @@ -3196,7 +3196,7 @@ - + wxALIGN_RIGHT|wxALL @@ -3410,7 +3410,7 @@ - + wxALIGN_RIGHT|wxALL @@ -4183,7 +4183,12 @@ - 50,5d + 10,5d + + + + + wxHORIZONTAL @@ -7567,6 +7572,409 @@ 1 + + + + wxVERTICAL + + + wxHORIZONTAL + + + + + + wxVERTICAL + + 0,40 + + + + 3 + 2 + 0 + 0 + + + + + wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 5 + + + + 172,-1d + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + open-folder.png + + + + + + wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 5 + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 15 + + + dragdrop.png + dragdrop.png + + + + + + 0,40 + + + + + 4,10 + + + + + + + wxHORIZONTAL + + + http://geodacenter.github.io/formats.html + + + + + + + + + + + + + + + + wxVERTICAL + + 0,10 + + + + + + + + 5 + + + + 340,-1 + + + + + + + wxALIGN_CENTRE_HORIZONTAL + 5 + + + + + + + + + 170,-1d + + + + + + + + + + + + + 170,-1d + + + + + + + + + + + 5 + + + + 170,-1d + + + + + + + + + + + + + + 170,-1d + + + + + + + + + + + + + + 170,-1d + + + + + + + + + + + + + + + 170,-1d + 0 + + + + + + + + + + 3 + 8 + 15 + 10 + + wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL + + + + + + + + + wxVERTICAL + + 0,50 + + + + + + 56,-1d + + GeoJson URL + WFS URL + + 0 + + wxALIGN_CENTRE_VERTICAL + 5 + + + + 200,-1d + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + + 4 + 2 + 0 + 0 + + wxTOP + + + + + + + + + wxVERTICAL + + 0,40 + + + + + + + + 5 + + + + 130,-1 + + + + + wxALIGN_CENTRE_HORIZONTAL + 5 + + + + + + + + + 130,-1d + + + + + + + + + + + + + 130,-1d + + + + + + 3 + 5 + 15 + 10 + + wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL + + + 0,40 + + + + + 4,10 + + + + + + + wxHORIZONTAL + + + https://www.carto.com/ + + + + + + + + wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL + + + + + + 560,340 + + + wxALL + 5 + + + + + + + wxVERTICAL + + 0,0 + + + wxALL|wxALIGN_CENTER_HORIZONTAL + + + + + + 0 + + wxRIGHT|wxALIGN_RIGHT + 30 + + + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + wxGROW|wxALL + 5 + + + + + wxHORIZONTAL + + wxALIGN_CENTRE_HORIZONTAL | wxALL + 5 + + + Connect to Data Source + 1 + + + wxVERTICAL diff --git a/rc/gray/24x24/38.png b/rc/gray/24x24/38.png new file mode 100644 index 000000000..e081ed179 Binary files /dev/null and b/rc/gray/24x24/38.png differ diff --git a/rc/gray/32x32/38.png b/rc/gray/32x32/38.png new file mode 100644 index 000000000..498125cad Binary files /dev/null and b/rc/gray/32x32/38.png differ diff --git a/rc/gray/64x64/38.png b/rc/gray/64x64/38.png new file mode 100644 index 000000000..aaf8eb17a Binary files /dev/null and b/rc/gray/64x64/38.png differ diff --git a/rc/menus.xrc b/rc/menus.xrc index 88d60f065..ec2f313ba 100644 --- a/rc/menus.xrc +++ b/rc/menus.xrc @@ -408,6 +408,18 @@ + + + + + + + + + + + + @@ -416,6 +428,9 @@ + + + @@ -426,6 +441,9 @@ + + + @@ -438,8 +456,16 @@ - - + + + + + + + + + + @@ -2629,25 +2655,32 @@ - - - 1 - 1 - - - - 1 - 0 - - - - - - - 1 - 1 + + + + + 1 + 0 + + + + 1 + 1 + + + + 1 + 0 + + + + + + + 1 + 1 + - @@ -4148,12 +4181,27 @@ + + + + + + + + + + + + + + + @@ -4166,6 +4214,9 @@ + + + @@ -4179,6 +4230,15 @@ + + + + + + + + + diff --git a/rc/toolbar.xrc b/rc/toolbar.xrc index 6442d10b1..14f12f248 100644 --- a/rc/toolbar.xrc +++ b/rc/toolbar.xrc @@ -94,6 +94,11 @@ gray/32x32/20.png Conditional Plot + + color/32x32/38.png + gray/32x32/38.png + Clusters + color/32x32/21.png diff --git a/swig/GNUmakefile b/swig/GNUmakefile new file mode 100644 index 000000000..e72fae931 --- /dev/null +++ b/swig/GNUmakefile @@ -0,0 +1,16 @@ + +include ../GeoDamake.opt + +#include ./file.lst + +CPPFLAGS := $(CPPFLAGS) +CXXFLAGS := $(CXXFLAGS) + +CXX_SRCS := $(wildcard *.cpp) +OBJ := ${CXX_SRCS:.cpp=.o} + +default: $(O_OBJ:.o=.$(OBJ_EXT)) + +clean: + rm -f *.o + diff --git a/swig/OGRLayerProxy.cpp b/swig/OGRLayerProxy.cpp new file mode 100644 index 000000000..61e41d67e --- /dev/null +++ b/swig/OGRLayerProxy.cpp @@ -0,0 +1,1155 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#include "../ShpFile.h" +#include "../GdaException.h" +#include "../logger.h" +#include "../GeneralWxUtils.h" +#include "../GdaShape.h" +#include "../GdaCartoDB.h" +#include "../GdaException.h" + +#include "OGRLayerProxy.h" +#include "OGRFieldProxy.h" + + +using namespace std; + +/** + * Create a OGRLayerProxy from an existing OGRLayer + */ +OGRLayerProxy::OGRLayerProxy(string layer_name, + OGRLayer* _layer, + GdaConst::DataSourceType _ds_type, + bool isNew) +: n_rows(0), n_cols(0), name(layer_name),ds_type(_ds_type), layer(_layer), +load_progress(0), stop_reading(false), export_progress(0) +{ + if (!isNew) n_rows = layer->GetFeatureCount(FALSE); + is_writable = layer->TestCapability(OLCCreateField) != 0; + + eGType = layer->GetGeomType(); + spatialRef = layer->GetSpatialRef(); + + // get feature definition + featureDefn = layer->GetLayerDefn(); + n_cols = featureDefn->GetFieldCount(); + ReadFieldInfo(); +} + +/** + * Create a OGRLayerProxy from an existing OGRLayer + */ +OGRLayerProxy::OGRLayerProxy(OGRLayer* _layer, + GdaConst::DataSourceType _ds_type, + OGRwkbGeometryType eGType, + int _n_rows) +: layer(_layer), name(_layer->GetName()), ds_type(_ds_type), n_rows(_n_rows), +eLayerType(eGType), load_progress(0), stop_reading(false) +{ + if (n_rows==0) { + n_rows = layer->GetFeatureCount(); + } + + is_writable = layer->TestCapability(OLCCreateField) != 0; + + // get feature definition + featureDefn = layer->GetLayerDefn(); + n_cols = featureDefn->GetFieldCount(); + ReadFieldInfo(); +} + +OGRLayerProxy::~OGRLayerProxy() +{ + // clean OGR features + for ( size_t i=0; i < data.size(); ++i ) { + OGRFeature::DestroyFeature(data[i]); + } + data.clear(); + // we don't need to clean OGR fields + for ( size_t i=0; i < fields.size(); ++i ) { + delete fields[i]; + } + fields.clear(); +} + +void OGRLayerProxy::SetOGRLayer(OGRLayer* new_layer) +{ + layer = new_layer; +} + +bool OGRLayerProxy::ReadFieldInfo() +{ + for (int col_idx=0; col_idxGetFieldDefn(col_idx); + OGRFieldProxy *fieldProxy = new OGRFieldProxy(fieldDefn); + this->fields.push_back(fieldProxy); + } + return true; +} + +void OGRLayerProxy::GetVarTypeMap(vector& var_list, + map& var_type_map) +{ + // Get field/variable list of current ogr_layer, store in var_list vector + // Get field/variable:(its type) pair of current ogr_layer, store in map + for( int i=0; i< n_cols; i++) { + wxString var = fields[i]->GetName(); + var_list.push_back( var ); + var_type_map[ var ] = fields[i]->GetType(); + } +} + +wxString OGRLayerProxy::GetFieldName(int pos) +{ + return fields[pos]->GetName(); +} + +void OGRLayerProxy::SetFieldName(int pos, const wxString& new_fname) +{ + fields[pos]->SetName(new_fname); +} + +GdaConst::FieldType OGRLayerProxy::GetFieldType(int pos) +{ + return fields[pos]->GetType(); +} + +GdaConst::FieldType OGRLayerProxy::GetFieldType(const wxString& field_name) +{ + return GetFieldType( GetFieldPos(field_name)); +} + +int OGRLayerProxy::GetFieldLength(int pos) +{ + return fields[pos]->GetLength(); +} + +void OGRLayerProxy::SetFieldLength(int pos, int new_len) +{ + fields[pos]->SetLength(new_len); +} + +void OGRLayerProxy::SetFieldDecimals(int pos, int new_dec) +{ + fields[pos]->SetDecimals(new_dec); +} + +int OGRLayerProxy::GetFieldDecimals(int pos) +{ + return fields[pos]->GetDecimals(); +} + +int OGRLayerProxy::GetFieldPos(const wxString& field_name) +{ + for (size_t i=0, iend=fields.size(); iGetName().CmpNoCase(field_name)==0) return i; + } + return -1; +} + +OGRFieldType OGRLayerProxy::GetOGRFieldType(GdaConst::FieldType field_type) +{ + OGRFieldType ogr_type = OFTString; // default OFTString + if (field_type == GdaConst::string_type){ + ogr_type = OFTString; + } + else if (field_type == GdaConst::long64_type) { + ogr_type = OFTInteger64; + } + else if (field_type == GdaConst::double_type) { + ogr_type = OFTReal; + } + else if (field_type == GdaConst::date_type) { + ogr_type = OFTDate; + } + else if (field_type == GdaConst::time_type) { + ogr_type = OFTTime; + } + else if (field_type == GdaConst::datetime_type) { + ogr_type = OFTDateTime; + } + return ogr_type; +} + +bool OGRLayerProxy::IsFieldExisted(const wxString& field_name) +{ + // check if field existed by given field name + std::vector::iterator it; + for (it = fields.begin(); it!=fields.end(); it++){ + if (field_name.CmpNoCase((*it)->GetName()) == 0 ){ + return true; + } + } + return false; +} + +void OGRLayerProxy::UpdateFieldProperties(int col) +{ + OGRFieldProxy *field_proxy = fields[col]; + if ( !field_proxy->IsChanged()) return; + + field_proxy->Update(); + if ( layer->AlterFieldDefn(col, field_proxy->GetFieldDefn(), + ALTER_WIDTH_PRECISION_FLAG)!= OGRERR_NONE ) { + wxString msg; + msg << "Change field properties (" << name <<") failed."; + msg << "\n\nDetails:" << CPLGetLastErrorMsg(); + throw GdaException(msg.mb_str()); + } +} + +int OGRLayerProxy::AddField(const wxString& field_name, + GdaConst::FieldType field_type, + int field_length, + int field_precision) +{ + // check if field existed + if (IsFieldExisted(field_name)) { + wxString msg; + msg << "Field (" << field_name <<") already exited."; + throw GdaException(msg.mb_str()); + } + OGRFieldType ogr_type = GetOGRFieldType(field_type); + OGRFieldProxy *oField = new OGRFieldProxy(field_name, ogr_type, + field_length, field_precision); + if ( layer->CreateField( oField->GetFieldDefn() ) != OGRERR_NONE ) { + wxString msg; + msg << "Internal Error: Add new field (" << field_name <<") failed." + << "\n\nDetails:" << CPLGetLastErrorMsg(); + throw GdaException(msg.mb_str()); + } + n_cols++; + // Add this new field to OGRFieldProxy + this->fields.push_back(oField); + return n_cols-1; +} + +void OGRLayerProxy::DeleteField(int pos) +{ + /* + // remove this field in local OGRFeature vector + for (size_t i=0; i < data.size(); ++i) { + OGRFeature* my_feature = data[i]; + my_feature->DeleteField(pos); + } + // delete field in actual datasource + if( this->layer->DeleteField(pos) != OGRERR_NONE ) { + wxString msg; + msg << "Internal Error: Delete field failed." + << "\n\nDetails:" << CPLGetLastErrorMsg(); + throw GdaException(msg.mb_str()); + } + n_cols--; + // remove this field from OGRFieldProxy + this->fields.erase( fields.begin() + pos ); + */ + this->fields.erase( fields.begin() + pos ); +} + +void OGRLayerProxy::DeleteField(const wxString& field_name) +{ + int pos = this->GetFieldPos(field_name); + DeleteField(pos); +} + +bool OGRLayerProxy::IsTableOnly() +{ + if ( !data.empty() ) { + OGRGeometry* geom = data[0]->GetGeometryRef(); + if (geom != NULL) + return false; + } + return true; +} + +bool OGRLayerProxy::UpdateOGRFeature(OGRFeature* feature) +{ + if (layer->SetFeature(feature) == OGRERR_NONE) + return true; + return false; +} + +bool OGRLayerProxy::AppendOGRFeature(std::vector& content) +{ + OGRFeature *feature = OGRFeature::CreateFeature(layer->GetLayerDefn()); + feature->SetFrom( data[0]); + for (size_t i=0; i < content.size(); i++){ + feature->SetField(i, content[i].c_str()); + } + if(layer->CreateFeature( feature ) != OGRERR_NONE) { + return false; + } + n_rows++; + return true; +} + + +bool OGRLayerProxy::CallCartoDBAPI(wxString url) +{ + return true; +} + +bool OGRLayerProxy::UpdateColumn(int col_idx, vector &vals) +{ + if (ds_type == GdaConst::ds_cartodb) { + // update column using CARTODB_API directly, avoid single UPDATE clause + string col_name(GetFieldName(col_idx).mb_str()); + CartoDBProxy::GetInstance().UpdateColumn(name, col_name, vals); + + // update memory still + for (int rid=0; rid < n_rows; rid++) { + data[rid]->SetField(col_idx, vals[rid]); + } + + } else { + for (int rid=0; rid < n_rows; rid++) { + SetValueAt(rid, col_idx, vals[rid]); + } + } + return true; + +} +bool OGRLayerProxy::UpdateColumn(int col_idx, vector &vals) +{ + if (ds_type == GdaConst::ds_cartodb) { + // update column using CARTODB_API directly, avoid single UPDATE clause + string col_name(GetFieldName(col_idx).mb_str()); + CartoDBProxy::GetInstance().UpdateColumn(name, col_name, vals); + + // update memory still + for (int rid=0; rid < n_rows; rid++) { + data[rid]->SetField(col_idx, (GIntBig)vals[rid]); + } + + } else { + for (int rid=0; rid < n_rows; rid++) { + SetValueAt(rid, col_idx, (GIntBig)vals[rid]); + } + } + return true; +} + +bool OGRLayerProxy::UpdateColumn(int col_idx, vector &vals) +{ + if (ds_type == GdaConst::ds_cartodb) { + // update column using CARTODB_API directly, avoid single UPDATE clause + string col_name(GetFieldName(col_idx).mb_str()); + CartoDBProxy::GetInstance().UpdateColumn(name, col_name, vals); + + // update memory still + for (int rid=0; rid < n_rows; rid++) { + data[rid]->SetField(col_idx, vals[rid].mb_str()); + } + + } else { + for (int rid=0; rid < n_rows; rid++) { + SetValueAt(rid, col_idx, vals[rid].mb_str()); + } + } + return true; +} + +void +OGRLayerProxy::AddFeatures(vector& geometries, + TableInterface* table, + vector& selected_rows) +{ + export_progress = 0; + stop_exporting = false; + + // Create features in memory first + for (size_t i=0; iSetGeometryDirectly( geometries[i] ); + } + data.push_back(poFeature); + } + + int export_size = data.size()==0 ? table->GetNumberRows() : data.size(); + export_progress = export_size / 4; + + bool ignore_case = false; + + if (ds_type == GdaConst::ds_postgresql || + ds_type == GdaConst::ds_sqlite) { + ignore_case = true; + } + + // Fill the feature with content + if (table != NULL) { + // fields already have been created by OGRDatasourceProxy::CreateLayer() + for (size_t j=0; j< fields.size(); j++) { + + wxString fname = fields[j]->GetName(); + GdaConst::FieldType ftype = fields[j]->GetType(); + + // get underneath column position (no group and time =0) + int col_pos = table->GetColIdx(fname, ignore_case); + + if (col_pos < 0) { + //wxString msg = wxString::Format(_(" Save column %s failed. Please check your data, or contact GeoDa team."), fname); + //error_message << msg; + //export_progress = -1; + //return; + continue; + } + + vector undefs; + + if ( ftype == GdaConst::long64_type) { + + vector col_data; + table->GetDirectColData(col_pos, col_data); + table->GetDirectColUndefined(col_pos, undefs); + + for (size_t k=0; kUnsetField(j); + } else { + data[k]->SetField(j, (GIntBig)(col_data[orig_id])); + } + if (stop_exporting) + return; + } + + } else if (ftype == GdaConst::double_type) { + + vector col_data; + table->GetDirectColData(col_pos, col_data); + table->GetDirectColUndefined(col_pos, undefs); + + for (size_t k=0; kUnsetField(j); + } else { + data[k]->SetField(j, col_data[orig_id]); + } + if (stop_exporting) + return; + } + + } else if (ftype == GdaConst::date_type || + ftype == GdaConst::time_type || + ftype == GdaConst::datetime_type ) { + + vector col_data; + table->GetDirectColData(col_pos, col_data); + table->GetDirectColUndefined(col_pos, undefs); + + for (size_t k=0; kUnsetField(j); + } else { + data[k]->SetField(j, year, month, day, hour, minute, second); + } + if (stop_exporting) return; + } + + } else if (ftype == GdaConst::placeholder_type) { + // KML case: there are by default two fields: + // [Name, Description], so if placeholder that + // means table is empty. Then do nothing + + } else { + // others are treated as string_type + // XXX encodings + vector col_data; + table->GetDirectColData(col_pos, col_data); + table->GetDirectColUndefined(col_pos, undefs); + + if (ds_type == GdaConst::ds_csv) { + for (int m=0; mUnsetField(j); + } else { + data[k]->SetField(j, col_data[orig_id].mb_str()); + } + if (stop_exporting) return; + } + } + if (stop_exporting) return; + } + } + export_progress = export_size / 2; + + int n_data = data.size(); + for (int i=0; iCreateFeature( data[i] ) != OGRERR_NONE ) { + wxString msg = wxString::Format(" Failed to create feature (%d/%d).", i + 1, n_data); + error_message << msg << CPLGetLastErrorMsg(); + export_progress = -1; + return; + } + } + Save(); + export_progress = export_size; +} + +bool OGRLayerProxy::InsertOGRFeature() +{ + wxString msg; + msg << "GeoDa does not support InsertOGRFeature yet."; + throw GdaException(msg); + return false; +} + +void OGRLayerProxy::Save() +{ + if(layer->SyncToDisk() != OGRERR_NONE){ + wxString msg; + msg << "Internal Error: Save OGR layer (" << name <<") failed." + << "\n\nDetails:"<< CPLGetLastErrorMsg(); + throw GdaException(msg.mb_str()); + } +} + +bool OGRLayerProxy::HasError() +{ + return !error_message.str().empty(); +} + +bool OGRLayerProxy::ReadData() +{ + if (n_rows > 0 && n_rows == data.size()) { + // if data already been read, skip + return true; + } + if (n_rows == 0) { + // in some case ArcSDE plugin can't return proper row number from + // SDE engine. we will count it feature by feature + n_rows = -1; + } + int row_idx = 0; + OGRFeature *feature = NULL; + map feature_dict; + + layer->ResetReading(); + while ((feature = layer->GetNextFeature()) != NULL) { + if (feature == NULL) { + error_message << "GeoDa can't read data from datasource." + << "\n\nDetails:"<< CPLGetLastErrorMsg(); + return false; + } + + // thread feature: user can stop reading + if (stop_reading) + break; + + //long fid = feature->GetFID(); + feature_dict[row_idx] = feature; + + // keep load_progress not 100%, so that it can finish this function + load_progress = row_idx++; + } + if (row_idx == 0) { + error_message << "GeoDa can't read data from datasource." + << "\n\nDetails: Datasource is empty. "<< CPLGetLastErrorMsg(); + + return false; + } + n_rows = row_idx; + + // check empty rows at the end of table, remove empty rows #563 + for (int i = n_rows-1; i>=0; i--) { + OGRFeature* my_feature = feature_dict[i]; + bool is_empty = true; + for (int j= 0; jIsFieldSet(j)) { + is_empty = false; + break; + } + } + if (is_empty) { + OGRGeometry* my_geom = my_feature->GetGeometryRef(); + if (my_geom == NULL) { + n_rows -= 1; + } + } + } + // create copies of OGRFeatures + for (int i = 0; i < n_rows; i++) { + OGRFeature* my_feature = feature_dict[i]->Clone(); + data.push_back(my_feature); + OGRFeature::DestroyFeature(feature_dict[i]); + } + + load_progress = row_idx; + feature_dict.clear(); + + return true; +} + +void OGRLayerProxy::GetExtent(Shapefile::Main& p_main, + Shapefile::PointContents* pc, int row_idx) +{ + if (row_idx==0) { + p_main.header.bbox_x_min = pc->x; + p_main.header.bbox_y_min = pc->x; + p_main.header.bbox_x_max = pc->y; + p_main.header.bbox_y_max = pc->y; + } else { + if (pc->x < p_main.header.bbox_x_min) + p_main.header.bbox_x_min = pc->x; + if (pc->x > p_main.header.bbox_x_max) + p_main.header.bbox_x_max = pc->x; + if (pc->y < p_main.header.bbox_y_min) + p_main.header.bbox_y_min = pc->y; + if (pc->y > p_main.header.bbox_y_max) + p_main.header.bbox_y_max = pc->y; + } +} + +void OGRLayerProxy::GetExtent(Shapefile::Main& p_main, + Shapefile::PolygonContents* pc, int row_idx) +{ + if (row_idx==0) { + p_main.header.bbox_x_min = pc->box[0]; + p_main.header.bbox_y_min = pc->box[1]; + p_main.header.bbox_x_max = pc->box[2]; + p_main.header.bbox_y_max = pc->box[3]; + } else { + if (pc->box[0] < p_main.header.bbox_x_min) + p_main.header.bbox_x_min = pc->box[0]; + if (pc->box[2] > p_main.header.bbox_x_max) + p_main.header.bbox_x_max = pc->box[2]; + if (pc->box[1] < p_main.header.bbox_y_min) + p_main.header.bbox_y_min = pc->box[1]; + if (pc->box[3] > p_main.header.bbox_y_max) + p_main.header.bbox_y_max = pc->box[3]; + } +} + +void OGRLayerProxy::CopyEnvelope(OGRPolygon* p, Shapefile::PolygonContents* pc) +{ + OGREnvelope pEnvelope; + p->getEnvelope(&pEnvelope); + pc->box[0] = pEnvelope.MinX; + pc->box[1] = pEnvelope.MinY; + pc->box[2] = pEnvelope.MaxX; + pc->box[3] = pEnvelope.MaxY; +} + +bool OGRLayerProxy::AddGeometries(Shapefile::Main& p_main) +{ + // NOTE: OGR/GDAL 2.0 is still implementing addGeomField feature. + // So, we only support limited datasources for adding geometries. + if ( !(ds_type == GdaConst::ds_geo_json || + ds_type == GdaConst::ds_gml || + ds_type == GdaConst::ds_kml || + ds_type == GdaConst::ds_sqlite || + ds_type == GdaConst::ds_gpkg) ) + { + return false; + } + + //create geometry field + int n_geom = p_main.records.size(); + if (n_geom < n_rows) + return false; + + vector geometries; + Shapefile::ShapeType shape_type = Shapefile::NULL_SHAPE; + int num_geometries = p_main.records.size(); + if ( p_main.header.shape_type == Shapefile::POINT_TYP) { + Shapefile::PointContents* pc; + for (int i=0; ix, pc->y))); + } + shape_type = Shapefile::POINT_TYP; + + } else if (p_main.header.shape_type == Shapefile::POLYGON) { + Shapefile::PolygonContents* pc; + for (int i=0; i < num_geometries; i++) { + pc = (Shapefile::PolygonContents*)p_main.records[i].contents_p; + geometries.push_back(new GdaPolygon(pc)); + } + shape_type = Shapefile::POLYGON; + } + + for (int id=0; id < n_geom; id++) { + if ( shape_type == Shapefile::POINT_TYP ) { + OGRwkbGeometryType eGType = wkbPoint; + GdaPoint* pc = (GdaPoint*) geometries[id]; + OGRPoint pt; + if (!pc->isNull()) { + pt.setX( pc->GetX() ); + pt.setY( pc->GetY() ); + } + data[id]->SetGeometry( &pt); + } else if ( shape_type == Shapefile::POLYGON ) { + GdaPolygon* poly = (GdaPolygon*) geometries[id]; + if (poly->isNull()) { + // special case for null polygon + OGRPolygon polygon; + data[id]->SetGeometry(&polygon); + } else { + int numParts = poly->n_count; + int numPoints = poly->n; + // for shp/dbf reading, GdaPolygon still use "pc", which is from + // main data, see Shapefile::Main + if ( numParts == 1 ) { + OGRwkbGeometryType eGType = wkbPolygon; + OGRPolygon polygon; + OGRLinearRing ring; + double x, y; + for ( int j = 0; j < numPoints; j++ ) { + if ( poly->points_o != NULL ) { + x = poly->points_o[j].x; + y = poly->points_o[j].y; + } else { + x = poly->pc->points[j].x; + y = poly->pc->points[j].y; + } + ring.addPoint(x,y); + } + ring.closeRings(); + polygon.addRing(&ring); + data[id]->SetGeometry(&polygon); + } else if ( numParts > 1 ) { + OGRwkbGeometryType eGType = wkbMultiPolygon; + OGRMultiPolygon multi_polygon; + for ( int num_part = 0; num_part < numParts; num_part++ ) { + OGRPolygon polygon; + OGRLinearRing ring; + std::vector startIndexes = poly->pc->parts; + startIndexes.push_back(numPoints); + for ( int j = startIndexes[num_part]; + j < startIndexes[num_part+1]; j++ ) { + double x = poly->pc->points[j].x; + double y = poly->pc->points[j].y; + ring.addPoint(x,y); + } + ring.closeRings(); + polygon.addRing(&ring); + multi_polygon.addGeometry(&polygon); + } + data[id]->SetGeometry(&multi_polygon); + } + } + } + layer->SetFeature(data[id]); + } + return true; +} + +bool OGRLayerProxy::GetExtent(double& minx, double& miny, + double& maxx, double& maxy) +{ + OGREnvelope pEnvelope; + layer->GetExtent(&pEnvelope); + minx = pEnvelope.MinX; + miny = pEnvelope.MinY; + maxx = pEnvelope.MaxX; + maxy = pEnvelope.MaxY; + + if ( minx == miny && maxx == maxy && minx == 0 && maxx==0) return false; + return true; +} + +bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) +{ + // get geometry envelope + OGREnvelope pEnvelope; + if (layer->GetExtent(&pEnvelope) == OGRERR_NONE) { + p_main.header.bbox_x_min = pEnvelope.MinX; + p_main.header.bbox_y_min = pEnvelope.MinY; + p_main.header.bbox_x_max = pEnvelope.MaxX; + p_main.header.bbox_y_max = pEnvelope.MaxY; + + } + p_main.header.bbox_z_min = 0; + p_main.header.bbox_z_max = 0; + p_main.header.bbox_m_min = 0; + p_main.header.bbox_m_max = 0; + + // resize geometry records + p_main.records.resize(n_rows); + bool noExtent = (pEnvelope.MinX == pEnvelope.MaxX) && + (pEnvelope.MinY == pEnvelope.MaxY); + noExtent = false; + + //read OGR geometry features + int feature_counter =0; + for ( int row_idx=0; row_idx < n_rows; row_idx++ ) { + OGRFeature* feature = data[row_idx]; + OGRGeometry* geometry= feature->GetGeometryRef(); + OGRwkbGeometryType eType = geometry ? wkbFlatten(geometry->getGeometryType()) : eGType; + // sometime OGR can't return correct value from GetGeomType() call + if (eGType == wkbUnknown) + eGType = eType; + + if (eType == wkbPoint) { + Shapefile::PointContents* pc = new Shapefile::PointContents(); + pc->shape_type = Shapefile::POINT_TYP; + if (geometry) { + if (feature_counter==0) + p_main.header.shape_type = Shapefile::POINT_TYP; + OGRPoint* p = (OGRPoint *) geometry; + pc->x = p->getX(); + pc->y = p->getY(); + if (noExtent) + GetExtent(p_main, pc, row_idx); + } + p_main.records[feature_counter++].contents_p = pc; + + } else if (eType == wkbMultiPoint) { + Shapefile::PointContents* pc = new Shapefile::PointContents(); + pc->shape_type = Shapefile::POINT_TYP; + if (geometry) { + if (feature_counter==0) + p_main.header.shape_type = Shapefile::POINT_TYP; + OGRMultiPoint* mp = (OGRMultiPoint*) geometry; + int n_geom = mp->getNumGeometries(); + for (size_t i = 0; i < n_geom; i++ ) + { + // only consider first point + OGRGeometry* ogrGeom = mp->getGeometryRef(i); + OGRPoint* p = static_cast(ogrGeom); + pc->x = p->getX(); + pc->y = p->getY(); + if (noExtent) + GetExtent(p_main, pc, row_idx); + + } + } + p_main.records[feature_counter++].contents_p = pc; + + } else if (eType == wkbPolygon ) { + Shapefile::PolygonContents* pc = new Shapefile::PolygonContents(); + pc->shape_type = Shapefile::POLYGON; + if (geometry) { + if (feature_counter==0) + p_main.header.shape_type = Shapefile::POLYGON; + OGRPolygon* p = (OGRPolygon *) geometry; + CopyEnvelope(p, pc); + OGRLinearRing* pLinearRing = NULL; + int numPoints= 0; + // interior rings + int ni_rings = p->getNumInteriorRings(); + // resize parts memory, 1 is for exterior ring, + pc->num_parts = ni_rings + 1; + pc->parts.resize(pc->num_parts); + for (size_t j=0; j < pc->num_parts; j++ ) { + pLinearRing = j==0 ? + p->getExteriorRing() : p->getInteriorRing(j-1); + pc->parts[j] = numPoints; + if (pLinearRing) + numPoints += pLinearRing->getNumPoints(); + } + // resize points memory + pc->num_points = numPoints; + pc->points.resize(pc->num_points); + // read points + int i=0; + for (size_t j=0; j < pc->num_parts; j++) { + pLinearRing = j==0 ? + p->getExteriorRing() : p->getInteriorRing(j-1); + if (pLinearRing) + for (size_t k=0; k < pLinearRing->getNumPoints(); k++){ + pc->points[i].x = pLinearRing->getX(k); + pc->points[i++].y = pLinearRing->getY(k); + } + } + if (noExtent) + GetExtent(p_main, pc, row_idx); + } + p_main.records[feature_counter++].contents_p = pc; + + } else if (eType == wkbMultiPolygon) { + Shapefile::PolygonContents* pc = new Shapefile::PolygonContents(); + pc->shape_type = Shapefile::POLYGON; + if (geometry) { + if (feature_counter==0) + p_main.header.shape_type = Shapefile::POLYGON; + OGRMultiPolygon* mpolygon = (OGRMultiPolygon *) geometry; + int n_geom = mpolygon->getNumGeometries(); + // if there is more than one polygon, then we need to count which + // part is processing accumulatively + int part_idx = 0, numPoints = 0; + OGRLinearRing* pLinearRing = NULL; + int pidx =0; + for (size_t i = 0; i < n_geom; i++ ) + { + OGRGeometry* ogrGeom = mpolygon->getGeometryRef(i); + OGRPolygon* p = static_cast(ogrGeom); + if ( i == 0 ) { + CopyEnvelope(p, pc); + } else { + OGREnvelope pBox; + p->getEnvelope(&pBox); + if ( pc->box[0] > pBox.MinX ) pc->box[0] = pBox.MinX; + if ( pc->box[1] > pBox.MinY ) pc->box[1] = pBox.MinY; + if ( pc->box[2] < pBox.MaxX ) pc->box[2] = pBox.MaxX; + if ( pc->box[3] < pBox.MaxY ) pc->box[3] = pBox.MaxY; + } + // number of interior rings + 1 exterior ring + int ni_rings = p->getNumInteriorRings()+1; + pc->num_parts += ni_rings; + pc->parts.resize(pc->num_parts); + + for (size_t j=0; j < ni_rings; j++) { + pLinearRing = j==0 ? + p->getExteriorRing() : p->getInteriorRing(j-1); + pc->parts[part_idx++] = numPoints; + numPoints += pLinearRing->getNumPoints(); + } + // resize points memory + pc->num_points = numPoints; + pc->points.resize(pc->num_points); + // read points + for (size_t j=0; j < ni_rings; j++) { + pLinearRing = j==0 ? + p->getExteriorRing() : p->getInteriorRing(j-1); + for (int k=0; k < pLinearRing->getNumPoints(); k++) { + pc->points[pidx].x = pLinearRing->getX(k); + pc->points[pidx++].y = pLinearRing->getY(k); + } + } + if (noExtent) + GetExtent(p_main, pc, row_idx); + } + } + p_main.records[feature_counter++].contents_p = pc; + + } else { + std::string open_err_msg = "GeoDa does not support datasource with line data at this time. Please choose a datasource with either point or polygon data."; + throw GdaException(open_err_msg.c_str()); + } + } + + return true; +} + +void OGRLayerProxy::T_Export(std::string format, + std::string dest_datasource, + std::string new_layer_name, + bool is_update) +{ + export_progress = 0; + stop_exporting = FALSE; + boost::thread export_thread(boost::bind(&OGRLayerProxy::Export, this, + format, dest_datasource, + new_layer_name, is_update)); +} + +void OGRLayerProxy::T_StopExport() +{ + stop_exporting = TRUE; + export_progress = 0; +} + +void OGRLayerProxy::Export(std::string format, + std::string dest_datasource, + std::string new_layer_name, + bool is_update) +{ + const char* pszFormat = format.c_str(); + const char* pszDestDataSource = dest_datasource.c_str(); + const char* pszNewLayerName = new_layer_name.c_str(); + char** papszDSCO = NULL; + char* pszOutputSRSDef = NULL; + char** papszLCO = NULL; + papszLCO = CSLAddString(papszLCO, "OVERWRITE=yes"); + OGRLayer* poSrcLayer = this->layer; + OGRFeatureDefn *poSrcFDefn = poSrcLayer->GetLayerDefn(); + + // get information from current layer: geomtype, layer_name + // (don't consider coodinator system and translation here) + int bForceToPoint = FALSE; + int bForceToPolygon = FALSE; + int bForceToMultiPolygon = FALSE; + int bForceToMultiLineString = FALSE; + + if( wkbFlatten(eGType) == wkbPoint ) + bForceToPoint = TRUE; + else if(wkbFlatten(eGType) == wkbPolygon) + bForceToPolygon = TRUE; + else if(wkbFlatten(eGType) == wkbMultiPolygon) + bForceToMultiPolygon = TRUE; + else if(wkbFlatten(eGType) == wkbMultiLineString) { + bForceToMultiLineString = TRUE; + } else { // not supported geometry type + export_progress = -1; + return; + } + // Try opening the output datasource as an existing, writable + GDALDataset *poODS = NULL; + + if (is_update == true) { + poODS = (GDALDataset*) GDALOpenEx( pszDestDataSource, + GDAL_OF_VECTOR, NULL, NULL, NULL ); + } else { + // Find the output driver. + GDALDriver *poDriver; + poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat); + + if( poDriver == NULL ) { + // raise driver not supported failure + error_message << "Current OGR dirver " + format + " is not " + << "supported by GeoDa.\n" << CPLGetLastErrorMsg(); + export_progress = -1; + return; + } + + // Create the output data source. + poODS = poDriver->Create(pszDestDataSource, 0, 0, 0, GDT_Unknown, NULL); + } + + if( poODS == NULL ) { + // driver failed to create + // throw GdaException("Can't create output OGR driver."); + error_message << "Can't create output OGR driver." + <<"\n\nDetails:"<< CPLGetLastErrorMsg(); + export_progress = -1; + return; + } + + // Parse the output SRS definition if possible. + OGRSpatialReference *poOutputSRS = this->GetSpatialReference(); + if( pszOutputSRSDef != NULL ) { + poOutputSRS = (OGRSpatialReference*)OSRNewSpatialReference(NULL); + if( poOutputSRS->SetFromUserInput( pszOutputSRSDef ) != OGRERR_NONE){ + // raise failed to process SRS definition: + error_message << "Can't setup SRS spatial definition."; + export_progress = -1; + return; + } + } + if( !poODS->TestCapability( ODsCCreateLayer ) ){ + // "Layer %s not found, and CreateLayer not supported by driver.", + error_message << "Current OGR driver does not support layer creation." + <<"\n" << CPLGetLastErrorMsg(); + export_progress = -1; + return; + } + + // Create Layer + OGRLayer *poDstLayer = poODS->CreateLayer( pszNewLayerName, poOutputSRS, + (OGRwkbGeometryType) eGType, + papszLCO ); + if( poDstLayer == NULL ){ + //Layer creation failed. + error_message << "Creating layer field.\n:" << CPLGetLastErrorMsg(); + export_progress = -1; + return; + } + + // Process Layer style table + poDstLayer->SetStyleTable( poSrcLayer->GetStyleTable() ); + OGRFeatureDefn *poDstFDefn = poDstLayer->GetLayerDefn(); + int nSrcFieldCount = poSrcFDefn->GetFieldCount(); + // Add fields. here to copy all field. + for( int iField = 0; iField < nSrcFieldCount; iField++ ){ + OGRFieldDefn* poSrcFieldDefn = poSrcFDefn->GetFieldDefn(iField); + OGRFieldDefn oFieldDefn( poSrcFieldDefn ); + // The field may have been already created at layer creation + if (poDstLayer->CreateField( &oFieldDefn ) == OGRERR_NONE){ + // now that we've created a field, GetLayerDefn() won't return NULL + if (poDstFDefn == NULL) { + poDstFDefn = poDstLayer->GetLayerDefn(); + } + } + } + + // Create OGR geometry features + for(int row=0; row< this->n_rows; row++){ + if(stop_exporting) return; + export_progress++; + OGRFeature *poFeature; + poFeature = OGRFeature::CreateFeature(poDstLayer->GetLayerDefn()); + poFeature->SetFrom( this->data[row] ); + if (poFeature != NULL){ + if(bForceToPoint) { + poFeature->SetGeometryDirectly( + this->data[row]->StealGeometry() ); + } + else if( bForceToPolygon ) { + poFeature->SetGeometryDirectly( + OGRGeometryFactory::forceToPolygon( + this->data[row]->StealGeometry() ) ); + } + else if( bForceToMultiPolygon ) { + poFeature->SetGeometryDirectly( + OGRGeometryFactory::forceToMultiPolygon( + this->data[row]->StealGeometry() ) ); + } + else if ( bForceToMultiLineString ){ + poFeature->SetGeometryDirectly( + OGRGeometryFactory::forceToMultiLineString( + this->data[row]->StealGeometry() ) ); + } + } + if( poDstLayer->CreateFeature( poFeature ) != OGRERR_NONE ){ + // raise "Failed to create feature in shapefile.\n" + error_message << "Creating feature (" < +%} + +bool CreateQueenWeights(std::string in_file, std::string out_file, int order); +``` + +Second, create python wrapper file using swig: + +``` +swig -python -cxx proxy.i +``` + +Following files will be created: + +-proxy_wrap.cxx +-geoda.py + +To test if the files can be compiled: +``` +gcc -I/home/xun/geoda/BuildTools/centos/libraries/lib/wx/include/gtk3-unicode-static-3.1 -I/home/xun/geoda/BuildTools/centos/libraries/include/wx-3.1 -D_FILE_OFFSET_BITS=64 -DwxDEBUG_LEVEL=0 -D__WXGTK__ -pthread -I/usr/include/python2.7 -c proxy.cpp proxy_wrap.cxx +``` + +Run the following command to create dynamic wrapper +``` +python setup.py build_ext --inplace +CFLAGS='-Wall -O0 -DDEBUG' python setup.py build_ext --inplace --force +``` + +Test cases +``` +python -c 'import geoda;geoda.CreateQueenWeights("nat.shp","nat.gal",1,False);' + +python -c 'import geoda;geoda.CreateRookWeights("nat.shp","nat_rook.gal",1,False);' + +python -c 'import geoda;geoda.CreateKNNWeights("nat.shp","nat_knn.gal", 4);' + +python -c 'import geoda;geoda.CreateKNNWeights("nat.shp","nat_knn.gal", 4, True, False);' + +python -c 'import geoda;geoda.CreateDistanceWeights("nat.shp","nat_dist.gal", 1.465776);' + +python -c 'import geoda;geoda.LISA("nat.gal", n, var1, var2, 0, 999);' + +python -c 'import geoda;geoda.LocalGeary("nat.gal", n, var_list, 999);' +``` + +C++ Test code +``` + int n = 3085; + std::vector > vars; + for (int i=0; i<3; i++) { + std::vector var; + for (int j=0; j var_1; + std::vector var_2; + + for (int i=0; i= (2,6,0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_geoda', [dirname(__file__)]) + except ImportError: + import _geoda + return _geoda + if fp is not None: + try: + _mod = imp.load_module('_geoda', fp, pathname, description) + finally: + fp.close() + return _mod + _geoda = swig_import_helper() + del swig_import_helper +else: + import _geoda +del version_info +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static): + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) + +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) + +def _swig_repr(self): + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 + + +class SwigPyIterator(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, SwigPyIterator, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, SwigPyIterator, name) + def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract") + __repr__ = _swig_repr + __swig_destroy__ = _geoda.delete_SwigPyIterator + __del__ = lambda self : None; + def value(self): return _geoda.SwigPyIterator_value(self) + def incr(self, n=1): return _geoda.SwigPyIterator_incr(self, n) + def decr(self, n=1): return _geoda.SwigPyIterator_decr(self, n) + def distance(self, *args): return _geoda.SwigPyIterator_distance(self, *args) + def equal(self, *args): return _geoda.SwigPyIterator_equal(self, *args) + def copy(self): return _geoda.SwigPyIterator_copy(self) + def next(self): return _geoda.SwigPyIterator_next(self) + def __next__(self): return _geoda.SwigPyIterator___next__(self) + def previous(self): return _geoda.SwigPyIterator_previous(self) + def advance(self, *args): return _geoda.SwigPyIterator_advance(self, *args) + def __eq__(self, *args): return _geoda.SwigPyIterator___eq__(self, *args) + def __ne__(self, *args): return _geoda.SwigPyIterator___ne__(self, *args) + def __iadd__(self, *args): return _geoda.SwigPyIterator___iadd__(self, *args) + def __isub__(self, *args): return _geoda.SwigPyIterator___isub__(self, *args) + def __add__(self, *args): return _geoda.SwigPyIterator___add__(self, *args) + def __sub__(self, *args): return _geoda.SwigPyIterator___sub__(self, *args) + def __iter__(self): return self +SwigPyIterator_swigregister = _geoda.SwigPyIterator_swigregister +SwigPyIterator_swigregister(SwigPyIterator) + +class VecFloat(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecFloat, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecFloat, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecFloat_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecFloat___nonzero__(self) + def __bool__(self): return _geoda.VecFloat___bool__(self) + def __len__(self): return _geoda.VecFloat___len__(self) + def pop(self): return _geoda.VecFloat_pop(self) + def __getslice__(self, *args): return _geoda.VecFloat___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecFloat___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecFloat___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecFloat___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecFloat___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecFloat___setitem__(self, *args) + def append(self, *args): return _geoda.VecFloat_append(self, *args) + def empty(self): return _geoda.VecFloat_empty(self) + def size(self): return _geoda.VecFloat_size(self) + def clear(self): return _geoda.VecFloat_clear(self) + def swap(self, *args): return _geoda.VecFloat_swap(self, *args) + def get_allocator(self): return _geoda.VecFloat_get_allocator(self) + def begin(self): return _geoda.VecFloat_begin(self) + def end(self): return _geoda.VecFloat_end(self) + def rbegin(self): return _geoda.VecFloat_rbegin(self) + def rend(self): return _geoda.VecFloat_rend(self) + def pop_back(self): return _geoda.VecFloat_pop_back(self) + def erase(self, *args): return _geoda.VecFloat_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecFloat(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecFloat_push_back(self, *args) + def front(self): return _geoda.VecFloat_front(self) + def back(self): return _geoda.VecFloat_back(self) + def assign(self, *args): return _geoda.VecFloat_assign(self, *args) + def resize(self, *args): return _geoda.VecFloat_resize(self, *args) + def insert(self, *args): return _geoda.VecFloat_insert(self, *args) + def reserve(self, *args): return _geoda.VecFloat_reserve(self, *args) + def capacity(self): return _geoda.VecFloat_capacity(self) + __swig_destroy__ = _geoda.delete_VecFloat + __del__ = lambda self : None; +VecFloat_swigregister = _geoda.VecFloat_swigregister +VecFloat_swigregister(VecFloat) + +class VecString(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecString, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecString, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecString_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecString___nonzero__(self) + def __bool__(self): return _geoda.VecString___bool__(self) + def __len__(self): return _geoda.VecString___len__(self) + def pop(self): return _geoda.VecString_pop(self) + def __getslice__(self, *args): return _geoda.VecString___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecString___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecString___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecString___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecString___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecString___setitem__(self, *args) + def append(self, *args): return _geoda.VecString_append(self, *args) + def empty(self): return _geoda.VecString_empty(self) + def size(self): return _geoda.VecString_size(self) + def clear(self): return _geoda.VecString_clear(self) + def swap(self, *args): return _geoda.VecString_swap(self, *args) + def get_allocator(self): return _geoda.VecString_get_allocator(self) + def begin(self): return _geoda.VecString_begin(self) + def end(self): return _geoda.VecString_end(self) + def rbegin(self): return _geoda.VecString_rbegin(self) + def rend(self): return _geoda.VecString_rend(self) + def pop_back(self): return _geoda.VecString_pop_back(self) + def erase(self, *args): return _geoda.VecString_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecString(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecString_push_back(self, *args) + def front(self): return _geoda.VecString_front(self) + def back(self): return _geoda.VecString_back(self) + def assign(self, *args): return _geoda.VecString_assign(self, *args) + def resize(self, *args): return _geoda.VecString_resize(self, *args) + def insert(self, *args): return _geoda.VecString_insert(self, *args) + def reserve(self, *args): return _geoda.VecString_reserve(self, *args) + def capacity(self): return _geoda.VecString_capacity(self) + __swig_destroy__ = _geoda.delete_VecString + __del__ = lambda self : None; +VecString_swigregister = _geoda.VecString_swigregister +VecString_swigregister(VecString) + +class VecDouble(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecDouble, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecDouble, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecDouble_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecDouble___nonzero__(self) + def __bool__(self): return _geoda.VecDouble___bool__(self) + def __len__(self): return _geoda.VecDouble___len__(self) + def pop(self): return _geoda.VecDouble_pop(self) + def __getslice__(self, *args): return _geoda.VecDouble___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecDouble___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecDouble___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecDouble___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecDouble___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecDouble___setitem__(self, *args) + def append(self, *args): return _geoda.VecDouble_append(self, *args) + def empty(self): return _geoda.VecDouble_empty(self) + def size(self): return _geoda.VecDouble_size(self) + def clear(self): return _geoda.VecDouble_clear(self) + def swap(self, *args): return _geoda.VecDouble_swap(self, *args) + def get_allocator(self): return _geoda.VecDouble_get_allocator(self) + def begin(self): return _geoda.VecDouble_begin(self) + def end(self): return _geoda.VecDouble_end(self) + def rbegin(self): return _geoda.VecDouble_rbegin(self) + def rend(self): return _geoda.VecDouble_rend(self) + def pop_back(self): return _geoda.VecDouble_pop_back(self) + def erase(self, *args): return _geoda.VecDouble_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecDouble(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecDouble_push_back(self, *args) + def front(self): return _geoda.VecDouble_front(self) + def back(self): return _geoda.VecDouble_back(self) + def assign(self, *args): return _geoda.VecDouble_assign(self, *args) + def resize(self, *args): return _geoda.VecDouble_resize(self, *args) + def insert(self, *args): return _geoda.VecDouble_insert(self, *args) + def reserve(self, *args): return _geoda.VecDouble_reserve(self, *args) + def capacity(self): return _geoda.VecDouble_capacity(self) + __swig_destroy__ = _geoda.delete_VecDouble + __del__ = lambda self : None; +VecDouble_swigregister = _geoda.VecDouble_swigregister +VecDouble_swigregister(VecDouble) + +class VecVecDouble(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecVecDouble, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecVecDouble, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecVecDouble_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecVecDouble___nonzero__(self) + def __bool__(self): return _geoda.VecVecDouble___bool__(self) + def __len__(self): return _geoda.VecVecDouble___len__(self) + def pop(self): return _geoda.VecVecDouble_pop(self) + def __getslice__(self, *args): return _geoda.VecVecDouble___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecVecDouble___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecVecDouble___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecVecDouble___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecVecDouble___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecVecDouble___setitem__(self, *args) + def append(self, *args): return _geoda.VecVecDouble_append(self, *args) + def empty(self): return _geoda.VecVecDouble_empty(self) + def size(self): return _geoda.VecVecDouble_size(self) + def clear(self): return _geoda.VecVecDouble_clear(self) + def swap(self, *args): return _geoda.VecVecDouble_swap(self, *args) + def get_allocator(self): return _geoda.VecVecDouble_get_allocator(self) + def begin(self): return _geoda.VecVecDouble_begin(self) + def end(self): return _geoda.VecVecDouble_end(self) + def rbegin(self): return _geoda.VecVecDouble_rbegin(self) + def rend(self): return _geoda.VecVecDouble_rend(self) + def pop_back(self): return _geoda.VecVecDouble_pop_back(self) + def erase(self, *args): return _geoda.VecVecDouble_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecVecDouble(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecVecDouble_push_back(self, *args) + def front(self): return _geoda.VecVecDouble_front(self) + def back(self): return _geoda.VecVecDouble_back(self) + def assign(self, *args): return _geoda.VecVecDouble_assign(self, *args) + def resize(self, *args): return _geoda.VecVecDouble_resize(self, *args) + def insert(self, *args): return _geoda.VecVecDouble_insert(self, *args) + def reserve(self, *args): return _geoda.VecVecDouble_reserve(self, *args) + def capacity(self): return _geoda.VecVecDouble_capacity(self) + __swig_destroy__ = _geoda.delete_VecVecDouble + __del__ = lambda self : None; +VecVecDouble_swigregister = _geoda.VecVecDouble_swigregister +VecVecDouble_swigregister(VecVecDouble) + +class VecInt(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecInt, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecInt, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecInt_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecInt___nonzero__(self) + def __bool__(self): return _geoda.VecInt___bool__(self) + def __len__(self): return _geoda.VecInt___len__(self) + def pop(self): return _geoda.VecInt_pop(self) + def __getslice__(self, *args): return _geoda.VecInt___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecInt___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecInt___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecInt___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecInt___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecInt___setitem__(self, *args) + def append(self, *args): return _geoda.VecInt_append(self, *args) + def empty(self): return _geoda.VecInt_empty(self) + def size(self): return _geoda.VecInt_size(self) + def clear(self): return _geoda.VecInt_clear(self) + def swap(self, *args): return _geoda.VecInt_swap(self, *args) + def get_allocator(self): return _geoda.VecInt_get_allocator(self) + def begin(self): return _geoda.VecInt_begin(self) + def end(self): return _geoda.VecInt_end(self) + def rbegin(self): return _geoda.VecInt_rbegin(self) + def rend(self): return _geoda.VecInt_rend(self) + def pop_back(self): return _geoda.VecInt_pop_back(self) + def erase(self, *args): return _geoda.VecInt_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecInt(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecInt_push_back(self, *args) + def front(self): return _geoda.VecInt_front(self) + def back(self): return _geoda.VecInt_back(self) + def assign(self, *args): return _geoda.VecInt_assign(self, *args) + def resize(self, *args): return _geoda.VecInt_resize(self, *args) + def insert(self, *args): return _geoda.VecInt_insert(self, *args) + def reserve(self, *args): return _geoda.VecInt_reserve(self, *args) + def capacity(self): return _geoda.VecInt_capacity(self) + __swig_destroy__ = _geoda.delete_VecInt + __del__ = lambda self : None; +VecInt_swigregister = _geoda.VecInt_swigregister +VecInt_swigregister(VecInt) + +class VecVecInt(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecVecInt, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecVecInt, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecVecInt_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecVecInt___nonzero__(self) + def __bool__(self): return _geoda.VecVecInt___bool__(self) + def __len__(self): return _geoda.VecVecInt___len__(self) + def pop(self): return _geoda.VecVecInt_pop(self) + def __getslice__(self, *args): return _geoda.VecVecInt___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecVecInt___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecVecInt___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecVecInt___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecVecInt___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecVecInt___setitem__(self, *args) + def append(self, *args): return _geoda.VecVecInt_append(self, *args) + def empty(self): return _geoda.VecVecInt_empty(self) + def size(self): return _geoda.VecVecInt_size(self) + def clear(self): return _geoda.VecVecInt_clear(self) + def swap(self, *args): return _geoda.VecVecInt_swap(self, *args) + def get_allocator(self): return _geoda.VecVecInt_get_allocator(self) + def begin(self): return _geoda.VecVecInt_begin(self) + def end(self): return _geoda.VecVecInt_end(self) + def rbegin(self): return _geoda.VecVecInt_rbegin(self) + def rend(self): return _geoda.VecVecInt_rend(self) + def pop_back(self): return _geoda.VecVecInt_pop_back(self) + def erase(self, *args): return _geoda.VecVecInt_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecVecInt(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecVecInt_push_back(self, *args) + def front(self): return _geoda.VecVecInt_front(self) + def back(self): return _geoda.VecVecInt_back(self) + def assign(self, *args): return _geoda.VecVecInt_assign(self, *args) + def resize(self, *args): return _geoda.VecVecInt_resize(self, *args) + def insert(self, *args): return _geoda.VecVecInt_insert(self, *args) + def reserve(self, *args): return _geoda.VecVecInt_reserve(self, *args) + def capacity(self): return _geoda.VecVecInt_capacity(self) + __swig_destroy__ = _geoda.delete_VecVecInt + __del__ = lambda self : None; +VecVecInt_swigregister = _geoda.VecVecInt_swigregister +VecVecInt_swigregister(VecVecInt) + +class VecUINT8(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecUINT8, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecUINT8, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecUINT8_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecUINT8___nonzero__(self) + def __bool__(self): return _geoda.VecUINT8___bool__(self) + def __len__(self): return _geoda.VecUINT8___len__(self) + def pop(self): return _geoda.VecUINT8_pop(self) + def __getslice__(self, *args): return _geoda.VecUINT8___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecUINT8___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecUINT8___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecUINT8___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecUINT8___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecUINT8___setitem__(self, *args) + def append(self, *args): return _geoda.VecUINT8_append(self, *args) + def empty(self): return _geoda.VecUINT8_empty(self) + def size(self): return _geoda.VecUINT8_size(self) + def clear(self): return _geoda.VecUINT8_clear(self) + def swap(self, *args): return _geoda.VecUINT8_swap(self, *args) + def get_allocator(self): return _geoda.VecUINT8_get_allocator(self) + def begin(self): return _geoda.VecUINT8_begin(self) + def end(self): return _geoda.VecUINT8_end(self) + def rbegin(self): return _geoda.VecUINT8_rbegin(self) + def rend(self): return _geoda.VecUINT8_rend(self) + def pop_back(self): return _geoda.VecUINT8_pop_back(self) + def erase(self, *args): return _geoda.VecUINT8_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecUINT8(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecUINT8_push_back(self, *args) + def front(self): return _geoda.VecUINT8_front(self) + def back(self): return _geoda.VecUINT8_back(self) + def assign(self, *args): return _geoda.VecUINT8_assign(self, *args) + def resize(self, *args): return _geoda.VecUINT8_resize(self, *args) + def insert(self, *args): return _geoda.VecUINT8_insert(self, *args) + def reserve(self, *args): return _geoda.VecUINT8_reserve(self, *args) + def capacity(self): return _geoda.VecUINT8_capacity(self) + __swig_destroy__ = _geoda.delete_VecUINT8 + __del__ = lambda self : None; +VecUINT8_swigregister = _geoda.VecUINT8_swigregister +VecUINT8_swigregister(VecUINT8) + +class VecVecUINT8(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, VecVecUINT8, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, VecVecUINT8, name) + __repr__ = _swig_repr + def iterator(self): return _geoda.VecVecUINT8_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _geoda.VecVecUINT8___nonzero__(self) + def __bool__(self): return _geoda.VecVecUINT8___bool__(self) + def __len__(self): return _geoda.VecVecUINT8___len__(self) + def pop(self): return _geoda.VecVecUINT8_pop(self) + def __getslice__(self, *args): return _geoda.VecVecUINT8___getslice__(self, *args) + def __setslice__(self, *args): return _geoda.VecVecUINT8___setslice__(self, *args) + def __delslice__(self, *args): return _geoda.VecVecUINT8___delslice__(self, *args) + def __delitem__(self, *args): return _geoda.VecVecUINT8___delitem__(self, *args) + def __getitem__(self, *args): return _geoda.VecVecUINT8___getitem__(self, *args) + def __setitem__(self, *args): return _geoda.VecVecUINT8___setitem__(self, *args) + def append(self, *args): return _geoda.VecVecUINT8_append(self, *args) + def empty(self): return _geoda.VecVecUINT8_empty(self) + def size(self): return _geoda.VecVecUINT8_size(self) + def clear(self): return _geoda.VecVecUINT8_clear(self) + def swap(self, *args): return _geoda.VecVecUINT8_swap(self, *args) + def get_allocator(self): return _geoda.VecVecUINT8_get_allocator(self) + def begin(self): return _geoda.VecVecUINT8_begin(self) + def end(self): return _geoda.VecVecUINT8_end(self) + def rbegin(self): return _geoda.VecVecUINT8_rbegin(self) + def rend(self): return _geoda.VecVecUINT8_rend(self) + def pop_back(self): return _geoda.VecVecUINT8_pop_back(self) + def erase(self, *args): return _geoda.VecVecUINT8_erase(self, *args) + def __init__(self, *args): + this = _geoda.new_VecVecUINT8(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _geoda.VecVecUINT8_push_back(self, *args) + def front(self): return _geoda.VecVecUINT8_front(self) + def back(self): return _geoda.VecVecUINT8_back(self) + def assign(self, *args): return _geoda.VecVecUINT8_assign(self, *args) + def resize(self, *args): return _geoda.VecVecUINT8_resize(self, *args) + def insert(self, *args): return _geoda.VecVecUINT8_insert(self, *args) + def reserve(self, *args): return _geoda.VecVecUINT8_reserve(self, *args) + def capacity(self): return _geoda.VecVecUINT8_capacity(self) + __swig_destroy__ = _geoda.delete_VecVecUINT8 + __del__ = lambda self : None; +VecVecUINT8_swigregister = _geoda.VecVecUINT8_swigregister +VecVecUINT8_swigregister(VecVecUINT8) + + +def CreateRookWeights(*args): + return _geoda.CreateRookWeights(*args) +CreateRookWeights = _geoda.CreateRookWeights + +def CreateQueenWeights(*args): + return _geoda.CreateQueenWeights(*args) +CreateQueenWeights = _geoda.CreateQueenWeights + +def CreateKNNWeights(*args): + return _geoda.CreateKNNWeights(*args) +CreateKNNWeights = _geoda.CreateKNNWeights + +def CreateDistanceWeights(*args): + return _geoda.CreateDistanceWeights(*args) +CreateDistanceWeights = _geoda.CreateDistanceWeights + +def LISA(*args): + return _geoda.LISA(*args) +LISA = _geoda.LISA + +def LocalGeary(*args): + return _geoda.LocalGeary(*args) +LocalGeary = _geoda.LocalGeary + +def Hinge15(*args): + return _geoda.Hinge15(*args) +Hinge15 = _geoda.Hinge15 + +def Hinge30(*args): + return _geoda.Hinge30(*args) +Hinge30 = _geoda.Hinge30 + +def PCA(*args): + return _geoda.PCA(*args) +PCA = _geoda.PCA +# This file is compatible with both classic and new-style classes. + + diff --git a/swig/install.py b/swig/install.py new file mode 100755 index 000000000..b15056e62 --- /dev/null +++ b/swig/install.py @@ -0,0 +1,7 @@ + +cp OGRLayerProxy.cpp ../ShapeOperations/OGRLayerProxy.cpp + +rm -rf build/ + +python setup.py install + diff --git a/swig/install_rcc.sh b/swig/install_rcc.sh new file mode 100755 index 000000000..7cd3cf725 --- /dev/null +++ b/swig/install_rcc.sh @@ -0,0 +1,7 @@ + +cp OGRLayerProxy.cpp ../ShapeOperations/OGRLayerProxy.cpp + +rm -rf build/ + +python setup_rcc.py install + diff --git a/swig/proxy.cpp b/swig/proxy.cpp new file mode 100644 index 000000000..1cf1c69b6 --- /dev/null +++ b/swig/proxy.cpp @@ -0,0 +1,646 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#ifndef WX_PRECOMP + #include +#endif + +#include + +#include "../ShapeOperations/GwtWeight.h" +#include "../ShapeOperations/GalWeight.h" +#include "../ShapeOperations/PolysToContigWeights.h" +#include "../ShapeOperations/VoronoiUtils.h" +#include "../Explore/LisaCoordinator.h" +#include "../Explore/LocalGearyCoordinator.h" +#include "../Explore/CatClassification.h" +#include "../SpatialIndAlgs.h" +#include "../GenUtils.h" +#include "../pca.h" + +#include "proxy.h" + +using namespace std; + +wxString GetLayerName(string shp_filename) +{ + wxString m_shp_str(shp_filename); + + wxFileName m_shp_fname(m_shp_str); + + return m_shp_fname.GetName(); +} + +int OpenShapeFile(string in_file, Shapefile::Main& main_data, Shapefile::Index& index_data) +{ + wxString m_shp_str(in_file); + + wxFileName m_shx_fname(m_shp_str); + m_shx_fname.SetExt("shx"); + wxString m_shx_str = m_shx_fname.GetFullPath(); + +#ifdef DEBUG + printf("shx file name: %s\n", m_shx_str.mb_str().data()); +#endif + + bool success = false; + success = Shapefile::populateIndex(m_shx_str, index_data); +#ifdef DEBUG + printf("populateIndex: %d\n", success); +#endif + if (success == false) + return success; + + success = Shapefile::populateMain(index_data, m_shp_str, main_data); +#ifdef DEBUG + printf("populateMain: %d\n", success); +#endif + if (success == false) + return success; + + if (index_data.header.shape_type == Shapefile::POLYGON_Z) { + index_data.header.shape_type = Shapefile::POLYGON; + } else if (index_data.header.shape_type == Shapefile::POLYGON_M) { + index_data.header.shape_type = Shapefile::POLYGON; + } else if (index_data.header.shape_type == Shapefile::POINT_Z) { + index_data.header.shape_type = Shapefile::POINT_TYP; + } else if (index_data.header.shape_type == Shapefile::POINT_M) { + index_data.header.shape_type = Shapefile::POINT_TYP; + } else if (index_data.header.shape_type == Shapefile::MULTI_POINT) { + return Shapefile::MULTI_POINT; + } else if (index_data.header.shape_type == Shapefile::POLY_LINE_Z) { + index_data.header.shape_type = Shapefile::POLY_LINE; + } else if (index_data.header.shape_type == Shapefile::POLY_LINE_M) { + index_data.header.shape_type = Shapefile::POLY_LINE; + } + + return success; +} + +bool CreateCentroids(Shapefile::Main& main_data, std::vector& XX, std::vector& YY) +{ + int num_obs = main_data.records.size(); + XX.resize(num_obs); + YY.resize(num_obs); + + if (main_data.header.shape_type == Shapefile::POINT_TYP) { + Shapefile::PointContents* pc; + for (int i=0; ishape_type == 0) { + XX[i] = 0; + YY[i] = 0; + } else { + XX[i] = pc->x; + YY[i] = pc->y; + } + } + } else if (main_data.header.shape_type == Shapefile::POLYGON) { + Shapefile::PolygonContents* pc; + for (int i=0; i >& nbr_map) +{ +#ifdef DEBUG + printf("Project::GetVoronoiRookNeighborMap()"); +#endif + + std::vector x; + std::vector y; + CreateCentroids(main_data, x, y); + Gda::VoronoiUtils::PointsToContiguity(x, y, false, nbr_map); +} + +void GetVoronoiQueenNeighborMap(Shapefile::Main& main_data, std::vector >& nbr_map) +{ +#ifdef DEBUG + printf("Project::GetVoronoiQueenNeighborMap()"); +#endif + + std::vector x; + std::vector y; + CreateCentroids(main_data, x, y); + Gda::VoronoiUtils::PointsToContiguity(x, y, true, nbr_map); +} + +bool CreateContiguityWeights(string in_file, string out_file, bool is_rook, int order, bool include_lower_order) +{ + Shapefile::Main main_data; + Shapefile::Index index_data; + bool success = OpenShapeFile(in_file, main_data, index_data); +#ifdef DEBUG + printf("OpenShapeFile: %d\n", success); +#endif + if (!success) + return false; + + int n_obs = Shapefile::calcNumIndexHeaderRecords(index_data.header); +#ifdef DEBUG + printf("number of observations: %d\n", n_obs); +#endif + + wxString layer_name = GetLayerName(in_file); + double precision_threshold = 0.0; + + GalElement *gal = NULL; + + if (main_data.header.shape_type == Shapefile::POINT_TYP) { + std::vector > nbr_map; + if (is_rook) { + GetVoronoiRookNeighborMap(main_data, nbr_map); + } else { + GetVoronoiQueenNeighborMap(main_data, nbr_map); + } + gal = Gda::VoronoiUtils::NeighborMapToGal(nbr_map); + } else { + gal = PolysToContigWeights(main_data, !is_rook, precision_threshold); + } + +#ifdef DEBUG + printf("PolysToContigWeights: %d\n", gal); +#endif + if (gal == NULL) + return false; + + if (order > 1) + Gda::MakeHigherOrdContiguity(order, n_obs, gal, include_lower_order); + + // output: save weights file + wxString ofn(out_file); + wxString idd = "ogc_fid"; // should be the same with database + vector id_vec; + for (int i=0; i id_vec; + + + int num_obs = 10; + + vector m_XCOO; + vector m_YCOO; + + for (int i=0; igwt, layer_name, ofn, idd, id_vec); + + if (w) delete w; + + return flag; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KNN Weights +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +bool CreateKNNWeights(std::string in_file, std::string out_file, int k, bool is_arc, bool is_mile) +{ + Shapefile::Main main_data; + Shapefile::Index index_data; + bool success = OpenShapeFile(in_file, main_data, index_data); +#ifdef DEBUG + printf("OpenShapeFile: %d\n", success); +#endif + if (!success) + return false; + + int n_obs = Shapefile::calcNumIndexHeaderRecords(index_data.header); +#ifdef DEBUG + printf("number of observations: %d\n", n_obs); +#endif + + std::vector XX; + std::vector YY; + success = CreateCentroids(main_data, XX, YY); +#ifdef DEBUG + printf("CreateCentroids: %d\n", success); + printf("length of XX/YY: %d\n", XX.size()); +#endif + if (!success) + return false; + + wxString layer_name = GetLayerName(in_file); + GwtWeight* w = 0; + w = SpatialIndAlgs::knn_build(XX, YY, k, is_arc, is_mile); +#ifdef DEBUG + printf("SpatialIndAlgs::knn_build(): %d\n", w); +#endif + + if (w == NULL) + return false; + + // output: save weights file + wxString ofn(out_file); + wxString idd = "ogc_fid"; // should be the same with database + vector id_vec; + for (int i=0; igwt, layer_name, ofn, idd, id_vec); + + delete w; + + return flag; +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Distance based Weights +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +bool CreateDistanceWeights(std::string in_file, std::string out_file, double threshold, bool is_arc, bool is_mile) +{ + Shapefile::Main main_data; + Shapefile::Index index_data; + bool success = OpenShapeFile(in_file, main_data, index_data); +#ifdef DEBUG + printf("OpenShapeFile: %d\n", success); +#endif + if (!success) + return false; + + int n_obs = Shapefile::calcNumIndexHeaderRecords(index_data.header); +#ifdef DEBUG + printf("number of observations: %d\n", n_obs); +#endif + + std::vector XX; + std::vector YY; + success = CreateCentroids(main_data, XX, YY); +#ifdef DEBUG + printf("CreateCentroids: %d\n", success); + printf("length of XX/YY: %d\n", XX.size()); +#endif + if (!success) + return false; + + wxString layer_name = GetLayerName(in_file); + GwtWeight* w = 0; + w = SpatialIndAlgs::thresh_build(XX, YY, threshold, is_arc, is_mile); +#ifdef DEBUG + printf("SpatialIndAlgs::knn_build(): %d\n", w); +#endif + + if (w == NULL) + return false; + + // output: save weights file + wxString ofn(out_file); + wxString idd = "ogc_fid"; // should be the same with database + vector id_vec; + for (int i=0; igwt, layer_name, ofn, idd, id_vec); + + delete w; + + return flag; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// +/////////////////////////////////////////////////////////////////////////////// + // 0 univariate lisa + // 1 bivariate lisa + // 2 EB lisa + // 3 diff lisa +bool LISA(std::string in_w_file, std::vector var_1, std::vector var_2, std::vector& localMoran, std::vector& sigLocalMoran, std::vector& sigFlag, std::vector& clusterFlag, int lisa_type, int numPermutations) +{ + wxString w_path(in_w_file); + int num_obs = var_1.size(); + + LisaCoordinator* lc = new LisaCoordinator(w_path, num_obs, var_1, var_2, lisa_type, numPermutations); + for (int i=0; ilocal_moran_vecs[0][i]; + sigLocalMoran[i] = lc->sig_local_moran_vecs[0][i]; + sigFlag[i] = lc->sig_cat_vecs[0][i]; + clusterFlag[i] = lc->cluster_vecs[0][i]; + } + delete lc; + return true; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// +/////////////////////////////////////////////////////////////////////////////// +bool LocalGeary(std::string in_w_file, std::vector >& data, std::vector& localGeary, std::vector& sigLocalGeary, std::vector& sigFlag, std::vector& clusterFlag, int numPermutations) +{ + wxString w_path(in_w_file); + int num_obs = data[0].size(); + + LocalGearyCoordinator* lc = new LocalGearyCoordinator(w_path, num_obs, data, numPermutations); + for (int i=0; ilocal_geary_vecs[0][i]; + sigLocalGeary[i] = lc->sig_local_geary_vecs[0][i]; + sigFlag[i] = lc->sig_cat_vecs[0][i]; + clusterFlag[i] = lc->cluster_vecs[0][i]; + } + delete lc; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// std::vector clusters +/////////////////////////////////////////////////////////////////////////////// +bool +Hinge1530( + int type, + int num_obs, + const std::vector& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +) { + + CatClassification::CatClassifType cat_type = CatClassification::hinge_15; + + if (type == 1) { + cat_type = CatClassification::hinge_30; + } + + int n_tms = 1; // we don't support time-grouped variable for now + + CatClassifData cat_data; + + CatClassifDef cat_classif_def; + + std::vector map_valid(n_tms, true); + + std::vector map_error_message(n_tms); + + std::vector > > cat_var_sorted(n_tms); + + std::vector > cat_var_undef(n_tms); + + for (int t=0; t& cat_vec = cat_data.categories[0].cat_vec; + + breaks.resize(cat_vec.size()); + + for (int i=0; i& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +) { + return Hinge1530(0, num_obs, data, num_categories, useScientificNotation, breaks); +} + + +bool +Hinge30( + int num_obs, + const std::vector& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +) { + return Hinge1530(1, num_obs, data, num_categories, useScientificNotation, breaks); +} + + +/////////////////////////////////////////////////////////////////////////////// +// +// std::vector clusters +/////////////////////////////////////////////////////////////////////////////// +std::string +PCA( + std::vector& x, + std::vector& x_names, + int _nrows, + int _ncols, + int _is_corr, + int _is_center, + int _is_scale +) { + Pca pca; + + bool is_corr = _is_corr == 0 ? false : true; + bool is_center = _is_center == 0 ? false : true; + bool is_scale = _is_scale == 0 ? false : true; + + int rtn = pca.Calculate(x, _nrows, _ncols, is_corr, is_center, is_scale); + + if ( 0 != rtn ) { + // error of PCA + return ""; + } + + vector sd = pca.sd(); + vector prop_of_var = pca.prop_of_var(); + vector cum_prop = pca.cum_prop(); + vector scores = pca.scores(); + + vector el_cols = pca.eliminated_columns(); + + float kaiser = pca.kaiser(); + float thresh95 = pca.thresh95(); + + unsigned int ncols = pca.ncols(); + unsigned int nrows = pca.nrows(); + + int max_sel_name_len = 0; + + wxString method = pca.method(); + + wxString pca_log; + //pca_log << "\n\nPCA method: " << method; + + pca_log << "\n\nStandard deviation:\n"; + for (int i=0; i 0 && (token[pos] == ' ' || pos == n_len-1) ) { + // end of a number + pca_log << wxString::Format("%*s%d", sub_len-1, "PC", pc_idx++); + sub_len = 1; + start = false; + } else { + if (!start && token[pos] != ' ') { + start = true; + } + sub_len += 1; + } + pos += 1; + } + header = true; + pca_log << "\n"; + } + } + + for (int k=0; k +#include + +bool CreateRookWeights(std::string in_file, std::string out_file, int order=1, bool include_lower_order=false); + +bool CreateQueenWeights(std::string in_file, std::string out_file, int order=1, bool include_lower_order=false); + +bool CreateKNNWeights(std::string in_file, std::string out_file, int k, bool is_arc=false, bool is_mile=true); + +bool CreateDistanceWeights(std::string in_file, std::string out_file, double threshold, bool is_arc=false, bool is_mile=true); + +bool LISA(std::string in_w_file, std::vector var_1, std::vector var_2, std::vector& localMoran, std::vector& sigLocalMoran, std::vector& sigFlag, std::vector& clusterFlag, int lisa_type=0, int numPermutations=599); + +bool +LocalGeary( + std::string in_w_file, + std::vector >& data, + std::vector& localGeary, + std::vector& sigLocalGeary, + std::vector& sigFlag, + std::vector& clusterFlag, + int numPermutations=599 +); + +bool +Hinge15( + int num_obs, + const std::vector& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +); + +bool +Hinge30( + int num_obs, + const std::vector& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +); + +std::string +PCA( + std::vector& x, + std::vector& x_names, + int nrows, + int ncols, + int is_corr, + int is_center, + int is_scale +); diff --git a/swig/proxy.i b/swig/proxy.i new file mode 100644 index 000000000..d71abbcb0 --- /dev/null +++ b/swig/proxy.i @@ -0,0 +1,71 @@ +%module geoda + +%include "std_string.i" + +%include "std_vector.i" +namespace std { + %template(VecFloat) vector; + %template(VecString) vector; + %template(VecDouble) vector; + %template(VecVecDouble) vector< vector >; + %template(VecInt) vector; + %template(VecVecInt) vector< vector >; + %template(VecUINT8) vector; + %template(VecVecUINT8) vector >; +} + +%{ +#include "proxy.h" +#include +#ifndef WX_PRECOMP + #include +#endif +%} + +#include + +/** + * is_arc: default value false -- using Euclidean distance + * + */ + +bool CreateRookWeights(std::string in_file, std::string out_file, int order=1, bool include_lower_order=false); + +bool CreateQueenWeights(std::string in_file, std::string out_file, int order=1, bool include_lower_order=false); + +bool CreateKNNWeights(std::string in_file, std::string out_file, int k, bool is_arc=false, bool is_mile=true); + +bool CreateDistanceWeights(std::string in_file, std::string out_file, double threshold, bool is_arc=false, bool is_mile=true); + +bool LISA(std::string in_w_file, std::vector var_1, std::vector var_2, std::vector& localMoran, std::vector& sigLocalMoran, std::vector& sigFlag, std::vector& clusterFlag, int lisa_type=0, int numPermutations=599); + +bool LocalGeary(std::string in_w_file, std::vector >& data, std::vector& localGeary, std::vector& sigLocalGeary, std::vector& sigFlag, std::vector& clusterFlag, int numPermutations=599); + +bool +Hinge15( + int num_obs, + const std::vector& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +); + +bool +Hinge30( + int num_obs, + const std::vector& data, + int num_categories, + bool useScientificNotation, + std::vector& breaks // return results +); + +std::string +PCA( + std::vector& x, + std::vector& x_names, + int nrows, + int ncols, + int is_corr, + int is_center, + int is_scale +); diff --git a/swig/proxy_wrap.cxx b/swig/proxy_wrap.cxx new file mode 100644 index 000000000..3152e4c69 --- /dev/null +++ b/swig/proxy_wrap.cxx @@ -0,0 +1,26393 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.10 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIGPYTHON +#define SWIG_PYTHON_THREADS +#define SWIG_PYTHON_DIRECTOR_NO_VTABLE + + +#ifdef __cplusplus +/* SwigValueWrapper is described in swig.swg */ +template class SwigValueWrapper { + struct SwigMovePointer { + T *ptr; + SwigMovePointer(T *p) : ptr(p) { } + ~SwigMovePointer() { delete ptr; } + SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); + SwigValueWrapper(const SwigValueWrapper& rhs); +public: + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } + operator T&() const { return *pointer.ptr; } + T *operator&() { return pointer.ptr; } +}; + +template T SwigValueInit() { + return T(); +} +#endif + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + + +/* Python.h has to appear first */ +#include + +/* ----------------------------------------------------------------------------- + * swigrun.swg + * + * This file contains generic C API SWIG runtime support for pointer + * type checking. + * ----------------------------------------------------------------------------- */ + +/* This should only be incremented when either the layout of swig_type_info changes, + or for whatever reason, the runtime changes incompatibly */ +#define SWIG_RUNTIME_VERSION "4" + +/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ +#ifdef SWIG_TYPE_TABLE +# define SWIG_QUOTE_STRING(x) #x +# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) +# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#else +# define SWIG_TYPE_TABLE_NAME +#endif + +/* + You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. + + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. +*/ + +#ifndef SWIGRUNTIME +# define SWIGRUNTIME SWIGINTERN +#endif + +#ifndef SWIGRUNTIMEINLINE +# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE +#endif + +/* Generic buffer size */ +#ifndef SWIG_BUFFER_SIZE +# define SWIG_BUFFER_SIZE 1024 +#endif + +/* Flags for pointer conversions */ +#define SWIG_POINTER_DISOWN 0x1 +#define SWIG_CAST_NEW_MEMORY 0x2 + +/* Flags for new pointer objects */ +#define SWIG_POINTER_OWN 0x1 + + +/* + Flags/methods for returning states. + + The SWIG conversion methods, as ConvertPtr, return an integer + that tells if the conversion was successful or not. And if not, + an error code can be returned (see swigerrors.swg for the codes). + + Use the following macros/flags to set or process the returning + states. + + In old versions of SWIG, code such as the following was usually written: + + if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { + // success code + } else { + //fail code + } + + Now you can be more explicit: + + int res = SWIG_ConvertPtr(obj,vptr,ty.flags); + if (SWIG_IsOK(res)) { + // success code + } else { + // fail code + } + + which is the same really, but now you can also do + + Type *ptr; + int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); + if (SWIG_IsOK(res)) { + // success code + if (SWIG_IsNewObj(res) { + ... + delete *ptr; + } else { + ... + } + } else { + // fail code + } + + I.e., now SWIG_ConvertPtr can return new objects and you can + identify the case and take care of the deallocation. Of course that + also requires SWIG_ConvertPtr to return new result values, such as + + int SWIG_ConvertPtr(obj, ptr,...) { + if () { + if () { + *ptr = ; + return SWIG_NEWOBJ; + } else { + *ptr = ; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } + } + + Of course, returning the plain '0(success)/-1(fail)' still works, but you can be + more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the + SWIG errors code. + + Finally, if the SWIG_CASTRANK_MODE is enabled, the result code + allows to return the 'cast rank', for example, if you have this + + int food(double) + int fooi(int); + + and you call + + food(1) // cast rank '1' (1 -> 1.0) + fooi(1) // cast rank '0' + + just use the SWIG_AddCast()/SWIG_CheckState() +*/ + +#define SWIG_OK (0) +#define SWIG_ERROR (-1) +#define SWIG_IsOK(r) (r >= 0) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) + +/* The CastRankLimit says how many bits are used for the cast rank */ +#define SWIG_CASTRANKLIMIT (1 << 8) +/* The NewMask denotes the object was created (using new/malloc) */ +#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) +/* The TmpMask is for in/out typemaps that use temporal objects */ +#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) +/* Simple returning values */ +#define SWIG_BADOBJ (SWIG_ERROR) +#define SWIG_OLDOBJ (SWIG_OK) +#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) +#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) +/* Check, add and del mask methods */ +#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) +#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) +#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) +#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) +#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) +#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) + +/* Cast-Rank Mode */ +#if defined(SWIG_CASTRANK_MODE) +# ifndef SWIG_TypeRank +# define SWIG_TypeRank unsigned long +# endif +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# define SWIG_MAXCASTRANK (2) +# endif +# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) +# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +} +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +} +#else /* no cast-rank mode */ +# define SWIG_AddCast(r) (r) +# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) +#endif + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +/* Structure to store information on one type */ +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; + +/* Structure to store a type and conversion function used for casting */ +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; + +/* Structure used to store module information + * Each module generates one structure like this, and the runtime collects + * all of these structures and stores them in a circularly linked list.*/ +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; + +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class" == "Class", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} + +/* + Check type equivalence in a name list like ||... + Return 0 if equal, -1 if nb < tb, 1 if nb > tb +*/ +SWIGRUNTIME int +SWIG_TypeCmp(const char *nb, const char *tb) { + int equiv = 1; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (equiv != 0 && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = SWIG_TypeNameComp(nb, ne, tb, te); + if (*ne) ++ne; + } + return equiv; +} + +/* + Check type equivalence in a name list like ||... + Return 0 if not equal, 1 if equal +*/ +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; +} + +/* + Check the typename +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (strcmp(iter->type->name, c) == 0) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (iter->type == from) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Cast a pointer up an inheritance hierarchy +*/ +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} + +/* + Dynamic pointer casting. Down an inheritance hierarchy +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* + Return the name associated with this type +*/ +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* + Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + +/* + Set the clientdata field for a type +*/ +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + +/* + Search for a swig_type_info structure only by mangled name + Search is a O(log #types) + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + register size_t l = 0; + register size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + register size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + register int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ + } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} + +/* + Search for a swig_type_info structure for either a mangled name or a human readable name. + It first searches the mangled names of the types, which is a O(log #types) + If a type is not found it then searches the human readable names, which is O(#types). + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + register size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} + +/* + Pack binary data into a string +*/ +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* + Unpack binary data from a string +*/ +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register char d = *(c++); + register unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} + +/* + Pack 'void *' into a string buffer. +*/ +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} + +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} + +#ifdef __cplusplus +} +#endif + +/* Errors in SWIG */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + +/* Compatibility macros for Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + +#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) +#define PyInt_Check(x) PyLong_Check(x) +#define PyInt_AsLong(x) PyLong_AsLong(x) +#define PyInt_FromLong(x) PyLong_FromLong(x) +#define PyInt_FromSize_t(x) PyLong_FromSize_t(x) +#define PyString_Check(name) PyBytes_Check(name) +#define PyString_FromString(x) PyUnicode_FromString(x) +#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) +#define PyString_AsString(str) PyBytes_AsString(str) +#define PyString_Size(str) PyBytes_Size(str) +#define PyString_InternFromString(key) PyUnicode_InternFromString(key) +#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE +#define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) +#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x) + +#endif + +#ifndef Py_TYPE +# define Py_TYPE(op) ((op)->ob_type) +#endif + +/* SWIG APIs for compatibility of both Python 2 & 3 */ + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_FromFormat PyUnicode_FromFormat +#else +# define SWIG_Python_str_FromFormat PyString_FromFormat +#endif + + +/* Warning: This function will allocate a new string in Python 3, + * so please call SWIG_Python_str_DelForPy3(x) to free the space. + */ +SWIGINTERN char* +SWIG_Python_str_AsChar(PyObject *str) +{ +#if PY_VERSION_HEX >= 0x03000000 + char *cstr; + char *newstr; + Py_ssize_t len; + str = PyUnicode_AsUTF8String(str); + PyBytes_AsStringAndSize(str, &cstr, &len); + newstr = (char *) malloc(len+1); + memcpy(newstr, cstr, len+1); + Py_XDECREF(str); + return newstr; +#else + return PyString_AsString(str); +#endif +} + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) +#else +# define SWIG_Python_str_DelForPy3(x) +#endif + + +SWIGINTERN PyObject* +SWIG_Python_str_FromChar(const char *c) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromString(c); +#else + return PyString_FromString(c); +#endif +} + +/* Add PyOS_snprintf for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) +# define PyOS_snprintf _snprintf +# else +# define PyOS_snprintf snprintf +# endif +#endif + +/* A crude PyString_FromFormat implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 + +#ifndef SWIG_PYBUFFER_SIZE +# define SWIG_PYBUFFER_SIZE 1024 +#endif + +static PyObject * +PyString_FromFormat(const char *fmt, ...) { + va_list ap; + char buf[SWIG_PYBUFFER_SIZE * 2]; + int res; + va_start(ap, fmt); + res = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); +} +#endif + +/* Add PyObject_Del for old Pythons */ +#if PY_VERSION_HEX < 0x01060000 +# define PyObject_Del(op) PyMem_DEL((op)) +#endif +#ifndef PyObject_DEL +# define PyObject_DEL PyObject_Del +#endif + +/* A crude PyExc_StopIteration exception for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# ifndef PyExc_StopIteration +# define PyExc_StopIteration PyExc_RuntimeError +# endif +# ifndef PyObject_GenericGetAttr +# define PyObject_GenericGetAttr 0 +# endif +#endif + +/* Py_NotImplemented is defined in 2.1 and up. */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef Py_NotImplemented +# define Py_NotImplemented PyExc_RuntimeError +# endif +#endif + +/* A crude PyString_AsStringAndSize implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef PyString_AsStringAndSize +# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} +# endif +#endif + +/* PySequence_Size for old Pythons */ +#if PY_VERSION_HEX < 0x02000000 +# ifndef PySequence_Size +# define PySequence_Size PySequence_Length +# endif +#endif + +/* PyBool_FromLong for old Pythons */ +#if PY_VERSION_HEX < 0x02030000 +static +PyObject *PyBool_FromLong(long ok) +{ + PyObject *result = ok ? Py_True : Py_False; + Py_INCREF(result); + return result; +} +#endif + +/* Py_ssize_t for old Pythons */ +/* This code is as recommended by: */ +/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +typedef inquiry lenfunc; +typedef intargfunc ssizeargfunc; +typedef intintargfunc ssizessizeargfunc; +typedef intobjargproc ssizeobjargproc; +typedef intintobjargproc ssizessizeobjargproc; +typedef getreadbufferproc readbufferproc; +typedef getwritebufferproc writebufferproc; +typedef getsegcountproc segcountproc; +typedef getcharbufferproc charbufferproc; +static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc)) +{ + long result = 0; + PyObject *i = PyNumber_Int(x); + if (i) { + result = PyInt_AsLong(i); + Py_DECREF(i); + } + return result; +} +#endif + +#if PY_VERSION_HEX < 0x02050000 +#define PyInt_FromSize_t(x) PyInt_FromLong((long)x) +#endif + +#if PY_VERSION_HEX < 0x02040000 +#define Py_VISIT(op) \ + do { \ + if (op) { \ + int vret = visit((op), arg); \ + if (vret) \ + return vret; \ + } \ + } while (0) +#endif + +#if PY_VERSION_HEX < 0x02030000 +typedef struct { + PyTypeObject type; + PyNumberMethods as_number; + PyMappingMethods as_mapping; + PySequenceMethods as_sequence; + PyBufferProcs as_buffer; + PyObject *name, *slots; +} PyHeapTypeObject; +#endif + +#if PY_VERSION_HEX < 0x02030000 +typedef destructor freefunc; +#endif + +#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \ + (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \ + (PY_MAJOR_VERSION > 3)) +# define SWIGPY_USE_CAPSULE +# define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME) +#endif + +#if PY_VERSION_HEX < 0x03020000 +#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) +#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) +#endif + +/* ----------------------------------------------------------------------------- + * error manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIME PyObject* +SWIG_Python_ErrorType(int code) { + PyObject* type = 0; + switch(code) { + case SWIG_MemoryError: + type = PyExc_MemoryError; + break; + case SWIG_IOError: + type = PyExc_IOError; + break; + case SWIG_RuntimeError: + type = PyExc_RuntimeError; + break; + case SWIG_IndexError: + type = PyExc_IndexError; + break; + case SWIG_TypeError: + type = PyExc_TypeError; + break; + case SWIG_DivisionByZero: + type = PyExc_ZeroDivisionError; + break; + case SWIG_OverflowError: + type = PyExc_OverflowError; + break; + case SWIG_SyntaxError: + type = PyExc_SyntaxError; + break; + case SWIG_ValueError: + type = PyExc_ValueError; + break; + case SWIG_SystemError: + type = PyExc_SystemError; + break; + case SWIG_AttributeError: + type = PyExc_AttributeError; + break; + default: + type = PyExc_RuntimeError; + } + return type; +} + + +SWIGRUNTIME void +SWIG_Python_AddErrorMsg(const char* mesg) +{ + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + + if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + PyErr_Clear(); + Py_XINCREF(type); + + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + Py_DECREF(value); + } else { + PyErr_SetString(PyExc_RuntimeError, mesg); + } +} + +#if defined(SWIG_PYTHON_NO_THREADS) +# if defined(SWIG_PYTHON_THREADS) +# undef SWIG_PYTHON_THREADS +# endif +#endif +#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ +# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) +# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ +# define SWIG_PYTHON_USE_GIL +# endif +# endif +# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ +# ifndef SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() +# endif +# ifdef __cplusplus /* C++ code */ + class SWIG_Python_Thread_Block { + bool status; + PyGILState_STATE state; + public: + void end() { if (status) { PyGILState_Release(state); status = false;} } + SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} + ~SWIG_Python_Thread_Block() { end(); } + }; + class SWIG_Python_Thread_Allow { + bool status; + PyThreadState *save; + public: + void end() { if (status) { PyEval_RestoreThread(save); status = false; }} + SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} + ~SWIG_Python_Thread_Allow() { end(); } + }; +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block +# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow +# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() +# else /* C code */ +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() +# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() +# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) +# endif +# else /* Old thread way, not implemented, user must provide it */ +# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) +# define SWIG_PYTHON_INITIALIZE_THREADS +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) +# define SWIG_PYTHON_THREAD_END_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# endif +# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) +# define SWIG_PYTHON_THREAD_END_ALLOW +# endif +# endif +#else /* No thread support */ +# define SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# define SWIG_PYTHON_THREAD_END_BLOCK +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# define SWIG_PYTHON_THREAD_END_ALLOW +#endif + +/* ----------------------------------------------------------------------------- + * Python API portion that goes into the runtime + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* ----------------------------------------------------------------------------- + * Constant declarations + * ----------------------------------------------------------------------------- */ + +/* Constant Types */ +#define SWIG_PY_POINTER 4 +#define SWIG_PY_BINARY 5 + +/* Constant information structure */ +typedef struct swig_const_info { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_const_info; + + +/* ----------------------------------------------------------------------------- + * Wrapper of PyInstanceMethod_New() used in Python 3 + * It is exported to the generated module, used for -fastproxy + * ----------------------------------------------------------------------------- */ +#if PY_VERSION_HEX >= 0x03000000 +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func) +{ + return PyInstanceMethod_New(func); +} +#else +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func)) +{ + return NULL; +} +#endif + +#ifdef __cplusplus +} +#endif + + +/* ----------------------------------------------------------------------------- + * pyrun.swg + * + * This file contains the runtime support for Python modules + * and includes code for managing global variables and pointer + * type checking. + * + * ----------------------------------------------------------------------------- */ + +/* Common SWIG API */ + +/* for raw pointers */ +#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) +#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) + +#ifdef SWIGPYTHON_BUILTIN +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(self, ptr, type, flags) +#else +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) +#endif + +#define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) + +#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) +#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) +#define swig_owntype int + +/* for raw packed data */ +#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + +/* for class or struct pointers */ +#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) +#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) + +/* for C or C++ function pointers */ +#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(NULL, ptr, type, 0) + +/* for C++ member pointers, ie, member methods */ +#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + + +/* Runtime API */ + +#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata) +#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) +#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) + +#define SWIG_SetErrorObj SWIG_Python_SetErrorObj +#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg +#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) +#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) +#define SWIG_fail goto fail + + +/* Runtime API implementation */ + +/* Error manipulation */ + +SWIGINTERN void +SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetObject(errtype, obj); + Py_DECREF(obj); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +SWIGINTERN void +SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(errtype, msg); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) + +/* Set a constant value */ + +#if defined(SWIGPYTHON_BUILTIN) + +SWIGINTERN void +SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { + PyObject *s = PyString_InternFromString(key); + PyList_Append(seq, s); + Py_DECREF(s); +} + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { +#if PY_VERSION_HEX < 0x02030000 + PyDict_SetItemString(d, (char *)name, obj); +#else + PyDict_SetItemString(d, name, obj); +#endif + Py_DECREF(obj); + if (public_interface) + SwigPyBuiltin_AddPublicSymbol(public_interface, name); +} + +#else + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { +#if PY_VERSION_HEX < 0x02030000 + PyDict_SetItemString(d, (char *)name, obj); +#else + PyDict_SetItemString(d, name, obj); +#endif + Py_DECREF(obj); +} + +#endif + +/* Append a value to the result obj */ + +SWIGINTERN PyObject* +SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { +#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyList_Check(result)) { + PyObject *o2 = result; + result = PyList_New(1); + PyList_SetItem(result, 0, o2); + } + PyList_Append(result,obj); + Py_DECREF(obj); + } + return result; +#else + PyObject* o2; + PyObject* o3; + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyTuple_Check(result)) { + o2 = result; + result = PyTuple_New(1); + PyTuple_SET_ITEM(result, 0, o2); + } + o3 = PyTuple_New(1); + PyTuple_SET_ITEM(o3, 0, obj); + o2 = result; + result = PySequence_Concat(o2, o3); + Py_DECREF(o2); + Py_DECREF(o3); + } + return result; +#endif +} + +/* Unpack the argument tuple */ + +SWIGINTERN int +SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) +{ + if (!args) { + if (!min && !max) { + return 1; + } else { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", + name, (min == max ? "" : "at least "), (int)min); + return 0; + } + } + if (!PyTuple_Check(args)) { + if (min <= 1 && max >= 1) { + register int i; + objs[0] = args; + for (i = 1; i < max; ++i) { + objs[i] = 0; + } + return 2; + } + PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); + return 0; + } else { + register Py_ssize_t l = PyTuple_GET_SIZE(args); + if (l < min) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at least "), (int)min, (int)l); + return 0; + } else if (l > max) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at most "), (int)max, (int)l); + return 0; + } else { + register int i; + for (i = 0; i < l; ++i) { + objs[i] = PyTuple_GET_ITEM(args, i); + } + for (; l < max; ++l) { + objs[l] = 0; + } + return i + 1; + } + } +} + +/* A functor is a function object with one single object argument */ +#if PY_VERSION_HEX >= 0x02020000 +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); +#else +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); +#endif + +/* + Helper for static pointer initialization for both C and C++ code, for example + static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); +*/ +#ifdef __cplusplus +#define SWIG_STATIC_POINTER(var) var +#else +#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var +#endif + +/* ----------------------------------------------------------------------------- + * Pointer declarations + * ----------------------------------------------------------------------------- */ + +/* Flags for new pointer objects */ +#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) +#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) + +#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) + +#define SWIG_BUILTIN_TP_INIT (SWIG_POINTER_OWN << 2) +#define SWIG_BUILTIN_INIT (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN) + +#ifdef __cplusplus +extern "C" { +#endif + +/* How to access Py_None */ +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# ifndef SWIG_PYTHON_NO_BUILD_NONE +# ifndef SWIG_PYTHON_BUILD_NONE +# define SWIG_PYTHON_BUILD_NONE +# endif +# endif +#endif + +#ifdef SWIG_PYTHON_BUILD_NONE +# ifdef Py_None +# undef Py_None +# define Py_None SWIG_Py_None() +# endif +SWIGRUNTIMEINLINE PyObject * +_SWIG_Py_None(void) +{ + PyObject *none = Py_BuildValue((char*)""); + Py_DECREF(none); + return none; +} +SWIGRUNTIME PyObject * +SWIG_Py_None(void) +{ + static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); + return none; +} +#endif + +/* The python void return value */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Py_Void(void) +{ + PyObject *none = Py_None; + Py_INCREF(none); + return none; +} + +/* SwigPyClientData */ + +typedef struct { + PyObject *klass; + PyObject *newraw; + PyObject *newargs; + PyObject *destroy; + int delargs; + int implicitconv; + PyTypeObject *pytype; +} SwigPyClientData; + +SWIGRUNTIMEINLINE int +SWIG_Python_CheckImplicit(swig_type_info *ty) +{ + SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; + return data ? data->implicitconv : 0; +} + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_ExceptionType(swig_type_info *desc) { + SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; + PyObject *klass = data ? data->klass : 0; + return (klass ? klass : PyExc_RuntimeError); +} + + +SWIGRUNTIME SwigPyClientData * +SwigPyClientData_New(PyObject* obj) +{ + if (!obj) { + return 0; + } else { + SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); + /* the klass element */ + data->klass = obj; + Py_INCREF(data->klass); + /* the newraw method and newargs arguments used to create a new raw instance */ + if (PyClass_Check(obj)) { + data->newraw = 0; + data->newargs = obj; + Py_INCREF(obj); + } else { +#if (PY_VERSION_HEX < 0x02020000) + data->newraw = 0; +#else + data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); +#endif + if (data->newraw) { + Py_INCREF(data->newraw); + data->newargs = PyTuple_New(1); + PyTuple_SetItem(data->newargs, 0, obj); + } else { + data->newargs = obj; + } + Py_INCREF(data->newargs); + } + /* the destroy method, aka as the C++ delete method */ + data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); + if (PyErr_Occurred()) { + PyErr_Clear(); + data->destroy = 0; + } + if (data->destroy) { + int flags; + Py_INCREF(data->destroy); + flags = PyCFunction_GET_FLAGS(data->destroy); +#ifdef METH_O + data->delargs = !(flags & (METH_O)); +#else + data->delargs = 0; +#endif + } else { + data->delargs = 0; + } + data->implicitconv = 0; + data->pytype = 0; + return data; + } +} + +SWIGRUNTIME void +SwigPyClientData_Del(SwigPyClientData *data) { + Py_XDECREF(data->newraw); + Py_XDECREF(data->newargs); + Py_XDECREF(data->destroy); +} + +/* =============== SwigPyObject =====================*/ + +typedef struct { + PyObject_HEAD + void *ptr; + swig_type_info *ty; + int own; + PyObject *next; +#ifdef SWIGPYTHON_BUILTIN + PyObject *dict; +#endif +} SwigPyObject; + +SWIGRUNTIME PyObject * +SwigPyObject_long(SwigPyObject *v) +{ + return PyLong_FromVoidPtr(v->ptr); +} + +SWIGRUNTIME PyObject * +SwigPyObject_format(const char* fmt, SwigPyObject *v) +{ + PyObject *res = NULL; + PyObject *args = PyTuple_New(1); + if (args) { + if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { + PyObject *ofmt = SWIG_Python_str_FromChar(fmt); + if (ofmt) { +#if PY_VERSION_HEX >= 0x03000000 + res = PyUnicode_Format(ofmt,args); +#else + res = PyString_Format(ofmt,args); +#endif + Py_DECREF(ofmt); + } + Py_DECREF(args); + } + } + return res; +} + +SWIGRUNTIME PyObject * +SwigPyObject_oct(SwigPyObject *v) +{ + return SwigPyObject_format("%o",v); +} + +SWIGRUNTIME PyObject * +SwigPyObject_hex(SwigPyObject *v) +{ + return SwigPyObject_format("%x",v); +} + +SWIGRUNTIME PyObject * +#ifdef METH_NOARGS +SwigPyObject_repr(SwigPyObject *v) +#else +SwigPyObject_repr(SwigPyObject *v, PyObject *args) +#endif +{ + const char *name = SWIG_TypePrettyName(v->ty); + PyObject *repr = SWIG_Python_str_FromFormat("", (name ? name : "unknown"), (void *)v); + if (v->next) { +# ifdef METH_NOARGS + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); +# else + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); +# endif +# if PY_VERSION_HEX >= 0x03000000 + PyObject *joined = PyUnicode_Concat(repr, nrep); + Py_DecRef(repr); + Py_DecRef(nrep); + repr = joined; +# else + PyString_ConcatAndDel(&repr,nrep); +# endif + } + return repr; +} + +SWIGRUNTIME int +SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char *str; +#ifdef METH_NOARGS + PyObject *repr = SwigPyObject_repr(v); +#else + PyObject *repr = SwigPyObject_repr(v, NULL); +#endif + if (repr) { + str = SWIG_Python_str_AsChar(repr); + fputs(str, fp); + SWIG_Python_str_DelForPy3(str); + Py_DECREF(repr); + return 0; + } else { + return 1; + } +} + +SWIGRUNTIME PyObject * +SwigPyObject_str(SwigPyObject *v) +{ + char result[SWIG_BUFFER_SIZE]; + return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ? + SWIG_Python_str_FromChar(result) : 0; +} + +SWIGRUNTIME int +SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) +{ + void *i = v->ptr; + void *j = w->ptr; + return (i < j) ? -1 : ((i > j) ? 1 : 0); +} + +/* Added for Python 3.x, would it also be useful for Python 2.x? */ +SWIGRUNTIME PyObject* +SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) +{ + PyObject* res; + if( op != Py_EQ && op != Py_NE ) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); + return res; +} + + +SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void); + +#ifdef SWIGPYTHON_BUILTIN +static swig_type_info *SwigPyObject_stype = 0; +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + SwigPyClientData *cd; + assert(SwigPyObject_stype); + cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; + assert(cd); + assert(cd->pytype); + return cd->pytype; +} +#else +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce(); + return type; +} +#endif + +SWIGRUNTIMEINLINE int +SwigPyObject_Check(PyObject *op) { +#ifdef SWIGPYTHON_BUILTIN + PyTypeObject *target_tp = SwigPyObject_type(); + if (PyType_IsSubtype(op->ob_type, target_tp)) + return 1; + return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0); +#else + return (Py_TYPE(op) == SwigPyObject_type()) + || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); +#endif +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own); + +SWIGRUNTIME void +SwigPyObject_dealloc(PyObject *v) +{ + SwigPyObject *sobj = (SwigPyObject *) v; + PyObject *next = sobj->next; + if (sobj->own == SWIG_POINTER_OWN) { + swig_type_info *ty = sobj->ty; + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + PyObject *destroy = data ? data->destroy : 0; + if (destroy) { + /* destroy is always a VARARGS method */ + PyObject *res; + if (data->delargs) { + /* we need to create a temporary object to carry the destroy operation */ + PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); + res = SWIG_Python_CallFunctor(destroy, tmp); + Py_DECREF(tmp); + } else { + PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); + PyObject *mself = PyCFunction_GET_SELF(destroy); + res = ((*meth)(mself, v)); + } + Py_XDECREF(res); + } +#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) + else { + const char *name = SWIG_TypePrettyName(ty); + printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); + } +#endif + } + Py_XDECREF(next); + PyObject_DEL(v); +} + +SWIGRUNTIME PyObject* +SwigPyObject_append(PyObject* v, PyObject* next) +{ + SwigPyObject *sobj = (SwigPyObject *) v; +#ifndef METH_O + PyObject *tmp = 0; + if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; + next = tmp; +#endif + if (!SwigPyObject_Check(next)) { + return NULL; + } + sobj->next = next; + Py_INCREF(next); + return SWIG_Py_Void(); +} + +SWIGRUNTIME PyObject* +#ifdef METH_NOARGS +SwigPyObject_next(PyObject* v) +#else +SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *) v; + if (sobj->next) { + Py_INCREF(sobj->next); + return sobj->next; + } else { + return SWIG_Py_Void(); + } +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_disown(PyObject *v) +#else +SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = 0; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_acquire(PyObject *v) +#else +SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = SWIG_POINTER_OWN; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +SwigPyObject_own(PyObject *v, PyObject *args) +{ + PyObject *val = 0; +#if (PY_VERSION_HEX < 0x02020000) + if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) +#elif (PY_VERSION_HEX < 0x02050000) + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) +#else + if (!PyArg_UnpackTuple(args, "own", 0, 1, &val)) +#endif + { + return NULL; + } + else + { + SwigPyObject *sobj = (SwigPyObject *)v; + PyObject *obj = PyBool_FromLong(sobj->own); + if (val) { +#ifdef METH_NOARGS + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v); + } else { + SwigPyObject_disown(v); + } +#else + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v,args); + } else { + SwigPyObject_disown(v,args); + } +#endif + } + return obj; + } +} + +#ifdef METH_O +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"acquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#else +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#endif + +#if PY_VERSION_HEX < 0x02020000 +SWIGINTERN PyObject * +SwigPyObject_getattr(SwigPyObject *sobj,char *name) +{ + return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); +} +#endif + +SWIGRUNTIME PyTypeObject* +SwigPyObject_TypeOnce(void) { + static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; + + static PyNumberMethods SwigPyObject_as_number = { + (binaryfunc)0, /*nb_add*/ + (binaryfunc)0, /*nb_subtract*/ + (binaryfunc)0, /*nb_multiply*/ + /* nb_divide removed in Python 3 */ +#if PY_VERSION_HEX < 0x03000000 + (binaryfunc)0, /*nb_divide*/ +#endif + (binaryfunc)0, /*nb_remainder*/ + (binaryfunc)0, /*nb_divmod*/ + (ternaryfunc)0,/*nb_power*/ + (unaryfunc)0, /*nb_negative*/ + (unaryfunc)0, /*nb_positive*/ + (unaryfunc)0, /*nb_absolute*/ + (inquiry)0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ +#if PY_VERSION_HEX < 0x03000000 + 0, /*nb_coerce*/ +#endif + (unaryfunc)SwigPyObject_long, /*nb_int*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_long, /*nb_long*/ +#else + 0, /*nb_reserved*/ +#endif + (unaryfunc)0, /*nb_float*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_oct, /*nb_oct*/ + (unaryfunc)SwigPyObject_hex, /*nb_hex*/ +#endif +#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ +#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ +#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ +#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ + 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ +#endif + }; + + static PyTypeObject swigpyobject_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(NULL, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyObject", /* tp_name */ + sizeof(SwigPyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyObject_dealloc, /* tp_dealloc */ + (printfunc)SwigPyObject_print, /* tp_print */ +#if PY_VERSION_HEX < 0x02020000 + (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ +#else + (getattrfunc)0, /* tp_getattr */ +#endif + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX >= 0x03000000 + 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ +#else + (cmpfunc)SwigPyObject_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyObject_repr, /* tp_repr */ + &SwigPyObject_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyObject_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigobject_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + swigobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpyobject_type = tmp; + type_init = 1; +#if PY_VERSION_HEX < 0x02020000 + swigpyobject_type.ob_type = &PyType_Type; +#else + if (PyType_Ready(&swigpyobject_type) < 0) + return NULL; +#endif + } + return &swigpyobject_type; +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own) +{ + SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); + if (sobj) { + sobj->ptr = ptr; + sobj->ty = ty; + sobj->own = own; + sobj->next = 0; + } + return (PyObject *)sobj; +} + +/* ----------------------------------------------------------------------------- + * Implements a simple Swig Packed type, and use it instead of string + * ----------------------------------------------------------------------------- */ + +typedef struct { + PyObject_HEAD + void *pack; + swig_type_info *ty; + size_t size; +} SwigPyPacked; + +SWIGRUNTIME int +SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char result[SWIG_BUFFER_SIZE]; + fputs("pack, v->size, 0, sizeof(result))) { + fputs("at ", fp); + fputs(result, fp); + } + fputs(v->ty->name,fp); + fputs(">", fp); + return 0; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_repr(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { + return SWIG_Python_str_FromFormat("", result, v->ty->name); + } else { + return SWIG_Python_str_FromFormat("", v->ty->name); + } +} + +SWIGRUNTIME PyObject * +SwigPyPacked_str(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ + return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); + } else { + return SWIG_Python_str_FromChar(v->ty->name); + } +} + +SWIGRUNTIME int +SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) +{ + size_t i = v->size; + size_t j = w->size; + int s = (i < j) ? -1 : ((i > j) ? 1 : 0); + return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); +} + +SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void); + +SWIGRUNTIME PyTypeObject* +SwigPyPacked_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyPacked_Check(PyObject *op) { + return ((op)->ob_type == SwigPyPacked_TypeOnce()) + || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); +} + +SWIGRUNTIME void +SwigPyPacked_dealloc(PyObject *v) +{ + if (SwigPyPacked_Check(v)) { + SwigPyPacked *sobj = (SwigPyPacked *) v; + free(sobj->pack); + } + PyObject_DEL(v); +} + +SWIGRUNTIME PyTypeObject* +SwigPyPacked_TypeOnce(void) { + static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; + static PyTypeObject swigpypacked_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX>=0x03000000 + PyVarObject_HEAD_INIT(NULL, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyPacked", /* tp_name */ + sizeof(SwigPyPacked), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ + (printfunc)SwigPyPacked_print, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX>=0x03000000 + 0, /* tp_reserved in 3.0.1 */ +#else + (cmpfunc)SwigPyPacked_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyPacked_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyPacked_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigpacked_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpypacked_type = tmp; + type_init = 1; +#if PY_VERSION_HEX < 0x02020000 + swigpypacked_type.ob_type = &PyType_Type; +#else + if (PyType_Ready(&swigpypacked_type) < 0) + return NULL; +#endif + } + return &swigpypacked_type; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) +{ + SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); + if (sobj) { + void *pack = malloc(size); + if (pack) { + memcpy(pack, ptr, size); + sobj->pack = pack; + sobj->ty = ty; + sobj->size = size; + } else { + PyObject_DEL((PyObject *) sobj); + sobj = 0; + } + } + return (PyObject *) sobj; +} + +SWIGRUNTIME swig_type_info * +SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) +{ + if (SwigPyPacked_Check(obj)) { + SwigPyPacked *sobj = (SwigPyPacked *)obj; + if (sobj->size != size) return 0; + memcpy(ptr, sobj->pack, size); + return sobj->ty; + } else { + return 0; + } +} + +/* ----------------------------------------------------------------------------- + * pointers/data manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIMEINLINE PyObject * +_SWIG_This(void) +{ + return SWIG_Python_str_FromChar("this"); +} + +static PyObject *swig_this = NULL; + +SWIGRUNTIME PyObject * +SWIG_This(void) +{ + if (swig_this == NULL) + swig_this = _SWIG_This(); + return swig_this; +} + +/* #define SWIG_PYTHON_SLOW_GETSET_THIS */ + +/* TODO: I don't know how to implement the fast getset in Python 3 right now */ +#if PY_VERSION_HEX>=0x03000000 +#define SWIG_PYTHON_SLOW_GETSET_THIS +#endif + +SWIGRUNTIME SwigPyObject * +SWIG_Python_GetSwigThis(PyObject *pyobj) +{ + PyObject *obj; + + if (SwigPyObject_Check(pyobj)) + return (SwigPyObject *) pyobj; + +#ifdef SWIGPYTHON_BUILTIN + (void)obj; +# ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + pyobj = PyWeakref_GET_OBJECT(pyobj); + if (pyobj && SwigPyObject_Check(pyobj)) + return (SwigPyObject*) pyobj; + } +# endif + return NULL; +#else + + obj = 0; + +#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) + if (PyInstance_Check(pyobj)) { + obj = _PyInstance_Lookup(pyobj, SWIG_This()); + } else { + PyObject **dictptr = _PyObject_GetDictPtr(pyobj); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; + } else { +#ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); + return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; + } +#endif + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } + } + } +#else + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } +#endif + if (obj && !SwigPyObject_Check(obj)) { + /* a PyObject is called 'this', try to get the 'real this' + SwigPyObject from it */ + return SWIG_Python_GetSwigThis(obj); + } + return (SwigPyObject *)obj; +#endif +} + +/* Acquire a pointer value */ + +SWIGRUNTIME int +SWIG_Python_AcquirePtr(PyObject *obj, int own) { + if (own == SWIG_POINTER_OWN) { + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (sobj) { + int oldown = sobj->own; + sobj->own = own; + return oldown; + } + } + return 0; +} + +/* Convert a pointer value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { + int res; + SwigPyObject *sobj; + + if (!obj) + return SWIG_ERROR; + if (obj == Py_None) { + if (ptr) + *ptr = 0; + return SWIG_OK; + } + + res = SWIG_ERROR; + + sobj = SWIG_Python_GetSwigThis(obj); + if (own) + *own = 0; + while (sobj) { + void *vptr = sobj->ptr; + if (ty) { + swig_type_info *to = sobj->ty; + if (to == ty) { + /* no type cast needed */ + if (ptr) *ptr = vptr; + break; + } else { + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) { + sobj = (SwigPyObject *)sobj->next; + } else { + if (ptr) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + if (newmemory == SWIG_CAST_NEW_MEMORY) { + assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ + if (own) + *own = *own | SWIG_CAST_NEW_MEMORY; + } + } + break; + } + } + } else { + if (ptr) *ptr = vptr; + break; + } + } + if (sobj) { + if (own) + *own = *own | sobj->own; + if (flags & SWIG_POINTER_DISOWN) { + sobj->own = 0; + } + res = SWIG_OK; + } else { + if (flags & SWIG_POINTER_IMPLICIT_CONV) { + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + if (data && !data->implicitconv) { + PyObject *klass = data->klass; + if (klass) { + PyObject *impconv; + data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ + impconv = SWIG_Python_CallFunctor(klass, obj); + data->implicitconv = 0; + if (PyErr_Occurred()) { + PyErr_Clear(); + impconv = 0; + } + if (impconv) { + SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); + if (iobj) { + void *vptr; + res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); + if (SWIG_IsOK(res)) { + if (ptr) { + *ptr = vptr; + /* transfer the ownership to 'ptr' */ + iobj->own = 0; + res = SWIG_AddCast(res); + res = SWIG_AddNewMask(res); + } else { + res = SWIG_AddCast(res); + } + } + } + Py_DECREF(impconv); + } + } + } + } + } + return res; +} + +/* Convert a function ptr value */ + +SWIGRUNTIME int +SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { + if (!PyCFunction_Check(obj)) { + return SWIG_ConvertPtr(obj, ptr, ty, 0); + } else { + void *vptr = 0; + + /* here we get the method pointer for callbacks */ + const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); + const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; + if (desc) + desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; + if (!desc) + return SWIG_ERROR; + if (ty) { + swig_cast_info *tc = SWIG_TypeCheck(desc,ty); + if (tc) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + assert(!newmemory); /* newmemory handling not yet implemented */ + } else { + return SWIG_ERROR; + } + } else { + *ptr = vptr; + } + return SWIG_OK; + } +} + +/* Convert a packed value value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { + swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); + if (!to) return SWIG_ERROR; + if (ty) { + if (to != ty) { + /* check type cast? */ + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) return SWIG_ERROR; + } + } + return SWIG_OK; +} + +/* ----------------------------------------------------------------------------- + * Create a new pointer object + * ----------------------------------------------------------------------------- */ + +/* + Create a new instance object, without calling __init__, and set the + 'this' attribute. +*/ + +SWIGRUNTIME PyObject* +SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) +{ +#if (PY_VERSION_HEX >= 0x02020000) + PyObject *inst = 0; + PyObject *newraw = data->newraw; + if (newraw) { + inst = PyObject_Call(newraw, data->newargs, NULL); + if (inst) { +#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + PyDict_SetItem(dict, SWIG_This(), swig_this); + } + } +#else + PyObject *key = SWIG_This(); + PyObject_SetAttr(inst, key, swig_this); +#endif + } + } else { +#if PY_VERSION_HEX >= 0x03000000 + inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); + if (inst) { + PyObject_SetAttr(inst, SWIG_This(), swig_this); + Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; + } +#else + PyObject *dict = PyDict_New(); + if (dict) { + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); + } +#endif + } + return inst; +#else +#if (PY_VERSION_HEX >= 0x02010000) + PyObject *inst = 0; + PyObject *dict = PyDict_New(); + if (dict) { + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); + } + return (PyObject *) inst; +#else + PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); + if (inst == NULL) { + return NULL; + } + inst->in_class = (PyClassObject *)data->newargs; + Py_INCREF(inst->in_class); + inst->in_dict = PyDict_New(); + if (inst->in_dict == NULL) { + Py_DECREF(inst); + return NULL; + } +#ifdef Py_TPFLAGS_HAVE_WEAKREFS + inst->in_weakreflist = NULL; +#endif +#ifdef Py_TPFLAGS_GC + PyObject_GC_Init(inst); +#endif + PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); + return (PyObject *) inst; +#endif +#endif +} + +SWIGRUNTIME void +SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) +{ + PyObject *dict; +#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + } + PyDict_SetItem(dict, SWIG_This(), swig_this); + return; + } +#endif + dict = PyObject_GetAttrString(inst, (char*)"__dict__"); + PyDict_SetItem(dict, SWIG_This(), swig_this); + Py_DECREF(dict); +} + + +SWIGINTERN PyObject * +SWIG_Python_InitShadowInstance(PyObject *args) { + PyObject *obj[2]; + if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) { + return NULL; + } else { + SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); + if (sthis) { + SwigPyObject_append((PyObject*) sthis, obj[1]); + } else { + SWIG_Python_SetSwigThis(obj[0], obj[1]); + } + return SWIG_Py_Void(); + } +} + +/* Create a new pointer object */ + +SWIGRUNTIME PyObject * +SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) { + SwigPyClientData *clientdata; + PyObject * robj; + int own; + + if (!ptr) + return SWIG_Py_Void(); + + clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; + own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + if (clientdata && clientdata->pytype) { + SwigPyObject *newobj; + if (flags & SWIG_BUILTIN_TP_INIT) { + newobj = (SwigPyObject*) self; + if (newobj->ptr) { + PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0); + while (newobj->next) + newobj = (SwigPyObject *) newobj->next; + newobj->next = next_self; + newobj = (SwigPyObject *)next_self; + } + } else { + newobj = PyObject_New(SwigPyObject, clientdata->pytype); + } + if (newobj) { + newobj->ptr = ptr; + newobj->ty = type; + newobj->own = own; + newobj->next = 0; +#ifdef SWIGPYTHON_BUILTIN + newobj->dict = 0; +#endif + return (PyObject*) newobj; + } + return SWIG_Py_Void(); + } + + assert(!(flags & SWIG_BUILTIN_TP_INIT)); + + robj = SwigPyObject_New(ptr, type, own); + if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { + PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); + Py_DECREF(robj); + robj = inst; + } + return robj; +} + +/* Create a new packed object */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { + return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); +} + +/* -----------------------------------------------------------------------------* + * Get type list + * -----------------------------------------------------------------------------*/ + +#ifdef SWIG_LINK_RUNTIME +void *SWIG_ReturnGlobalTypeList(void *); +#endif + +SWIGRUNTIME swig_module_info * +SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) { + static void *type_pointer = (void *)0; + /* first check if module already created */ + if (!type_pointer) { +#ifdef SWIG_LINK_RUNTIME + type_pointer = SWIG_ReturnGlobalTypeList((void *)0); +#else +# ifdef SWIGPY_USE_CAPSULE + type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0); +# else + type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); +# endif + if (PyErr_Occurred()) { + PyErr_Clear(); + type_pointer = (void *)0; + } +#endif + } + return (swig_module_info *) type_pointer; +} + +#if PY_MAJOR_VERSION < 2 +/* PyModule_AddObject function was introduced in Python 2.0. The following function + is copied out of Python/modsupport.c in python version 2.3.4 */ +SWIGINTERN int +PyModule_AddObject(PyObject *m, char *name, PyObject *o) +{ + PyObject *dict; + if (!PyModule_Check(m)) { + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs module as first arg"); + return SWIG_ERROR; + } + if (!o) { + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs non-NULL value"); + return SWIG_ERROR; + } + + dict = PyModule_GetDict(m); + if (dict == NULL) { + /* Internal error -- modules must have a dict! */ + PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", + PyModule_GetName(m)); + return SWIG_ERROR; + } + if (PyDict_SetItemString(dict, name, o)) + return SWIG_ERROR; + Py_DECREF(o); + return SWIG_OK; +} +#endif + +SWIGRUNTIME void +#ifdef SWIGPY_USE_CAPSULE +SWIG_Python_DestroyModule(PyObject *obj) +#else +SWIG_Python_DestroyModule(void *vptr) +#endif +{ +#ifdef SWIGPY_USE_CAPSULE + swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME); +#else + swig_module_info *swig_module = (swig_module_info *) vptr; +#endif + swig_type_info **types = swig_module->types; + size_t i; + for (i =0; i < swig_module->size; ++i) { + swig_type_info *ty = types[i]; + if (ty->owndata) { + SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; + if (data) SwigPyClientData_Del(data); + } + } + Py_DECREF(SWIG_This()); + swig_this = NULL; +} + +SWIGRUNTIME void +SWIG_Python_SetModule(swig_module_info *swig_module) { +#if PY_VERSION_HEX >= 0x03000000 + /* Add a dummy module object into sys.modules */ + PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); +#else + static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */ + PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); +#endif +#ifdef SWIGPY_USE_CAPSULE + PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule); + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer); + } else { + Py_XDECREF(pointer); + } +#else + PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); + } else { + Py_XDECREF(pointer); + } +#endif +} + +/* The python cached type query */ +SWIGRUNTIME PyObject * +SWIG_Python_TypeCache(void) { + static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); + return cache; +} + +SWIGRUNTIME swig_type_info * +SWIG_Python_TypeQuery(const char *type) +{ + PyObject *cache = SWIG_Python_TypeCache(); + PyObject *key = SWIG_Python_str_FromChar(type); + PyObject *obj = PyDict_GetItem(cache, key); + swig_type_info *descriptor; + if (obj) { +#ifdef SWIGPY_USE_CAPSULE + descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL); +#else + descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); +#endif + } else { + swig_module_info *swig_module = SWIG_GetModule(0); + descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); + if (descriptor) { +#ifdef SWIGPY_USE_CAPSULE + obj = PyCapsule_New((void*) descriptor, NULL, NULL); +#else + obj = PyCObject_FromVoidPtr(descriptor, NULL); +#endif + PyDict_SetItem(cache, key, obj); + Py_DECREF(obj); + } + } + Py_DECREF(key); + return descriptor; +} + +/* + For backward compatibility only +*/ +#define SWIG_POINTER_EXCEPTION 0 +#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) +#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) + +SWIGRUNTIME int +SWIG_Python_AddErrMesg(const char* mesg, int infront) +{ + if (PyErr_Occurred()) { + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + Py_XINCREF(type); + PyErr_Clear(); + if (infront) { + PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); + } else { + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + } + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + } + return 1; + } else { + return 0; + } +} + +SWIGRUNTIME int +SWIG_Python_ArgFail(int argnum) +{ + if (PyErr_Occurred()) { + /* add information about failing argument */ + char mesg[256]; + PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); + return SWIG_Python_AddErrMesg(mesg, 1); + } else { + return 0; + } +} + +SWIGRUNTIMEINLINE const char * +SwigPyObject_GetDesc(PyObject *self) +{ + SwigPyObject *v = (SwigPyObject *)self; + swig_type_info *ty = v ? v->ty : 0; + return ty ? ty->str : ""; +} + +SWIGRUNTIME void +SWIG_Python_TypeError(const char *type, PyObject *obj) +{ + if (type) { +#if defined(SWIG_COBJECT_TYPES) + if (obj && SwigPyObject_Check(obj)) { + const char *otype = (const char *) SwigPyObject_GetDesc(obj); + if (otype) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", + type, otype); + return; + } + } else +#endif + { + const char *otype = (obj ? obj->ob_type->tp_name : 0); + if (otype) { + PyObject *str = PyObject_Str(obj); + const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; + if (cstr) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", + type, otype, cstr); + SWIG_Python_str_DelForPy3(cstr); + } else { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", + type, otype); + } + Py_XDECREF(str); + return; + } + } + PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); + } else { + PyErr_Format(PyExc_TypeError, "unexpected type is received"); + } +} + + +/* Convert a pointer value, signal an exception on a type mismatch */ +SWIGRUNTIME void * +SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) { + void *result; + if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { + PyErr_Clear(); +#if SWIG_POINTER_EXCEPTION + if (flags) { + SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); + SWIG_Python_ArgFail(argnum); + } +#endif + } + return result; +} + +#ifdef SWIGPYTHON_BUILTIN +SWIGRUNTIME int +SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { + PyTypeObject *tp = obj->ob_type; + PyObject *descr; + PyObject *encoded_name; + descrsetfunc f; + int res; + +# ifdef Py_USING_UNICODE + if (PyString_Check(name)) { + name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL); + if (!name) + return -1; + } else if (!PyUnicode_Check(name)) +# else + if (!PyString_Check(name)) +# endif + { + PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name); + return -1; + } else { + Py_INCREF(name); + } + + if (!tp->tp_dict) { + if (PyType_Ready(tp) < 0) + goto done; + } + + res = -1; + descr = _PyType_Lookup(tp, name); + f = NULL; + if (descr != NULL) + f = descr->ob_type->tp_descr_set; + if (!f) { + if (PyString_Check(name)) { + encoded_name = name; + Py_INCREF(name); + } else { + encoded_name = PyUnicode_AsUTF8String(name); + } + PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name)); + Py_DECREF(encoded_name); + } else { + res = f(descr, obj, value); + } + + done: + Py_DECREF(name); + return res; +} +#endif + + +#ifdef __cplusplus +} +#endif + + + +#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) + +#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else + + + + #define SWIG_exception(code, msg) do { SWIG_Error(code, msg); SWIG_fail;; } while(0) + + +/* -------- TYPES TABLE (BEGIN) -------- */ + +#define SWIGTYPE_p_allocator_type swig_types[0] +#define SWIGTYPE_p_char swig_types[1] +#define SWIGTYPE_p_difference_type swig_types[2] +#define SWIGTYPE_p_p_PyObject swig_types[3] +#define SWIGTYPE_p_size_type swig_types[4] +#define SWIGTYPE_p_std__allocatorT_double_t swig_types[5] +#define SWIGTYPE_p_std__allocatorT_float_t swig_types[6] +#define SWIGTYPE_p_std__allocatorT_int_t swig_types[7] +#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[8] +#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[9] +#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[10] +#define SWIGTYPE_p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t swig_types[11] +#define SWIGTYPE_p_std__allocatorT_unsigned_char_t swig_types[12] +#define SWIGTYPE_p_std__invalid_argument swig_types[13] +#define SWIGTYPE_p_std__vectorT__Tp__Alloc_t swig_types[14] +#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[15] +#define SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t swig_types[16] +#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[17] +#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[18] +#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[19] +#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[20] +#define SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t swig_types[21] +#define SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t swig_types[22] +#define SWIGTYPE_p_swig__SwigPyIterator swig_types[23] +#define SWIGTYPE_p_value_type swig_types[24] +static swig_type_info *swig_types[26]; +static swig_module_info swig_module = {swig_types, 25, 0, 0, 0, 0}; +#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) +#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) + +/* -------- TYPES TABLE (END) -------- */ + +#if (PY_VERSION_HEX <= 0x02000000) +# if !defined(SWIG_PYTHON_CLASSIC) +# error "This python version requires swig to be run with the '-classic' option" +# endif +#endif + +/*----------------------------------------------- + @(target):= _geoda.so + ------------------------------------------------*/ +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_init PyInit__geoda + +#else +# define SWIG_init init_geoda + +#endif +#define SWIG_name "_geoda" + +#define SWIGVERSION 0x020010 +#define SWIG_VERSION SWIGVERSION + + +#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) +#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) + + +#include + + +namespace swig { + class SwigPtr_PyObject { + protected: + PyObject *_obj; + + public: + SwigPtr_PyObject() :_obj(0) + { + } + + SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj) + { + Py_XINCREF(_obj); + } + + SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj) + { + if (initial_ref) { + Py_XINCREF(_obj); + } + } + + SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) + { + Py_XINCREF(item._obj); + Py_XDECREF(_obj); + _obj = item._obj; + return *this; + } + + ~SwigPtr_PyObject() + { + Py_XDECREF(_obj); + } + + operator PyObject *() const + { + return _obj; + } + + PyObject *operator->() const + { + return _obj; + } + }; +} + + +namespace swig { + struct SwigVar_PyObject : SwigPtr_PyObject { + SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { } + + SwigVar_PyObject & operator = (PyObject* obj) + { + Py_XDECREF(_obj); + _obj = obj; + return *this; + } + }; +} + + +#include + + +#include + +#if PY_VERSION_HEX >= 0x03020000 +# define SWIGPY_SLICE_ARG(obj) ((PyObject*) (obj)) +#else +# define SWIGPY_SLICE_ARG(obj) ((PySliceObject*) (obj)) +#endif + + +#include + + +#if defined(__GNUC__) +# if __GNUC__ == 2 && __GNUC_MINOR <= 96 +# define SWIG_STD_NOMODERN_STL +# endif +#endif + + +#include +#include +#include + + + #include + + +namespace swig { + struct stop_iteration { + }; + + struct SwigPyIterator { + private: + SwigPtr_PyObject _seq; + + protected: + SwigPyIterator(PyObject *seq) : _seq(seq) + { + } + + public: + virtual ~SwigPyIterator() {} + + // Access iterator method, required by Python + virtual PyObject *value() const = 0; + + // Forward iterator method, required by Python + virtual SwigPyIterator *incr(size_t n = 1) = 0; + + // Backward iterator method, very common in C++, but not required in Python + virtual SwigPyIterator *decr(size_t /*n*/ = 1) + { + throw stop_iteration(); + } + + // Random access iterator methods, but not required in Python + virtual ptrdiff_t distance(const SwigPyIterator &/*x*/) const + { + throw std::invalid_argument("operation not supported"); + } + + virtual bool equal (const SwigPyIterator &/*x*/) const + { + throw std::invalid_argument("operation not supported"); + } + + // C++ common/needed methods + virtual SwigPyIterator *copy() const = 0; + + PyObject *next() + { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; // disable threads + PyObject *obj = value(); + incr(); + SWIG_PYTHON_THREAD_END_BLOCK; // re-enable threads + return obj; + } + + /* Make an alias for Python 3.x */ + PyObject *__next__() + { + return next(); + } + + PyObject *previous() + { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; // disable threads + decr(); + PyObject *obj = value(); + SWIG_PYTHON_THREAD_END_BLOCK; // re-enable threads + return obj; + } + + SwigPyIterator *advance(ptrdiff_t n) + { + return (n > 0) ? incr(n) : decr(-n); + } + + bool operator == (const SwigPyIterator& x) const + { + return equal(x); + } + + bool operator != (const SwigPyIterator& x) const + { + return ! operator==(x); + } + + SwigPyIterator& operator += (ptrdiff_t n) + { + return *advance(n); + } + + SwigPyIterator& operator -= (ptrdiff_t n) + { + return *advance(-n); + } + + SwigPyIterator* operator + (ptrdiff_t n) const + { + return copy()->advance(n); + } + + SwigPyIterator* operator - (ptrdiff_t n) const + { + return copy()->advance(-n); + } + + ptrdiff_t operator - (const SwigPyIterator& x) const + { + return x.distance(*this); + } + + static swig_type_info* descriptor() { + static int init = 0; + static swig_type_info* desc = 0; + if (!init) { + desc = SWIG_TypeQuery("swig::SwigPyIterator *"); + init = 1; + } + return desc; + } + }; + +#if defined(SWIGPYTHON_BUILTIN) + inline PyObject* make_output_iterator_builtin (PyObject *pyself) + { + Py_INCREF(pyself); + return pyself; + } +#endif +} + + +SWIGINTERN int +SWIG_AsVal_double (PyObject *obj, double *val) +{ + int res = SWIG_TypeError; + if (PyFloat_Check(obj)) { + if (val) *val = PyFloat_AsDouble(obj); + return SWIG_OK; + } else if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else if (PyLong_Check(obj)) { + double v = PyLong_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + double d = PyFloat_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = d; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); + } else { + PyErr_Clear(); + } + } + } +#endif + return res; +} + + +#include + + +#include + + +SWIGINTERNINLINE int +SWIG_CanCastAsInteger(double *d, double min, double max) { + double x = *d; + if ((min <= x && x <= max)) { + double fx = floor(x); + double cx = ceil(x); + double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ + if ((errno == EDOM) || (errno == ERANGE)) { + errno = 0; + } else { + double summ, reps, diff; + if (rd < x) { + diff = x - rd; + } else if (rd > x) { + diff = rd - x; + } else { + return 1; + } + summ = rd + x; + reps = diff/summ; + if (reps < 8*DBL_EPSILON) { + *d = rd; + return 1; + } + } + } + return 0; +} + + +SWIGINTERN int +SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) +{ +#if PY_VERSION_HEX < 0x03000000 + if (PyInt_Check(obj)) { + long v = PyInt_AsLong(obj); + if (v >= 0) { + if (val) *val = v; + return SWIG_OK; + } else { + return SWIG_OverflowError; + } + } else +#endif + if (PyLong_Check(obj)) { + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); +#if PY_VERSION_HEX >= 0x03000000 + { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (v < 0) { + return SWIG_OverflowError; + } + } else { + PyErr_Clear(); + } + } +#endif + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { + if (val) *val = (unsigned long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERNINLINE int +SWIG_AsVal_size_t (PyObject * obj, size_t *val) +{ + unsigned long v; + int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v); + return res; +} + + + #define SWIG_From_long PyLong_FromLong + + +SWIGINTERNINLINE PyObject * +SWIG_From_ptrdiff_t (ptrdiff_t value) +{ + return SWIG_From_long (static_cast< long >(value)); +} + + +SWIGINTERNINLINE PyObject* + SWIG_From_bool (bool value) +{ + return PyBool_FromLong(value ? 1 : 0); +} + + +SWIGINTERN int +SWIG_AsVal_long (PyObject *obj, long* val) +{ + if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else if (PyLong_Check(obj)) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + long v = PyInt_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { + if (val) *val = (long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERNINLINE int +SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val) +{ + long v; + int res = SWIG_AsVal_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v); + return res; +} + + +#include + + +#include + + +#include + + +namespace swig { + template + struct noconst_traits { + typedef Type noconst_type; + }; + + template + struct noconst_traits { + typedef Type noconst_type; + }; + + /* + type categories + */ + struct pointer_category { }; + struct value_category { }; + + /* + General traits that provides type_name and type_info + */ + template struct traits { }; + + template + inline const char* type_name() { + return traits::noconst_type >::type_name(); + } + + template + struct traits_info { + static swig_type_info *type_query(std::string name) { + name += " *"; + return SWIG_TypeQuery(name.c_str()); + } + static swig_type_info *type_info() { + static swig_type_info *info = type_query(type_name()); + return info; + } + }; + + template + inline swig_type_info *type_info() { + return traits_info::type_info(); + } + + /* + Partial specialization for pointers + */ + template struct traits { + typedef pointer_category category; + static std::string make_ptr_name(const char* name) { + std::string ptrname = name; + ptrname += " *"; + return ptrname; + } + static const char* type_name() { + static std::string name = make_ptr_name(swig::type_name()); + return name.c_str(); + } + }; + + template + struct traits_as { }; + + template + struct traits_check { }; + +} + + +namespace swig { + /* + Traits that provides the from method + */ + template struct traits_from_ptr { + static PyObject *from(Type *val, int owner = 0) { + return SWIG_InternalNewPointerObj(val, type_info(), owner); + } + }; + + template struct traits_from { + static PyObject *from(const Type& val) { + return traits_from_ptr::from(new Type(val), 1); + } + }; + + template struct traits_from { + static PyObject *from(Type* val) { + return traits_from_ptr::from(val, 0); + } + }; + + template struct traits_from { + static PyObject *from(const Type* val) { + return traits_from_ptr::from(const_cast(val), 0); + } + }; + + + template + inline PyObject *from(const Type& val) { + return traits_from::from(val); + } + + template + inline PyObject *from_ptr(Type* val, int owner) { + return traits_from_ptr::from(val, owner); + } + + /* + Traits that provides the asval/as/check method + */ + template + struct traits_asptr { + static int asptr(PyObject *obj, Type **val) { + Type *p; + int res = SWIG_ConvertPtr(obj, (void**)&p, type_info(), 0); + if (SWIG_IsOK(res)) { + if (val) *val = p; + } + return res; + } + }; + + template + inline int asptr(PyObject *obj, Type **vptr) { + return traits_asptr::asptr(obj, vptr); + } + + template + struct traits_asval { + static int asval(PyObject *obj, Type *val) { + if (val) { + Type *p = 0; + int res = traits_asptr::asptr(obj, &p); + if (!SWIG_IsOK(res)) return res; + if (p) { + typedef typename noconst_traits::noconst_type noconst_type; + *(const_cast(val)) = *p; + if (SWIG_IsNewObj(res)){ + delete p; + res = SWIG_DelNewMask(res); + } + return res; + } else { + return SWIG_ERROR; + } + } else { + return traits_asptr::asptr(obj, (Type **)(0)); + } + } + }; + + template struct traits_asval { + static int asval(PyObject *obj, Type **val) { + if (val) { + typedef typename noconst_traits::noconst_type noconst_type; + noconst_type *p = 0; + int res = traits_asptr::asptr(obj, &p); + if (SWIG_IsOK(res)) { + *(const_cast(val)) = p; + } + return res; + } else { + return traits_asptr::asptr(obj, (Type **)(0)); + } + } + }; + + template + inline int asval(PyObject *obj, Type *val) { + return traits_asval::asval(obj, val); + } + + template + struct traits_as { + static Type as(PyObject *obj, bool throw_error) { + Type v; + int res = asval(obj, &v); + if (!obj || !SWIG_IsOK(res)) { + if (!PyErr_Occurred()) { + ::SWIG_Error(SWIG_TypeError, swig::type_name()); + } + if (throw_error) throw std::invalid_argument("bad type"); + } + return v; + } + }; + + template + struct traits_as { + static Type as(PyObject *obj, bool throw_error) { + Type *v = 0; + int res = (obj ? traits_asptr::asptr(obj, &v) : SWIG_ERROR); + if (SWIG_IsOK(res) && v) { + if (SWIG_IsNewObj(res)) { + Type r(*v); + delete v; + return r; + } else { + return *v; + } + } else { + // Uninitialized return value, no Type() constructor required. + static Type *v_def = (Type*) malloc(sizeof(Type)); + if (!PyErr_Occurred()) { + SWIG_Error(SWIG_TypeError, swig::type_name()); + } + if (throw_error) throw std::invalid_argument("bad type"); + memset(v_def,0,sizeof(Type)); + return *v_def; + } + } + }; + + template + struct traits_as { + static Type* as(PyObject *obj, bool throw_error) { + Type *v = 0; + int res = (obj ? traits_asptr::asptr(obj, &v) : SWIG_ERROR); + if (SWIG_IsOK(res)) { + return v; + } else { + if (!PyErr_Occurred()) { + SWIG_Error(SWIG_TypeError, swig::type_name()); + } + if (throw_error) throw std::invalid_argument("bad type"); + return 0; + } + } + }; + + template + inline Type as(PyObject *obj, bool te = false) { + return traits_as::category>::as(obj, te); + } + + template + struct traits_check { + static bool check(PyObject *obj) { + int res = obj ? asval(obj, (Type *)(0)) : SWIG_ERROR; + return SWIG_IsOK(res) ? true : false; + } + }; + + template + struct traits_check { + static bool check(PyObject *obj) { + int res = obj ? asptr(obj, (Type **)(0)) : SWIG_ERROR; + return SWIG_IsOK(res) ? true : false; + } + }; + + template + inline bool check(PyObject *obj) { + return traits_check::category>::check(obj); + } +} + + +#include + +namespace std { + template <> + struct less : public binary_function + { + bool + operator()(PyObject * v, PyObject *w) const + { + bool res; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + res = PyObject_RichCompareBool(v, w, Py_LT) ? true : false; + /* This may fall into a case of inconsistent + eg. ObjA > ObjX > ObjB + but ObjA < ObjB + */ + if( PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError) ) + { + /* Objects can't be compared, this mostly occurred in Python 3.0 */ + /* Compare their ptr directly for a workaround */ + res = (v < w); + PyErr_Clear(); + } + SWIG_PYTHON_THREAD_END_BLOCK; + return res; + } + }; + + template <> + struct less : public binary_function + { + bool + operator()(const swig::SwigPtr_PyObject& v, const swig::SwigPtr_PyObject& w) const + { + return std::less()(v, w); + } + }; + + template <> + struct less : public binary_function + { + bool + operator()(const swig::SwigVar_PyObject& v, const swig::SwigVar_PyObject& w) const + { + return std::less()(v, w); + } + }; + +} + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return "PyObject *"; } + }; + + template <> struct traits_asval { + typedef PyObject * value_type; + static int asval(PyObject *obj, value_type *val) { + if (val) *val = obj; + return SWIG_OK; + } + }; + + template <> + struct traits_check { + static bool check(PyObject *) { + return true; + } + }; + + template <> struct traits_from { + typedef PyObject * value_type; + static PyObject *from(const value_type& val) { + Py_XINCREF(val); + return val; + } + }; + +} + +namespace swig { + template + inline size_t + check_index(Difference i, size_t size, bool insert = false) { + if ( i < 0 ) { + if ((size_t) (-i) <= size) + return (size_t) (i + size); + } else if ( (size_t) i < size ) { + return (size_t) i; + } else if (insert && ((size_t) i == size)) { + return size; + } + throw std::out_of_range("index out of range"); + } + + template + void + slice_adjust(Difference i, Difference j, Py_ssize_t step, size_t size, Difference &ii, Difference &jj, bool insert = false) { + if (step == 0) { + throw std::invalid_argument("slice step cannot be zero"); + } else if (step > 0) { + // Required range: 0 <= i < size, 0 <= j < size + if (i < 0) { + ii = 0; + } else if (i < (Difference)size) { + ii = i; + } else if (insert && (i >= (Difference)size)) { + ii = (Difference)size; + } + if ( j < 0 ) { + jj = 0; + } else { + jj = (j < (Difference)size) ? j : (Difference)size; + } + } else { + // Required range: -1 <= i < size-1, -1 <= j < size-1 + if (i < -1) { + ii = -1; + } else if (i < (Difference) size) { + ii = i; + } else if (i >= (Difference)(size-1)) { + ii = (Difference)(size-1); + } + if (j < -1) { + jj = -1; + } else { + jj = (j < (Difference)size ) ? j : (Difference)(size-1); + } + } + } + + template + inline typename Sequence::iterator + getpos(Sequence* self, Difference i) { + typename Sequence::iterator pos = self->begin(); + std::advance(pos, check_index(i,self->size())); + return pos; + } + + template + inline typename Sequence::const_iterator + cgetpos(const Sequence* self, Difference i) { + typename Sequence::const_iterator pos = self->begin(); + std::advance(pos, check_index(i,self->size())); + return pos; + } + + template + inline Sequence* + getslice(const Sequence* self, Difference i, Difference j, Py_ssize_t step) { + typename Sequence::size_type size = self->size(); + Difference ii = 0; + Difference jj = 0; + swig::slice_adjust(i, j, step, size, ii, jj); + + if (step > 0) { + typename Sequence::const_iterator sb = self->begin(); + typename Sequence::const_iterator se = self->begin(); + std::advance(sb,ii); + std::advance(se,jj); + if (step == 1) { + return new Sequence(sb, se); + } else { + Sequence *sequence = new Sequence(); + typename Sequence::const_iterator it = sb; + while (it!=se) { + sequence->push_back(*it); + for (Py_ssize_t c=0; c jj) { + typename Sequence::const_reverse_iterator sb = self->rbegin(); + typename Sequence::const_reverse_iterator se = self->rbegin(); + std::advance(sb,size-ii-1); + std::advance(se,size-jj-1); + typename Sequence::const_reverse_iterator it = sb; + while (it!=se) { + sequence->push_back(*it); + for (Py_ssize_t c=0; c<-step && it!=se; ++c) + it++; + } + } + return sequence; + } + } + + template + inline void + setslice(Sequence* self, Difference i, Difference j, Py_ssize_t step, const InputSeq& is = InputSeq()) { + typename Sequence::size_type size = self->size(); + Difference ii = 0; + Difference jj = 0; + swig::slice_adjust(i, j, step, size, ii, jj, true); + if (step > 0) { + if (jj < ii) + jj = ii; + if (step == 1) { + size_t ssize = jj - ii; + if (ssize <= is.size()) { + // expanding/staying the same size + typename Sequence::iterator sb = self->begin(); + typename InputSeq::const_iterator isit = is.begin(); + std::advance(sb,ii); + std::advance(isit, jj - ii); + self->insert(std::copy(is.begin(), isit, sb), isit, is.end()); + } else { + // shrinking + typename Sequence::iterator sb = self->begin(); + typename Sequence::iterator se = self->begin(); + std::advance(sb,ii); + std::advance(se,jj); + self->erase(sb,se); + sb = self->begin(); + std::advance(sb,ii); + self->insert(sb, is.begin(), is.end()); + } + } else { + size_t replacecount = (jj - ii + step - 1) / step; + if (is.size() != replacecount) { + char msg[1024]; + sprintf(msg, "attempt to assign sequence of size %lu to extended slice of size %lu", (unsigned long)is.size(), (unsigned long)replacecount); + throw std::invalid_argument(msg); + } + typename Sequence::const_iterator isit = is.begin(); + typename Sequence::iterator it = self->begin(); + std::advance(it,ii); + for (size_t rc=0; rcend(); ++c) + it++; + } + } + } else { + if (jj > ii) + jj = ii; + size_t replacecount = (ii - jj - step - 1) / -step; + if (is.size() != replacecount) { + char msg[1024]; + sprintf(msg, "attempt to assign sequence of size %lu to extended slice of size %lu", (unsigned long)is.size(), (unsigned long)replacecount); + throw std::invalid_argument(msg); + } + typename Sequence::const_iterator isit = is.begin(); + typename Sequence::reverse_iterator it = self->rbegin(); + std::advance(it,size-ii-1); + for (size_t rc=0; rcrend(); ++c) + it++; + } + } + } + + template + inline void + delslice(Sequence* self, Difference i, Difference j, Py_ssize_t step) { + typename Sequence::size_type size = self->size(); + Difference ii = 0; + Difference jj = 0; + swig::slice_adjust(i, j, step, size, ii, jj, true); + if (step > 0) { + if (jj > ii) { + typename Sequence::iterator sb = self->begin(); + std::advance(sb,ii); + if (step == 1) { + typename Sequence::iterator se = self->begin(); + std::advance(se,jj); + self->erase(sb,se); + } else { + typename Sequence::iterator it = sb; + size_t delcount = (jj - ii + step - 1) / step; + while (delcount) { + it = self->erase(it); + for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c) + it++; + delcount--; + } + } + } + } else { + if (ii > jj) { + typename Sequence::reverse_iterator sb = self->rbegin(); + std::advance(sb,size-ii-1); + typename Sequence::reverse_iterator it = sb; + size_t delcount = (ii - jj - step - 1) / -step; + while (delcount) { + it = typename Sequence::reverse_iterator(self->erase((++it).base())); + for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c) + it++; + delcount--; + } + } + } + } +} + + +#if defined(__SUNPRO_CC) && defined(_RWSTD_VER) +# if !defined(SWIG_NO_STD_NOITERATOR_TRAITS_STL) +# define SWIG_STD_NOITERATOR_TRAITS_STL +# endif +#endif + +#if !defined(SWIG_STD_NOITERATOR_TRAITS_STL) +#include +#else +namespace std { + template + struct iterator_traits { + typedef ptrdiff_t difference_type; + typedef typename Iterator::value_type value_type; + }; + + template + struct iterator_traits<__reverse_bi_iterator > { + typedef Distance difference_type; + typedef T value_type; + }; + + template + struct iterator_traits { + typedef T value_type; + typedef ptrdiff_t difference_type; + }; + + template + inline typename iterator_traits<_InputIterator>::difference_type + distance(_InputIterator __first, _InputIterator __last) + { + typename iterator_traits<_InputIterator>::difference_type __n = 0; + while (__first != __last) { + ++__first; ++__n; + } + return __n; + } +} +#endif + + +namespace swig { + template + class SwigPyIterator_T : public SwigPyIterator + { + public: + typedef OutIterator out_iterator; + typedef typename std::iterator_traits::value_type value_type; + typedef SwigPyIterator_T self_type; + + SwigPyIterator_T(out_iterator curr, PyObject *seq) + : SwigPyIterator(seq), current(curr) + { + } + + const out_iterator& get_current() const + { + return current; + } + + + bool equal (const SwigPyIterator &iter) const + { + const self_type *iters = dynamic_cast(&iter); + if (iters) { + return (current == iters->get_current()); + } else { + throw std::invalid_argument("bad iterator type"); + } + } + + ptrdiff_t distance(const SwigPyIterator &iter) const + { + const self_type *iters = dynamic_cast(&iter); + if (iters) { + return std::distance(current, iters->get_current()); + } else { + throw std::invalid_argument("bad iterator type"); + } + } + + protected: + out_iterator current; + }; + + template + struct from_oper + { + typedef const ValueType& argument_type; + typedef PyObject *result_type; + result_type operator()(argument_type v) const + { + return swig::from(v); + } + }; + + template::value_type, + typename FromOper = from_oper > + class SwigPyIteratorOpen_T : public SwigPyIterator_T + { + public: + FromOper from; + typedef OutIterator out_iterator; + typedef ValueType value_type; + typedef SwigPyIterator_T base; + typedef SwigPyIteratorOpen_T self_type; + + SwigPyIteratorOpen_T(out_iterator curr, PyObject *seq) + : SwigPyIterator_T(curr, seq) + { + } + + PyObject *value() const { + return from(static_cast(*(base::current))); + } + + SwigPyIterator *copy() const + { + return new self_type(*this); + } + + SwigPyIterator *incr(size_t n = 1) + { + while (n--) { + ++base::current; + } + return this; + } + + SwigPyIterator *decr(size_t n = 1) + { + while (n--) { + --base::current; + } + return this; + } + }; + + template::value_type, + typename FromOper = from_oper > + class SwigPyIteratorClosed_T : public SwigPyIterator_T + { + public: + FromOper from; + typedef OutIterator out_iterator; + typedef ValueType value_type; + typedef SwigPyIterator_T base; + typedef SwigPyIteratorClosed_T self_type; + + SwigPyIteratorClosed_T(out_iterator curr, out_iterator first, out_iterator last, PyObject *seq) + : SwigPyIterator_T(curr, seq), begin(first), end(last) + { + } + + PyObject *value() const { + if (base::current == end) { + throw stop_iteration(); + } else { + return from(static_cast(*(base::current))); + } + } + + SwigPyIterator *copy() const + { + return new self_type(*this); + } + + SwigPyIterator *incr(size_t n = 1) + { + while (n--) { + if (base::current == end) { + throw stop_iteration(); + } else { + ++base::current; + } + } + return this; + } + + SwigPyIterator *decr(size_t n = 1) + { + while (n--) { + if (base::current == begin) { + throw stop_iteration(); + } else { + --base::current; + } + } + return this; + } + + private: + out_iterator begin; + out_iterator end; + }; + + template + inline SwigPyIterator* + make_output_iterator(const OutIter& current, const OutIter& begin,const OutIter& end, PyObject *seq = 0) + { + return new SwigPyIteratorClosed_T(current, begin, end, seq); + } + + template + inline SwigPyIterator* + make_output_iterator(const OutIter& current, PyObject *seq = 0) + { + return new SwigPyIteratorOpen_T(current, seq); + } + +} + + +namespace swig +{ + template + struct SwigPySequence_Ref + { + SwigPySequence_Ref(PyObject* seq, int index) + : _seq(seq), _index(index) + { + } + + operator T () const + { + swig::SwigVar_PyObject item = PySequence_GetItem(_seq, _index); + try { + return swig::as(item, true); + } catch (std::exception& e) { + char msg[1024]; + sprintf(msg, "in sequence element %d ", _index); + if (!PyErr_Occurred()) { + ::SWIG_Error(SWIG_TypeError, swig::type_name()); + } + SWIG_Python_AddErrorMsg(msg); + SWIG_Python_AddErrorMsg(e.what()); + throw; + } + } + + SwigPySequence_Ref& operator=(const T& v) + { + PySequence_SetItem(_seq, _index, swig::from(v)); + return *this; + } + + private: + PyObject* _seq; + int _index; + }; + + template + struct SwigPySequence_ArrowProxy + { + SwigPySequence_ArrowProxy(const T& x): m_value(x) {} + const T* operator->() const { return &m_value; } + operator const T*() const { return &m_value; } + T m_value; + }; + + template + struct SwigPySequence_InputIterator + { + typedef SwigPySequence_InputIterator self; + + typedef std::random_access_iterator_tag iterator_category; + typedef Reference reference; + typedef T value_type; + typedef T* pointer; + typedef int difference_type; + + SwigPySequence_InputIterator() + { + } + + SwigPySequence_InputIterator(PyObject* seq, int index) + : _seq(seq), _index(index) + { + } + + reference operator*() const + { + return reference(_seq, _index); + } + + SwigPySequence_ArrowProxy + operator->() const { + return SwigPySequence_ArrowProxy(operator*()); + } + + bool operator==(const self& ri) const + { + return (_index == ri._index) && (_seq == ri._seq); + } + + bool operator!=(const self& ri) const + { + return !(operator==(ri)); + } + + self& operator ++ () + { + ++_index; + return *this; + } + + self& operator -- () + { + --_index; + return *this; + } + + self& operator += (difference_type n) + { + _index += n; + return *this; + } + + self operator +(difference_type n) const + { + return self(_seq, _index + n); + } + + self& operator -= (difference_type n) + { + _index -= n; + return *this; + } + + self operator -(difference_type n) const + { + return self(_seq, _index - n); + } + + difference_type operator - (const self& ri) const + { + return _index - ri._index; + } + + bool operator < (const self& ri) const + { + return _index < ri._index; + } + + reference + operator[](difference_type n) const + { + return reference(_seq, _index + n); + } + + private: + PyObject* _seq; + difference_type _index; + }; + + template + struct SwigPySequence_Cont + { + typedef SwigPySequence_Ref reference; + typedef const SwigPySequence_Ref const_reference; + typedef T value_type; + typedef T* pointer; + typedef int difference_type; + typedef int size_type; + typedef const pointer const_pointer; + typedef SwigPySequence_InputIterator iterator; + typedef SwigPySequence_InputIterator const_iterator; + + SwigPySequence_Cont(PyObject* seq) : _seq(0) + { + if (!PySequence_Check(seq)) { + throw std::invalid_argument("a sequence is expected"); + } + _seq = seq; + Py_INCREF(_seq); + } + + ~SwigPySequence_Cont() + { + Py_XDECREF(_seq); + } + + size_type size() const + { + return static_cast(PySequence_Size(_seq)); + } + + bool empty() const + { + return size() == 0; + } + + iterator begin() + { + return iterator(_seq, 0); + } + + const_iterator begin() const + { + return const_iterator(_seq, 0); + } + + iterator end() + { + return iterator(_seq, size()); + } + + const_iterator end() const + { + return const_iterator(_seq, size()); + } + + reference operator[](difference_type n) + { + return reference(_seq, n); + } + + const_reference operator[](difference_type n) const + { + return const_reference(_seq, n); + } + + bool check(bool set_err = true) const + { + int s = size(); + for (int i = 0; i < s; ++i) { + swig::SwigVar_PyObject item = PySequence_GetItem(_seq, i); + if (!swig::check(item)) { + if (set_err) { + char msg[1024]; + sprintf(msg, "in sequence element %d", i); + SWIG_Error(SWIG_RuntimeError, msg); + } + return false; + } + } + return true; + } + + private: + PyObject* _seq; + }; + +} + + +SWIGINTERN int +SWIG_AsVal_float (PyObject * obj, float *val) +{ + double v; + int res = SWIG_AsVal_double (obj, &v); + if (SWIG_IsOK(res)) { + if ((v < -FLT_MAX || v > FLT_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = static_cast< float >(v); + } + } + return res; +} + + + #define SWIG_From_double PyFloat_FromDouble + + +SWIGINTERNINLINE PyObject * +SWIG_From_float (float value) +{ + return SWIG_From_double (value); +} + + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"float"; } + }; + template <> struct traits_asval { + typedef float value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_float (obj, val); + } + }; + template <> struct traits_from { + typedef float value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_float (val); + } + }; +} + + +namespace swig { + template + inline void + assign(const SwigPySeq& swigpyseq, Seq* seq) { + // seq->assign(swigpyseq.begin(), swigpyseq.end()); // not used as not always implemented + typedef typename SwigPySeq::value_type value_type; + typename SwigPySeq::const_iterator it = swigpyseq.begin(); + for (;it != swigpyseq.end(); ++it) { + seq->insert(seq->end(),(value_type)(*it)); + } + } + + template + struct traits_asptr_stdseq { + typedef Seq sequence; + typedef T value_type; + + static int asptr(PyObject *obj, sequence **seq) { + if (obj == Py_None || SWIG_Python_GetSwigThis(obj)) { + sequence *p; + if (::SWIG_ConvertPtr(obj,(void**)&p, + swig::type_info(),0) == SWIG_OK) { + if (seq) *seq = p; + return SWIG_OLDOBJ; + } + } else if (PySequence_Check(obj)) { + try { + SwigPySequence_Cont swigpyseq(obj); + if (seq) { + sequence *pseq = new sequence(); + assign(swigpyseq, pseq); + *seq = pseq; + return SWIG_NEWOBJ; + } else { + return swigpyseq.check() ? SWIG_OK : SWIG_ERROR; + } + } catch (std::exception& e) { + if (seq) { + if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, e.what()); + } + } + return SWIG_ERROR; + } + } + return SWIG_ERROR; + } + }; + + template + struct traits_from_stdseq { + typedef Seq sequence; + typedef T value_type; + typedef typename Seq::size_type size_type; + typedef typename sequence::const_iterator const_iterator; + + static PyObject *from(const sequence& seq) { +#ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS + swig_type_info *desc = swig::type_info(); + if (desc && desc->clientdata) { + return SWIG_NewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN); + } +#endif + size_type size = seq.size(); + if (size <= (size_type)INT_MAX) { + PyObject *obj = PyTuple_New((int)size); + int i = 0; + for (const_iterator it = seq.begin(); + it != seq.end(); ++it, ++i) { + PyTuple_SetItem(obj,i,swig::from(*it)); + } + return obj; + } else { + PyErr_SetString(PyExc_OverflowError,"sequence size not valid in python"); + return NULL; + } + } + }; +} + + + namespace swig { + template + struct traits_asptr > { + static int asptr(PyObject *obj, std::vector **vec) { + return traits_asptr_stdseq >::asptr(obj, vec); + } + }; + + template + struct traits_from > { + static PyObject *from(const std::vector& vec) { + return traits_from_stdseq >::from(vec); + } + }; + } + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "float" "," "std::allocator< float >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_float_Sg__iterator(std::vector< float > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_float_Sg____nonzero__(std::vector< float > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_float_Sg____bool__(std::vector< float > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< float >::size_type std_vector_Sl_float_Sg____len__(std::vector< float > const *self){ + return self->size(); + } + +SWIGINTERNINLINE PyObject* +SWIG_From_unsigned_SS_long (unsigned long value) +{ + return (value > LONG_MAX) ? + PyLong_FromUnsignedLong(value) : PyLong_FromLong(static_cast< long >(value)); +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_size_t (size_t value) +{ + return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value)); +} + +SWIGINTERN std::vector< float >::value_type std_vector_Sl_float_Sg__pop(std::vector< float > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< float,std::allocator< float > > *std_vector_Sl_float_Sg____getslice__(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_float_Sg____setslice____SWIG_0(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j,std::vector< float,std::allocator< float > > const &v=std::vector< float,std::allocator< float > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_float_Sg____delslice__(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_float_Sg____delitem____SWIG_0(std::vector< float > *self,std::vector< float >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< float,std::allocator< float > > *std_vector_Sl_float_Sg____getitem____SWIG_0(std::vector< float > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_0(std::vector< float > *self,PySliceObject *slice,std::vector< float,std::allocator< float > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_1(std::vector< float > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_float_Sg____delitem____SWIG_1(std::vector< float > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< float >::value_type const &std_vector_Sl_float_Sg____getitem____SWIG_1(std::vector< float > const *self,std::vector< float >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_2(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_float_Sg__append(std::vector< float > *self,std::vector< float >::value_type const &x){ + self->push_back(x); + } + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 + if (PyUnicode_Check(obj)) +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + PyBytes_AsStringAndSize(obj, &cstr, &len); + if(alloc) *alloc = SWIG_NEWOBJ; +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1))); + *alloc = SWIG_NEWOBJ; + } + else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { + #if PY_VERSION_HEX>=0x03000000 + assert(0); /* Should never reach here in Python 3 */ + #endif + *cptr = SWIG_Python_str_AsChar(obj); + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsPtr_std_string (PyObject * obj, std::string **val) +{ + char* buf = 0 ; size_t size = 0; int alloc = SWIG_OLDOBJ; + if (SWIG_IsOK((SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)))) { + if (buf) { + if (val) *val = new std::string(buf, size - 1); + if (alloc == SWIG_NEWOBJ) delete[] buf; + return SWIG_NEWOBJ; + } else { + if (val) *val = 0; + return SWIG_OLDOBJ; + } + } else { + static int init = 0; + static swig_type_info* descriptor = 0; + if (!init) { + descriptor = SWIG_TypeQuery("std::string" " *"); + init = 1; + } + if (descriptor) { + std::string *vptr; + int res = SWIG_ConvertPtr(obj, (void**)&vptr, descriptor, 0); + if (SWIG_IsOK(res) && val) *val = vptr; + return res; + } + } + return SWIG_ERROR; +} + + +SWIGINTERN int +SWIG_AsVal_std_string (PyObject * obj, std::string *val) +{ + std::string* v = (std::string *) 0; + int res = SWIG_AsPtr_std_string (obj, &v); + if (!SWIG_IsOK(res)) return res; + if (v) { + if (val) *val = *v; + if (SWIG_IsNewObj(res)) { + delete v; + res = SWIG_DelNewMask(res); + } + return res; + } + return SWIG_ERROR; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromStringAndSize(carray, static_cast< int >(size)); +#else + return PyString_FromStringAndSize(carray, static_cast< int >(size)); +#endif + } + } else { + return SWIG_Py_Void(); + } +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_std_string (const std::string& s) +{ + return SWIG_FromCharPtrAndSize(s.data(), s.size()); +} + + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"std::string"; } + }; + template <> struct traits_asval { + typedef std::string value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_std_string (obj, val); + } + }; + template <> struct traits_from { + typedef std::string value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_std_string (val); + } + }; +} + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "std::string" "," "std::allocator< std::string >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_std_string_Sg__iterator(std::vector< std::string > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_std_string_Sg____nonzero__(std::vector< std::string > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_std_string_Sg____bool__(std::vector< std::string > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< std::string >::size_type std_vector_Sl_std_string_Sg____len__(std::vector< std::string > const *self){ + return self->size(); + } +SWIGINTERN std::vector< std::string >::value_type std_vector_Sl_std_string_Sg__pop(std::vector< std::string > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< std::string,std::allocator< std::string > > *std_vector_Sl_std_string_Sg____getslice__(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setslice____SWIG_0(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j,std::vector< std::string,std::allocator< std::string > > const &v=std::vector< std::string,std::allocator< std::string > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____delslice__(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____delitem____SWIG_0(std::vector< std::string > *self,std::vector< std::string >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< std::string,std::allocator< std::string > > *std_vector_Sl_std_string_Sg____getitem____SWIG_0(std::vector< std::string > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_0(std::vector< std::string > *self,PySliceObject *slice,std::vector< std::string,std::allocator< std::string > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_1(std::vector< std::string > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____delitem____SWIG_1(std::vector< std::string > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< std::string >::value_type const &std_vector_Sl_std_string_Sg____getitem____SWIG_1(std::vector< std::string > const *self,std::vector< std::string >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_2(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_std_string_Sg__append(std::vector< std::string > *self,std::vector< std::string >::value_type const &x){ + self->push_back(x); + } + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"double"; } + }; + template <> struct traits_asval { + typedef double value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_double (obj, val); + } + }; + template <> struct traits_from { + typedef double value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_double (val); + } + }; +} + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "double" "," "std::allocator< double >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_double_Sg__iterator(std::vector< double > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_double_Sg____nonzero__(std::vector< double > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_double_Sg____bool__(std::vector< double > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< double >::size_type std_vector_Sl_double_Sg____len__(std::vector< double > const *self){ + return self->size(); + } +SWIGINTERN std::vector< double >::value_type std_vector_Sl_double_Sg__pop(std::vector< double > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< double,std::allocator< double > > *std_vector_Sl_double_Sg____getslice__(std::vector< double > *self,std::vector< double >::difference_type i,std::vector< double >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_double_Sg____setslice____SWIG_0(std::vector< double > *self,std::vector< double >::difference_type i,std::vector< double >::difference_type j,std::vector< double,std::allocator< double > > const &v=std::vector< double,std::allocator< double > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_double_Sg____delslice__(std::vector< double > *self,std::vector< double >::difference_type i,std::vector< double >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_double_Sg____delitem____SWIG_0(std::vector< double > *self,std::vector< double >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< double,std::allocator< double > > *std_vector_Sl_double_Sg____getitem____SWIG_0(std::vector< double > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_double_Sg____setitem____SWIG_0(std::vector< double > *self,PySliceObject *slice,std::vector< double,std::allocator< double > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_double_Sg____setitem____SWIG_1(std::vector< double > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_double_Sg____delitem____SWIG_1(std::vector< double > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< double >::value_type const &std_vector_Sl_double_Sg____getitem____SWIG_1(std::vector< double > const *self,std::vector< double >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_double_Sg____setitem____SWIG_2(std::vector< double > *self,std::vector< double >::difference_type i,std::vector< double >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_double_Sg__append(std::vector< double > *self,std::vector< double >::value_type const &x){ + self->push_back(x); + } + + namespace swig { + template <> struct traits >, std::allocator< std::vector< double,std::allocator< double > > > > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "std::vector< double,std::allocator< double > >" "," "std::allocator< std::vector< double,std::allocator< double > > >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_std_vector_Sl_double_Sg__Sg__iterator(std::vector< std::vector< double > > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_std_vector_Sl_double_Sg__Sg____nonzero__(std::vector< std::vector< double > > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_std_vector_Sl_double_Sg__Sg____bool__(std::vector< std::vector< double > > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< std::vector< double > >::size_type std_vector_Sl_std_vector_Sl_double_Sg__Sg____len__(std::vector< std::vector< double > > const *self){ + return self->size(); + } +SWIGINTERN std::vector< std::vector< double > >::value_type std_vector_Sl_std_vector_Sl_double_Sg__Sg__pop(std::vector< std::vector< double > > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *std_vector_Sl_std_vector_Sl_double_Sg__Sg____getslice__(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::difference_type i,std::vector< std::vector< double > >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____setslice____SWIG_0(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::difference_type i,std::vector< std::vector< double > >::difference_type j,std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &v=std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____delslice__(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::difference_type i,std::vector< std::vector< double > >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____delitem____SWIG_0(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *std_vector_Sl_std_vector_Sl_double_Sg__Sg____getitem____SWIG_0(std::vector< std::vector< double > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____setitem____SWIG_0(std::vector< std::vector< double > > *self,PySliceObject *slice,std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____setitem____SWIG_1(std::vector< std::vector< double > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____delitem____SWIG_1(std::vector< std::vector< double > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< std::vector< double > >::value_type const &std_vector_Sl_std_vector_Sl_double_Sg__Sg____getitem____SWIG_1(std::vector< std::vector< double > > const *self,std::vector< std::vector< double > >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg____setitem____SWIG_2(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::difference_type i,std::vector< std::vector< double > >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg__append(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::value_type const &x){ + self->push_back(x); + } + +#include +#if !defined(SWIG_NO_LLONG_MAX) +# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) +# define LLONG_MAX __LONG_LONG_MAX__ +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +# endif +#endif + + +SWIGINTERN int +SWIG_AsVal_int (PyObject * obj, int *val) +{ + long v; + int res = SWIG_AsVal_long (obj, &v); + if (SWIG_IsOK(res)) { + if ((v < INT_MIN || v > INT_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = static_cast< int >(v); + } + } + return res; +} + + +SWIGINTERNINLINE PyObject* + SWIG_From_int (int value) +{ + return PyInt_FromLong((long) value); +} + + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"int"; } + }; + template <> struct traits_asval { + typedef int value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_int (obj, val); + } + }; + template <> struct traits_from { + typedef int value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_int (val); + } + }; +} + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "int" "," "std::allocator< int >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_int_Sg__iterator(std::vector< int > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_int_Sg____nonzero__(std::vector< int > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_int_Sg____bool__(std::vector< int > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< int >::size_type std_vector_Sl_int_Sg____len__(std::vector< int > const *self){ + return self->size(); + } +SWIGINTERN std::vector< int >::value_type std_vector_Sl_int_Sg__pop(std::vector< int > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< int,std::allocator< int > > *std_vector_Sl_int_Sg____getslice__(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_int_Sg____setslice____SWIG_0(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j,std::vector< int,std::allocator< int > > const &v=std::vector< int,std::allocator< int > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_int_Sg____delslice__(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_int_Sg____delitem____SWIG_0(std::vector< int > *self,std::vector< int >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< int,std::allocator< int > > *std_vector_Sl_int_Sg____getitem____SWIG_0(std::vector< int > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_0(std::vector< int > *self,PySliceObject *slice,std::vector< int,std::allocator< int > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_1(std::vector< int > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_int_Sg____delitem____SWIG_1(std::vector< int > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< int >::value_type const &std_vector_Sl_int_Sg____getitem____SWIG_1(std::vector< int > const *self,std::vector< int >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_2(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_int_Sg__append(std::vector< int > *self,std::vector< int >::value_type const &x){ + self->push_back(x); + } + + namespace swig { + template <> struct traits >, std::allocator< std::vector< int,std::allocator< int > > > > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "std::vector< int,std::allocator< int > >" "," "std::allocator< std::vector< int,std::allocator< int > > >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_std_vector_Sl_int_Sg__Sg__iterator(std::vector< std::vector< int > > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_std_vector_Sl_int_Sg__Sg____nonzero__(std::vector< std::vector< int > > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_std_vector_Sl_int_Sg__Sg____bool__(std::vector< std::vector< int > > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< std::vector< int > >::size_type std_vector_Sl_std_vector_Sl_int_Sg__Sg____len__(std::vector< std::vector< int > > const *self){ + return self->size(); + } +SWIGINTERN std::vector< std::vector< int > >::value_type std_vector_Sl_std_vector_Sl_int_Sg__Sg__pop(std::vector< std::vector< int > > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *std_vector_Sl_std_vector_Sl_int_Sg__Sg____getslice__(std::vector< std::vector< int > > *self,std::vector< std::vector< int > >::difference_type i,std::vector< std::vector< int > >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____setslice____SWIG_0(std::vector< std::vector< int > > *self,std::vector< std::vector< int > >::difference_type i,std::vector< std::vector< int > >::difference_type j,std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &v=std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____delslice__(std::vector< std::vector< int > > *self,std::vector< std::vector< int > >::difference_type i,std::vector< std::vector< int > >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____delitem____SWIG_0(std::vector< std::vector< int > > *self,std::vector< std::vector< int > >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *std_vector_Sl_std_vector_Sl_int_Sg__Sg____getitem____SWIG_0(std::vector< std::vector< int > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____setitem____SWIG_0(std::vector< std::vector< int > > *self,PySliceObject *slice,std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____setitem____SWIG_1(std::vector< std::vector< int > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____delitem____SWIG_1(std::vector< std::vector< int > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< std::vector< int > >::value_type const &std_vector_Sl_std_vector_Sl_int_Sg__Sg____getitem____SWIG_1(std::vector< std::vector< int > > const *self,std::vector< std::vector< int > >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg____setitem____SWIG_2(std::vector< std::vector< int > > *self,std::vector< std::vector< int > >::difference_type i,std::vector< std::vector< int > >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_int_Sg__Sg__append(std::vector< std::vector< int > > *self,std::vector< std::vector< int > >::value_type const &x){ + self->push_back(x); + } + +SWIGINTERN int +SWIG_AsVal_unsigned_SS_char (PyObject * obj, unsigned char *val) +{ + unsigned long v; + int res = SWIG_AsVal_unsigned_SS_long (obj, &v); + if (SWIG_IsOK(res)) { + if ((v > UCHAR_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = static_cast< unsigned char >(v); + } + } + return res; +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_unsigned_SS_char (unsigned char value) +{ + return SWIG_From_unsigned_SS_long (value); +} + + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"unsigned char"; } + }; + template <> struct traits_asval { + typedef unsigned char value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_unsigned_SS_char (obj, val); + } + }; + template <> struct traits_from { + typedef unsigned char value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_unsigned_SS_char (val); + } + }; +} + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "unsigned char" "," "std::allocator< unsigned char >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_unsigned_SS_char_Sg__iterator(std::vector< unsigned char > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_unsigned_SS_char_Sg____nonzero__(std::vector< unsigned char > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_unsigned_SS_char_Sg____bool__(std::vector< unsigned char > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< unsigned char >::size_type std_vector_Sl_unsigned_SS_char_Sg____len__(std::vector< unsigned char > const *self){ + return self->size(); + } +SWIGINTERN std::vector< unsigned char >::value_type std_vector_Sl_unsigned_SS_char_Sg__pop(std::vector< unsigned char > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< unsigned char,std::allocator< unsigned char > > *std_vector_Sl_unsigned_SS_char_Sg____getslice__(std::vector< unsigned char > *self,std::vector< unsigned char >::difference_type i,std::vector< unsigned char >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____setslice____SWIG_0(std::vector< unsigned char > *self,std::vector< unsigned char >::difference_type i,std::vector< unsigned char >::difference_type j,std::vector< unsigned char,std::allocator< unsigned char > > const &v=std::vector< unsigned char,std::allocator< unsigned char > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____delslice__(std::vector< unsigned char > *self,std::vector< unsigned char >::difference_type i,std::vector< unsigned char >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____delitem____SWIG_0(std::vector< unsigned char > *self,std::vector< unsigned char >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< unsigned char,std::allocator< unsigned char > > *std_vector_Sl_unsigned_SS_char_Sg____getitem____SWIG_0(std::vector< unsigned char > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____setitem____SWIG_0(std::vector< unsigned char > *self,PySliceObject *slice,std::vector< unsigned char,std::allocator< unsigned char > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____setitem____SWIG_1(std::vector< unsigned char > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____delitem____SWIG_1(std::vector< unsigned char > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< unsigned char >::value_type const &std_vector_Sl_unsigned_SS_char_Sg____getitem____SWIG_1(std::vector< unsigned char > const *self,std::vector< unsigned char >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg____setitem____SWIG_2(std::vector< unsigned char > *self,std::vector< unsigned char >::difference_type i,std::vector< unsigned char >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_unsigned_SS_char_Sg__append(std::vector< unsigned char > *self,std::vector< unsigned char >::value_type const &x){ + self->push_back(x); + } + + namespace swig { + template <> struct traits >, std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "std::vector< unsigned char,std::allocator< unsigned char > >" "," "std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg__iterator(std::vector< std::vector< unsigned char > > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____nonzero__(std::vector< std::vector< unsigned char > > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____bool__(std::vector< std::vector< unsigned char > > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< std::vector< unsigned char > >::size_type std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____len__(std::vector< std::vector< unsigned char > > const *self){ + return self->size(); + } +SWIGINTERN std::vector< std::vector< unsigned char > >::value_type std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg__pop(std::vector< std::vector< unsigned char > > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____getslice__(std::vector< std::vector< unsigned char > > *self,std::vector< std::vector< unsigned char > >::difference_type i,std::vector< std::vector< unsigned char > >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setslice____SWIG_0(std::vector< std::vector< unsigned char > > *self,std::vector< std::vector< unsigned char > >::difference_type i,std::vector< std::vector< unsigned char > >::difference_type j,std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &v=std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____delslice__(std::vector< std::vector< unsigned char > > *self,std::vector< std::vector< unsigned char > >::difference_type i,std::vector< std::vector< unsigned char > >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____delitem____SWIG_0(std::vector< std::vector< unsigned char > > *self,std::vector< std::vector< unsigned char > >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____getitem____SWIG_0(std::vector< std::vector< unsigned char > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setitem____SWIG_0(std::vector< std::vector< unsigned char > > *self,PySliceObject *slice,std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setitem____SWIG_1(std::vector< std::vector< unsigned char > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____delitem____SWIG_1(std::vector< std::vector< unsigned char > > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type id = i; + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< std::vector< unsigned char > >::value_type const &std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____getitem____SWIG_1(std::vector< std::vector< unsigned char > > const *self,std::vector< std::vector< unsigned char > >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setitem____SWIG_2(std::vector< std::vector< unsigned char > > *self,std::vector< std::vector< unsigned char > >::difference_type i,std::vector< std::vector< unsigned char > >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg__append(std::vector< std::vector< unsigned char > > *self,std::vector< std::vector< unsigned char > >::value_type const &x){ + self->push_back(x); + } + +#include "proxy.h" +#include +#ifndef WX_PRECOMP + #include +#endif + + +SWIGINTERN int +SWIG_AsVal_bool (PyObject *obj, bool *val) +{ + int r = PyObject_IsTrue(obj); + if (r == -1) + return SWIG_ERROR; + if (val) *val = r ? true : false; + return SWIG_OK; +} + +#ifdef __cplusplus +extern "C" { +#endif +SWIGINTERN PyObject *_wrap_delete_SwigPyIterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_SwigPyIterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SwigPyIterator" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_value" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (PyObject *)((swig::SwigPyIterator const *)arg1)->value(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_incr",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_incr" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)(arg1)->incr(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_incr",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)(arg1)->incr(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 1) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_SwigPyIterator_incr__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_SwigPyIterator_incr__SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_incr'.\n" + " Possible C/C++ prototypes are:\n" + " swig::SwigPyIterator::incr(size_t)\n" + " swig::SwigPyIterator::incr()\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_decr",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_decr" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)(arg1)->decr(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_decr",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)(arg1)->decr(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 1) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_SwigPyIterator_decr__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_SwigPyIterator_decr__SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_decr'.\n" + " Possible C/C++ prototypes are:\n" + " swig::SwigPyIterator::decr(size_t)\n" + " swig::SwigPyIterator::decr()\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + ptrdiff_t result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_distance",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_distance" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((swig::SwigPyIterator const *)arg1)->distance((swig::SwigPyIterator const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::invalid_argument &_e) { + SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; + } + + resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_equal",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_equal" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((swig::SwigPyIterator const *)arg1)->equal((swig::SwigPyIterator const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::invalid_argument &_e) { + SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; + } + + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_copy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_copy",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_copy" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->copy(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_next",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_next" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (PyObject *)(arg1)->next(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___next__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator___next__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___next__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (PyObject *)(arg1)->__next__(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_previous(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_previous",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_previous" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (PyObject *)(arg1)->previous(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_advance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_advance",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_advance" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_advance" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)(arg1)->advance(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___eq__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___eq__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((swig::SwigPyIterator const *)arg1)->operator ==((swig::SwigPyIterator const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___ne__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___ne__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((swig::SwigPyIterator const *)arg1)->operator !=((swig::SwigPyIterator const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___iadd__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___iadd__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___iadd__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *) &(arg1)->operator +=(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___isub__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___isub__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___isub__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *) &(arg1)->operator -=(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___add__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___add__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___add__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator +(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator -(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + ptrdiff_t result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((swig::SwigPyIterator const *)arg1)->operator -((swig::SwigPyIterator const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_SwigPyIterator___sub____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_SwigPyIterator___sub____SWIG_0(self, args); + } + } + } + +fail: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; +} + + +SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecFloat_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_iterator" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_float_Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___nonzero__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_float_Sg____nonzero__((std::vector< float > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___bool__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_float_Sg____bool__((std::vector< float > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___len__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_float_Sg____len__((std::vector< float > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_pop" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float >::value_type)std_vector_Sl_float_Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< float,std::allocator< float > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___getslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___getslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat___getslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float,std::allocator< float > > *)std_vector_Sl_float_Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + std::vector< float,std::allocator< float > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecFloat___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___setslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___setslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat___setslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecFloat___setslice__" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecFloat___setslice__" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< float,std::allocator< float > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___setslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___setslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat___setslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecFloat___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__setslice__(std::vector< float >::difference_type,std::vector< float >::difference_type,std::vector< float,std::allocator< float > > const &)\n" + " std::vector< float >::__setslice__(std::vector< float >::difference_type,std::vector< float >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___delslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___delslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat___delslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___delitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___delitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float,std::allocator< float > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___getitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float,std::allocator< float > > *)std_vector_Sl_float_Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< float,std::allocator< float > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecFloat___setitem__" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecFloat___setitem__" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< float,std::allocator< float > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___delitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecFloat___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__delitem__(std::vector< float >::difference_type)\n" + " std::vector< float >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___getitem__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___getitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float >::value_type *) &std_vector_Sl_float_Sg____getitem____SWIG_1((std::vector< float > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_float(static_cast< float >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecFloat___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__getitem__(PySliceObject *)\n" + " std::vector< float >::__getitem__(std::vector< float >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat___setitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat___setitem__" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg____setitem____SWIG_2(arg1,arg2,(float const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecFloat___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecFloat___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__setitem__(PySliceObject *,std::vector< float,std::allocator< float > > const &)\n" + " std::vector< float >::__setitem__(PySliceObject *)\n" + " std::vector< float >::__setitem__(std::vector< float >::difference_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< float >::value_type temp2 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_append" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat_append" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); + } + temp2 = static_cast< std::vector< float >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_float_Sg__append(arg1,(float const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecFloat__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecFloat")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float > *)new std::vector< float >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecFloat__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecFloat",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecFloat" "', argument " "1"" of type '" "std::vector< float > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecFloat" "', argument " "1"" of type '" "std::vector< float > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float > *)new std::vector< float >((std::vector< float > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_empty" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< float > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_size" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< float > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_clear" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_swap" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecFloat_swap" "', argument " "2"" of type '" "std::vector< float > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecFloat_swap" "', argument " "2"" of type '" "std::vector< float > &""'"); + } + arg2 = reinterpret_cast< std::vector< float > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< float > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_get_allocator" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< float > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< float >::allocator_type(static_cast< const std::vector< float >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_float_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_begin" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_end" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_rbegin" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_rend" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecFloat__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecFloat",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecFloat" "', argument " "1"" of type '" "std::vector< float >::size_type""'"); + } + arg1 = static_cast< std::vector< float >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float > *)new std::vector< float >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_pop_back" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_resize" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat_resize" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_erase" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + std::vector< float >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_erase" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_erase" "', argument " "3"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_erase" "', argument " "3"" of type '" "std::vector< float >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecFloat_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecFloat_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::erase(std::vector< float >::iterator)\n" + " std::vector< float >::erase(std::vector< float >::iterator,std::vector< float >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecFloat__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float >::size_type arg1 ; + std::vector< float >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + std::vector< float >::value_type temp2 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecFloat",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecFloat" "', argument " "1"" of type '" "std::vector< float >::size_type""'"); + } + arg1 = static_cast< std::vector< float >::size_type >(val1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_VecFloat" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); + } + temp2 = static_cast< std::vector< float >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float > *)new std::vector< float >(arg1,(std::vector< float >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecFloat(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecFloat__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecFloat__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecFloat__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecFloat__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecFloat'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::vector()\n" + " std::vector< float >::vector(std::vector< float > const &)\n" + " std::vector< float >::vector(std::vector< float >::size_type)\n" + " std::vector< float >::vector(std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< float >::value_type temp2 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_push_back" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat_push_back" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); + } + temp2 = static_cast< std::vector< float >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< float >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_front" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float >::value_type *) &((std::vector< float > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_float(static_cast< float >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_back" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< float >::value_type *) &((std::vector< float > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_float(static_cast< float >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_assign" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat_assign" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat_assign" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< float >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_resize" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat_resize" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat_resize" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< float >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::resize(std::vector< float >::size_type)\n" + " std::vector< float >::resize(std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecFloat_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_insert" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat_insert" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< float >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + std::vector< float >::size_type arg3 ; + std::vector< float >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + std::vector< float >::value_type temp4 ; + float val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecFloat_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_insert" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecFloat_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecFloat_insert" "', argument " "3"" of type '" "std::vector< float >::size_type""'"); + } + arg3 = static_cast< std::vector< float >::size_type >(val3); + ecode4 = SWIG_AsVal_float(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "VecFloat_insert" "', argument " "4"" of type '" "std::vector< float >::value_type""'"); + } + temp4 = static_cast< std::vector< float >::value_type >(val4); + arg4 = &temp4; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< float >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_float(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecFloat_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecFloat_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::insert(std::vector< float >::iterator,std::vector< float >::value_type const &)\n" + " std::vector< float >::insert(std::vector< float >::iterator,std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecFloat_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_reserve" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecFloat_reserve" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecFloat_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecFloat_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecFloat_capacity" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< float > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecFloat(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecFloat",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecFloat" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecFloat_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecString_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecString_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_iterator" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_std_string_Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___nonzero__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_string_Sg____nonzero__((std::vector< std::string > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___bool__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_string_Sg____bool__((std::vector< std::string > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___len__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_string_Sg____len__((std::vector< std::string > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_pop" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_string_Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_std_string(static_cast< std::string >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::string,std::allocator< std::string > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___getslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___getslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecString___getslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string,std::allocator< std::string > > *)std_vector_Sl_std_string_Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + std::vector< std::string,std::allocator< std::string > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecString___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___setslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___setslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecString___setslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecString___setslice__" "', argument " "4"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString___setslice__" "', argument " "4"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< std::string,std::allocator< std::string > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___setslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___setslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecString___setslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecString___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecString___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__setslice__(std::vector< std::string >::difference_type,std::vector< std::string >::difference_type,std::vector< std::string,std::allocator< std::string > > const &)\n" + " std::vector< std::string >::__setslice__(std::vector< std::string >::difference_type,std::vector< std::string >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___delslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___delslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecString___delslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___delitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___delitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string,std::allocator< std::string > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___getitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string,std::allocator< std::string > > *)std_vector_Sl_std_string_Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< std::string,std::allocator< std::string > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecString___setitem__" "', argument " "3"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString___setitem__" "', argument " "3"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< std::string,std::allocator< std::string > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___delitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecString___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecString___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__delitem__(std::vector< std::string >::difference_type)\n" + " std::vector< std::string >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___getitem__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___getitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string >::value_type *) &std_vector_Sl_std_string_Sg____getitem____SWIG_1((std::vector< std::string > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecString___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecString___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__getitem__(PySliceObject *)\n" + " std::vector< std::string >::__getitem__(std::vector< std::string >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString___setitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecString___setitem__" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString___setitem__" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg____setitem____SWIG_2(arg1,arg2,(std::string const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecString___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecString___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecString___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__setitem__(PySliceObject *,std::vector< std::string,std::allocator< std::string > > const &)\n" + " std::vector< std::string >::__setitem__(PySliceObject *)\n" + " std::vector< std::string >::__setitem__(std::vector< std::string >::difference_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_append" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecString_append" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_append" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_string_Sg__append(arg1,(std::string const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecString")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string > *)new std::vector< std::string >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecString",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecString" "', argument " "1"" of type '" "std::vector< std::string > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecString" "', argument " "1"" of type '" "std::vector< std::string > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string > *)new std::vector< std::string >((std::vector< std::string > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_empty" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< std::string > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_size" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::string > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_clear" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_swap" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecString_swap" "', argument " "2"" of type '" "std::vector< std::string > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_swap" "', argument " "2"" of type '" "std::vector< std::string > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::string > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< std::string > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_get_allocator" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::string > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< std::string >::allocator_type(static_cast< const std::vector< std::string >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_std__string_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_begin" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_end" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_rbegin" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_rend" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecString__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecString",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecString" "', argument " "1"" of type '" "std::vector< std::string >::size_type""'"); + } + arg1 = static_cast< std::vector< std::string >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string > *)new std::vector< std::string >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_pop_back" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_resize" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString_resize" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_erase" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + std::vector< std::string >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_erase" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_erase" "', argument " "3"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_erase" "', argument " "3"" of type '" "std::vector< std::string >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecString_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecString_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::erase(std::vector< std::string >::iterator)\n" + " std::vector< std::string >::erase(std::vector< std::string >::iterator,std::vector< std::string >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecString__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string >::size_type arg1 ; + std::vector< std::string >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecString",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecString" "', argument " "1"" of type '" "std::vector< std::string >::size_type""'"); + } + arg1 = static_cast< std::vector< std::string >::size_type >(val1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_VecString" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecString" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string > *)new std::vector< std::string >(arg1,(std::vector< std::string >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecString(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecString__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecString__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecString__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecString__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecString'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::vector()\n" + " std::vector< std::string >::vector(std::vector< std::string > const &)\n" + " std::vector< std::string >::vector(std::vector< std::string >::size_type)\n" + " std::vector< std::string >::vector(std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_push_back" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecString_push_back" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_push_back" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< std::string >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_front" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string >::value_type *) &((std::vector< std::string > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_back" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::string >::value_type *) &((std::vector< std::string > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_assign" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString_assign" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecString_assign" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_assign" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< std::string >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_resize" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString_resize" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecString_resize" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_resize" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< std::string >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecString_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecString_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::resize(std::vector< std::string >::size_type)\n" + " std::vector< std::string >::resize(std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecString_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_insert" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecString_insert" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_insert" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< std::string >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + std::vector< std::string >::size_type arg3 ; + std::vector< std::string >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecString_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_insert" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecString_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecString_insert" "', argument " "3"" of type '" "std::vector< std::string >::size_type""'"); + } + arg3 = static_cast< std::vector< std::string >::size_type >(val3); + { + std::string *ptr = (std::string *)0; + res4 = SWIG_AsPtr_std_string(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecString_insert" "', argument " "4"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecString_insert" "', argument " "4"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg4 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< std::string >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecString_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[3], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecString_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecString_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::insert(std::vector< std::string >::iterator,std::vector< std::string >::value_type const &)\n" + " std::vector< std::string >::insert(std::vector< std::string >::iterator,std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecString_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecString_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_reserve" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecString_reserve" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecString_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecString_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecString_capacity" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::string > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecString",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecString" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecString_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecDouble_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_iterator" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_double_Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___nonzero__" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_double_Sg____nonzero__((std::vector< double > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___bool__" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_double_Sg____bool__((std::vector< double > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___len__" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_double_Sg____len__((std::vector< double > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_pop" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double >::value_type)std_vector_Sl_double_Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_double(static_cast< double >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + std::vector< double >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< double,std::allocator< double > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___getslice__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___getslice__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble___getslice__" "', argument " "3"" of type '" "std::vector< double >::difference_type""'"); + } + arg3 = static_cast< std::vector< double >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double,std::allocator< double > > *)std_vector_Sl_double_Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + std::vector< double >::difference_type arg3 ; + std::vector< double,std::allocator< double > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecDouble___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___setslice__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___setslice__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble___setslice__" "', argument " "3"" of type '" "std::vector< double >::difference_type""'"); + } + arg3 = static_cast< std::vector< double >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecDouble___setslice__" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecDouble___setslice__" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< double,std::allocator< double > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + std::vector< double >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___setslice__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___setslice__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble___setslice__" "', argument " "3"" of type '" "std::vector< double >::difference_type""'"); + } + arg3 = static_cast< std::vector< double >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecDouble___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::__setslice__(std::vector< double >::difference_type,std::vector< double >::difference_type,std::vector< double,std::allocator< double > > const &)\n" + " std::vector< double >::__setslice__(std::vector< double >::difference_type,std::vector< double >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + std::vector< double >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___delslice__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___delslice__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble___delslice__" "', argument " "3"" of type '" "std::vector< double >::difference_type""'"); + } + arg3 = static_cast< std::vector< double >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___delitem__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___delitem__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< double,std::allocator< double > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___getitem__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double,std::allocator< double > > *)std_vector_Sl_double_Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< double,std::allocator< double > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___setitem__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecDouble___setitem__" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecDouble___setitem__" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< double,std::allocator< double > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___setitem__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___delitem__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecDouble___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::__delitem__(std::vector< double >::difference_type)\n" + " std::vector< double >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< double >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___getitem__" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___getitem__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double >::value_type *) &std_vector_Sl_double_Sg____getitem____SWIG_1((std::vector< double > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_double(static_cast< double >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecDouble___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::__getitem__(PySliceObject *)\n" + " std::vector< double >::__getitem__(std::vector< double >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::difference_type arg2 ; + std::vector< double >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + std::vector< double >::value_type temp3 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble___setitem__" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble___setitem__" "', argument " "2"" of type '" "std::vector< double >::difference_type""'"); + } + arg2 = static_cast< std::vector< double >::difference_type >(val2); + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble___setitem__" "', argument " "3"" of type '" "std::vector< double >::value_type""'"); + } + temp3 = static_cast< std::vector< double >::value_type >(val3); + arg3 = &temp3; + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg____setitem____SWIG_2(arg1,arg2,(double const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecDouble___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecDouble___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_double(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::__setitem__(PySliceObject *,std::vector< double,std::allocator< double > > const &)\n" + " std::vector< double >::__setitem__(PySliceObject *)\n" + " std::vector< double >::__setitem__(std::vector< double >::difference_type,std::vector< double >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< double >::value_type temp2 ; + double val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_append" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_double(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble_append" "', argument " "2"" of type '" "std::vector< double >::value_type""'"); + } + temp2 = static_cast< std::vector< double >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_double_Sg__append(arg1,(double const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecDouble")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double > *)new std::vector< double >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< double > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecDouble",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecDouble" "', argument " "1"" of type '" "std::vector< double > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecDouble" "', argument " "1"" of type '" "std::vector< double > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double > *)new std::vector< double >((std::vector< double > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_empty" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< double > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_size" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< double > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_clear" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_swap" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecDouble_swap" "', argument " "2"" of type '" "std::vector< double > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecDouble_swap" "', argument " "2"" of type '" "std::vector< double > &""'"); + } + arg2 = reinterpret_cast< std::vector< double > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< double > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_get_allocator" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< double > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< double >::allocator_type(static_cast< const std::vector< double >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_double_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_begin" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_end" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_rbegin" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_rend" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecDouble__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecDouble",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecDouble" "', argument " "1"" of type '" "std::vector< double >::size_type""'"); + } + arg1 = static_cast< std::vector< double >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double > *)new std::vector< double >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_pop_back" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_resize" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble_resize" "', argument " "2"" of type '" "std::vector< double >::size_type""'"); + } + arg2 = static_cast< std::vector< double >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< double >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_erase" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_erase" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_erase" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::iterator arg2 ; + std::vector< double >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< double >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_erase" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_erase" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_erase" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_erase" "', argument " "3"" of type '" "std::vector< double >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_erase" "', argument " "3"" of type '" "std::vector< double >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecDouble_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecDouble_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::erase(std::vector< double >::iterator)\n" + " std::vector< double >::erase(std::vector< double >::iterator,std::vector< double >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecDouble__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double >::size_type arg1 ; + std::vector< double >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + std::vector< double >::value_type temp2 ; + double val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< double > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecDouble",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecDouble" "', argument " "1"" of type '" "std::vector< double >::size_type""'"); + } + arg1 = static_cast< std::vector< double >::size_type >(val1); + ecode2 = SWIG_AsVal_double(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_VecDouble" "', argument " "2"" of type '" "std::vector< double >::value_type""'"); + } + temp2 = static_cast< std::vector< double >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double > *)new std::vector< double >(arg1,(std::vector< double >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecDouble(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecDouble__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecDouble__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecDouble__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_double(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecDouble__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecDouble'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::vector()\n" + " std::vector< double >::vector(std::vector< double > const &)\n" + " std::vector< double >::vector(std::vector< double >::size_type)\n" + " std::vector< double >::vector(std::vector< double >::size_type,std::vector< double >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< double >::value_type temp2 ; + double val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_push_back" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_double(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble_push_back" "', argument " "2"" of type '" "std::vector< double >::value_type""'"); + } + temp2 = static_cast< std::vector< double >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< double >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_front" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double >::value_type *) &((std::vector< double > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_double(static_cast< double >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_back" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< double >::value_type *) &((std::vector< double > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_double(static_cast< double >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::size_type arg2 ; + std::vector< double >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< double >::value_type temp3 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_assign" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble_assign" "', argument " "2"" of type '" "std::vector< double >::size_type""'"); + } + arg2 = static_cast< std::vector< double >::size_type >(val2); + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble_assign" "', argument " "3"" of type '" "std::vector< double >::value_type""'"); + } + temp3 = static_cast< std::vector< double >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< double >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::size_type arg2 ; + std::vector< double >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< double >::value_type temp3 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_resize" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble_resize" "', argument " "2"" of type '" "std::vector< double >::size_type""'"); + } + arg2 = static_cast< std::vector< double >::size_type >(val2); + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble_resize" "', argument " "3"" of type '" "std::vector< double >::value_type""'"); + } + temp3 = static_cast< std::vector< double >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< double >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_double(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::resize(std::vector< double >::size_type)\n" + " std::vector< double >::resize(std::vector< double >::size_type,std::vector< double >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::iterator arg2 ; + std::vector< double >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + std::vector< double >::value_type temp3 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< double >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecDouble_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_insert" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_insert" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_insert" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble_insert" "', argument " "3"" of type '" "std::vector< double >::value_type""'"); + } + temp3 = static_cast< std::vector< double >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< double >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< double >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::iterator arg2 ; + std::vector< double >::size_type arg3 ; + std::vector< double >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + std::vector< double >::value_type temp4 ; + double val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecDouble_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_insert" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_insert" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecDouble_insert" "', argument " "2"" of type '" "std::vector< double >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecDouble_insert" "', argument " "3"" of type '" "std::vector< double >::size_type""'"); + } + arg3 = static_cast< std::vector< double >::size_type >(val3); + ecode4 = SWIG_AsVal_double(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "VecDouble_insert" "', argument " "4"" of type '" "std::vector< double >::value_type""'"); + } + temp4 = static_cast< std::vector< double >::value_type >(val4); + arg4 = &temp4; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< double >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_double(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_double(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecDouble_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecDouble_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< double >::insert(std::vector< double >::iterator,std::vector< double >::value_type const &)\n" + " std::vector< double >::insert(std::vector< double >::iterator,std::vector< double >::size_type,std::vector< double >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + std::vector< double >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecDouble_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_reserve" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecDouble_reserve" "', argument " "2"" of type '" "std::vector< double >::size_type""'"); + } + arg2 = static_cast< std::vector< double >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecDouble_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< double >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecDouble_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecDouble_capacity" "', argument " "1"" of type '" "std::vector< double > const *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< double > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< double > *arg1 = (std::vector< double > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecDouble",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecDouble" "', argument " "1"" of type '" "std::vector< double > *""'"); + } + arg1 = reinterpret_cast< std::vector< double > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecDouble_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecVecDouble_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_iterator" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_std_vector_Sl_double_Sg__Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___nonzero__" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_vector_Sl_double_Sg__Sg____nonzero__((std::vector< std::vector< double > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___bool__" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_vector_Sl_double_Sg__Sg____bool__((std::vector< std::vector< double > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___len__" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_vector_Sl_double_Sg__Sg____len__((std::vector< std::vector< double > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_pop" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_vector_Sl_double_Sg__Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = swig::from(static_cast< std::vector > >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + std::vector< std::vector< double > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___getslice__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___getslice__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecDouble___getslice__" "', argument " "3"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< double > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *)std_vector_Sl_std_vector_Sl_double_Sg__Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + std::vector< std::vector< double > >::difference_type arg3 ; + std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecVecDouble___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___setslice__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___setslice__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecDouble___setslice__" "', argument " "3"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< double > >::difference_type >(val3); + { + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > > *ptr = (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecVecDouble___setslice__" "', argument " "4"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble___setslice__" "', argument " "4"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + std::vector< std::vector< double > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___setslice__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___setslice__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecDouble___setslice__" "', argument " "3"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< double > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecDouble___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecDouble___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::__setslice__(std::vector< std::vector< double > >::difference_type,std::vector< std::vector< double > >::difference_type,std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &)\n" + " std::vector< std::vector< double > >::__setslice__(std::vector< std::vector< double > >::difference_type,std::vector< std::vector< double > >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + std::vector< std::vector< double > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___delslice__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___delslice__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecDouble___delslice__" "', argument " "3"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< double > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___delitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___delitem__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___getitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *)std_vector_Sl_std_vector_Sl_double_Sg__Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > > *ptr = (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecDouble___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____setitem____SWIG_0(arg1,arg2,(std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___delitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecDouble___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecDouble___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::__delitem__(std::vector< std::vector< double > >::difference_type)\n" + " std::vector< std::vector< double > >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< double > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___getitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___getitem__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > >::value_type *) &std_vector_Sl_std_vector_Sl_double_Sg__Sg____getitem____SWIG_1((std::vector< std::vector< double > > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecDouble___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecDouble___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::__getitem__(PySliceObject *)\n" + " std::vector< std::vector< double > >::__getitem__(std::vector< std::vector< double > >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::difference_type arg2 ; + std::vector< std::vector< double > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble___setitem__" "', argument " "2"" of type '" "std::vector< std::vector< double > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::difference_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecDouble___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg____setitem____SWIG_2(arg1,arg2,(std::vector< double,std::allocator< double > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecDouble___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecDouble___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecDouble___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::__setitem__(PySliceObject *,std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > const &)\n" + " std::vector< std::vector< double > >::__setitem__(PySliceObject *)\n" + " std::vector< std::vector< double > >::__setitem__(std::vector< std::vector< double > >::difference_type,std::vector< std::vector< double > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_append" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecDouble_append" "', argument " "2"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_append" "', argument " "2"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_double_Sg__Sg__append(arg1,(std::vector< double,std::allocator< double > > const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecVecDouble")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > > *)new std::vector< std::vector< double > >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double,std::allocator< double > > > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecVecDouble",&obj0)) SWIG_fail; + { + std::vector >,std::allocator< std::vector< double,std::allocator< double > > > > *ptr = (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecVecDouble" "', argument " "1"" of type '" "std::vector< std::vector< double,std::allocator< double > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecVecDouble" "', argument " "1"" of type '" "std::vector< std::vector< double,std::allocator< double > > > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > > *)new std::vector< std::vector< double > >((std::vector< std::vector< double,std::allocator< double > > > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_empty" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< std::vector< double > > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_size" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< double > > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_clear" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double,std::allocator< double > > > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_swap" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecDouble_swap" "', argument " "2"" of type '" "std::vector< std::vector< double,std::allocator< double > > > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_swap" "', argument " "2"" of type '" "std::vector< std::vector< double,std::allocator< double > > > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::vector< double,std::allocator< double > > > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< std::vector< double,std::allocator< double > > > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_get_allocator" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< double > > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< std::vector< double > >::allocator_type(static_cast< const std::vector< std::vector< double > >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_begin" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_end" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_rbegin" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_rend" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecDouble__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecVecDouble",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecVecDouble" "', argument " "1"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg1 = static_cast< std::vector< std::vector< double > >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > > *)new std::vector< std::vector< double > >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_pop_back" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_resize" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble_resize" "', argument " "2"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< double > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_erase" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_erase" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_erase" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::iterator arg2 ; + std::vector< std::vector< double > >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< double > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_erase" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_erase" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_erase" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_erase" "', argument " "3"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_erase" "', argument " "3"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecVecDouble_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecVecDouble_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::erase(std::vector< std::vector< double > >::iterator)\n" + " std::vector< std::vector< double > >::erase(std::vector< std::vector< double > >::iterator,std::vector< std::vector< double > >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecDouble__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > >::size_type arg1 ; + std::vector< std::vector< double > >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< double > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecVecDouble",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecVecDouble" "', argument " "1"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg1 = static_cast< std::vector< std::vector< double > >::size_type >(val1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_VecVecDouble" "', argument " "2"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecVecDouble" "', argument " "2"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > > *)new std::vector< std::vector< double > >(arg1,(std::vector< std::vector< double > >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecDouble(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecVecDouble__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecVecDouble__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecVecDouble__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[1], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecVecDouble__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecVecDouble'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::vector()\n" + " std::vector< std::vector< double > >::vector(std::vector< std::vector< double,std::allocator< double > > > const &)\n" + " std::vector< std::vector< double > >::vector(std::vector< std::vector< double > >::size_type)\n" + " std::vector< std::vector< double > >::vector(std::vector< std::vector< double > >::size_type,std::vector< std::vector< double > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_push_back" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecDouble_push_back" "', argument " "2"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_push_back" "', argument " "2"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< std::vector< double > >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_front" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > >::value_type *) &((std::vector< std::vector< double > > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_back" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< double > >::value_type *) &((std::vector< std::vector< double > > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::size_type arg2 ; + std::vector< std::vector< double > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_assign" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble_assign" "', argument " "2"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::size_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecDouble_assign" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_assign" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< std::vector< double > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::size_type arg2 ; + std::vector< std::vector< double > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_resize" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble_resize" "', argument " "2"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::size_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecDouble_resize" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_resize" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< std::vector< double > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecDouble_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecDouble_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::resize(std::vector< std::vector< double > >::size_type)\n" + " std::vector< std::vector< double > >::resize(std::vector< std::vector< double > >::size_type,std::vector< std::vector< double > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::iterator arg2 ; + std::vector< std::vector< double > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< double > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecDouble_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_insert" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_insert" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_insert" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecDouble_insert" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_insert" "', argument " "3"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< std::vector< double > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< double > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::iterator arg2 ; + std::vector< std::vector< double > >::size_type arg3 ; + std::vector< std::vector< double > >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecVecDouble_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_insert" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_insert" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecDouble_insert" "', argument " "2"" of type '" "std::vector< std::vector< double > >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecDouble_insert" "', argument " "3"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg3 = static_cast< std::vector< std::vector< double > >::size_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecVecDouble_insert" "', argument " "4"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecDouble_insert" "', argument " "4"" of type '" "std::vector< std::vector< double > >::value_type const &""'"); + } + arg4 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< std::vector< double > >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecDouble_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< double,std::allocator< double > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecDouble_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecDouble_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< double > >::insert(std::vector< std::vector< double > >::iterator,std::vector< std::vector< double > >::value_type const &)\n" + " std::vector< std::vector< double > >::insert(std::vector< std::vector< double > >::iterator,std::vector< std::vector< double > >::size_type,std::vector< std::vector< double > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + std::vector< std::vector< double > >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecDouble_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_reserve" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecDouble_reserve" "', argument " "2"" of type '" "std::vector< std::vector< double > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< double > >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecDouble_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< double > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecDouble_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecDouble_capacity" "', argument " "1"" of type '" "std::vector< std::vector< double > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< double > > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecVecDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< double > > *arg1 = (std::vector< std::vector< double > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecVecDouble",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecVecDouble" "', argument " "1"" of type '" "std::vector< std::vector< double > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< double > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecVecDouble_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecInt_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_iterator" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_int_Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___nonzero__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_int_Sg____nonzero__((std::vector< int > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___bool__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_int_Sg____bool__((std::vector< int > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___len__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_int_Sg____len__((std::vector< int > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_pop" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int >::value_type)std_vector_Sl_int_Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< int,std::allocator< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___getslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___getslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt___getslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int,std::allocator< int > > *)std_vector_Sl_int_Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + std::vector< int,std::allocator< int > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecInt___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___setslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___setslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt___setslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecInt___setslice__" "', argument " "4"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecInt___setslice__" "', argument " "4"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< int,std::allocator< int > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___setslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___setslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt___setslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecInt___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__setslice__(std::vector< int >::difference_type,std::vector< int >::difference_type,std::vector< int,std::allocator< int > > const &)\n" + " std::vector< int >::__setslice__(std::vector< int >::difference_type,std::vector< int >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___delslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___delslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt___delslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___delitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___delitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int,std::allocator< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___getitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int,std::allocator< int > > *)std_vector_Sl_int_Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< int,std::allocator< int > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecInt___setitem__" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecInt___setitem__" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< int,std::allocator< int > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___delitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecInt___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__delitem__(std::vector< int >::difference_type)\n" + " std::vector< int >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___getitem__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___getitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int >::value_type *) &std_vector_Sl_int_Sg____getitem____SWIG_1((std::vector< int > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_int(static_cast< int >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecInt___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__getitem__(PySliceObject *)\n" + " std::vector< int >::__getitem__(std::vector< int >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt___setitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt___setitem__" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg____setitem____SWIG_2(arg1,arg2,(int const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecInt___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecInt___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__setitem__(PySliceObject *,std::vector< int,std::allocator< int > > const &)\n" + " std::vector< int >::__setitem__(PySliceObject *)\n" + " std::vector< int >::__setitem__(std::vector< int >::difference_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< int >::value_type temp2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_append" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt_append" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); + } + temp2 = static_cast< std::vector< int >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_int_Sg__append(arg1,(int const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecInt")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int > *)new std::vector< int >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecInt",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecInt" "', argument " "1"" of type '" "std::vector< int > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecInt" "', argument " "1"" of type '" "std::vector< int > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int > *)new std::vector< int >((std::vector< int > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_empty" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< int > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_size" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< int > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_clear" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_swap" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecInt_swap" "', argument " "2"" of type '" "std::vector< int > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecInt_swap" "', argument " "2"" of type '" "std::vector< int > &""'"); + } + arg2 = reinterpret_cast< std::vector< int > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< int > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_get_allocator" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< int > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< int >::allocator_type(static_cast< const std::vector< int >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_int_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_begin" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_end" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_rbegin" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_rend" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecInt__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecInt",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecInt" "', argument " "1"" of type '" "std::vector< int >::size_type""'"); + } + arg1 = static_cast< std::vector< int >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int > *)new std::vector< int >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_pop_back" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_resize" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt_resize" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_erase" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + std::vector< int >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_erase" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_erase" "', argument " "3"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_erase" "', argument " "3"" of type '" "std::vector< int >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecInt_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecInt_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::erase(std::vector< int >::iterator)\n" + " std::vector< int >::erase(std::vector< int >::iterator,std::vector< int >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecInt__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int >::size_type arg1 ; + std::vector< int >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + std::vector< int >::value_type temp2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecInt",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecInt" "', argument " "1"" of type '" "std::vector< int >::size_type""'"); + } + arg1 = static_cast< std::vector< int >::size_type >(val1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_VecInt" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); + } + temp2 = static_cast< std::vector< int >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int > *)new std::vector< int >(arg1,(std::vector< int >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecInt(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecInt__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecInt__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecInt__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecInt__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecInt'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::vector()\n" + " std::vector< int >::vector(std::vector< int > const &)\n" + " std::vector< int >::vector(std::vector< int >::size_type)\n" + " std::vector< int >::vector(std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< int >::value_type temp2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_push_back" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt_push_back" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); + } + temp2 = static_cast< std::vector< int >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< int >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_front" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int >::value_type *) &((std::vector< int > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_int(static_cast< int >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_back" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< int >::value_type *) &((std::vector< int > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_int(static_cast< int >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_assign" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt_assign" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt_assign" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< int >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_resize" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt_resize" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt_resize" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< int >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::resize(std::vector< int >::size_type)\n" + " std::vector< int >::resize(std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecInt_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_insert" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt_insert" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< int >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + std::vector< int >::size_type arg3 ; + std::vector< int >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + std::vector< int >::value_type temp4 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecInt_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_insert" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecInt_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecInt_insert" "', argument " "3"" of type '" "std::vector< int >::size_type""'"); + } + arg3 = static_cast< std::vector< int >::size_type >(val3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "VecInt_insert" "', argument " "4"" of type '" "std::vector< int >::value_type""'"); + } + temp4 = static_cast< std::vector< int >::value_type >(val4); + arg4 = &temp4; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< int >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecInt_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecInt_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::insert(std::vector< int >::iterator,std::vector< int >::value_type const &)\n" + " std::vector< int >::insert(std::vector< int >::iterator,std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecInt_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecInt_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_reserve" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecInt_reserve" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecInt_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecInt_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecInt_capacity" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< int > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecInt",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecInt" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecInt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecVecInt_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_iterator" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_std_vector_Sl_int_Sg__Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___nonzero__" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_vector_Sl_int_Sg__Sg____nonzero__((std::vector< std::vector< int > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___bool__" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_vector_Sl_int_Sg__Sg____bool__((std::vector< std::vector< int > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___len__" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_vector_Sl_int_Sg__Sg____len__((std::vector< std::vector< int > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_pop" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_vector_Sl_int_Sg__Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = swig::from(static_cast< std::vector > >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + std::vector< std::vector< int > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___getslice__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___getslice__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecInt___getslice__" "', argument " "3"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< int > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *)std_vector_Sl_std_vector_Sl_int_Sg__Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + std::vector< std::vector< int > >::difference_type arg3 ; + std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecVecInt___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___setslice__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___setslice__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecInt___setslice__" "', argument " "3"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< int > >::difference_type >(val3); + { + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > > *ptr = (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecVecInt___setslice__" "', argument " "4"" of type '" "std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt___setslice__" "', argument " "4"" of type '" "std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + std::vector< std::vector< int > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___setslice__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___setslice__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecInt___setslice__" "', argument " "3"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< int > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecInt___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecInt___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::__setslice__(std::vector< std::vector< int > >::difference_type,std::vector< std::vector< int > >::difference_type,std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &)\n" + " std::vector< std::vector< int > >::__setslice__(std::vector< std::vector< int > >::difference_type,std::vector< std::vector< int > >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + std::vector< std::vector< int > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___delslice__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___delslice__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecInt___delslice__" "', argument " "3"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< int > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___delitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___delitem__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___getitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *)std_vector_Sl_std_vector_Sl_int_Sg__Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > > *ptr = (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecInt___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____setitem____SWIG_0(arg1,arg2,(std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___delitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecInt___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecInt___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::__delitem__(std::vector< std::vector< int > >::difference_type)\n" + " std::vector< std::vector< int > >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< int > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___getitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___getitem__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > >::value_type *) &std_vector_Sl_std_vector_Sl_int_Sg__Sg____getitem____SWIG_1((std::vector< std::vector< int > > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecInt___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecInt___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::__getitem__(PySliceObject *)\n" + " std::vector< std::vector< int > >::__getitem__(std::vector< std::vector< int > >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::difference_type arg2 ; + std::vector< std::vector< int > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt___setitem__" "', argument " "2"" of type '" "std::vector< std::vector< int > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::difference_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecInt___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg____setitem____SWIG_2(arg1,arg2,(std::vector< int,std::allocator< int > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecInt___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecInt___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecInt___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::__setitem__(PySliceObject *,std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &)\n" + " std::vector< std::vector< int > >::__setitem__(PySliceObject *)\n" + " std::vector< std::vector< int > >::__setitem__(std::vector< std::vector< int > >::difference_type,std::vector< std::vector< int > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_append" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecInt_append" "', argument " "2"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_append" "', argument " "2"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_int_Sg__Sg__append(arg1,(std::vector< int,std::allocator< int > > const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecVecInt")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > > *)new std::vector< std::vector< int > >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int,std::allocator< int > > > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecVecInt",&obj0)) SWIG_fail; + { + std::vector >,std::allocator< std::vector< int,std::allocator< int > > > > *ptr = (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecVecInt" "', argument " "1"" of type '" "std::vector< std::vector< int,std::allocator< int > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecVecInt" "', argument " "1"" of type '" "std::vector< std::vector< int,std::allocator< int > > > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > > *)new std::vector< std::vector< int > >((std::vector< std::vector< int,std::allocator< int > > > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_empty" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< std::vector< int > > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_size" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< int > > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_clear" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int,std::allocator< int > > > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_swap" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecInt_swap" "', argument " "2"" of type '" "std::vector< std::vector< int,std::allocator< int > > > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_swap" "', argument " "2"" of type '" "std::vector< std::vector< int,std::allocator< int > > > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::vector< int,std::allocator< int > > > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< std::vector< int,std::allocator< int > > > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_get_allocator" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< int > > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< std::vector< int > >::allocator_type(static_cast< const std::vector< std::vector< int > >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_begin" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_end" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_rbegin" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_rend" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecInt__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecVecInt",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecVecInt" "', argument " "1"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg1 = static_cast< std::vector< std::vector< int > >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > > *)new std::vector< std::vector< int > >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_pop_back" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_resize" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt_resize" "', argument " "2"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< int > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_erase" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_erase" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_erase" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::iterator arg2 ; + std::vector< std::vector< int > >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< int > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_erase" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_erase" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_erase" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_erase" "', argument " "3"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_erase" "', argument " "3"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecVecInt_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecVecInt_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::erase(std::vector< std::vector< int > >::iterator)\n" + " std::vector< std::vector< int > >::erase(std::vector< std::vector< int > >::iterator,std::vector< std::vector< int > >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecInt__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > >::size_type arg1 ; + std::vector< std::vector< int > >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecVecInt",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecVecInt" "', argument " "1"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg1 = static_cast< std::vector< std::vector< int > >::size_type >(val1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_VecVecInt" "', argument " "2"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecVecInt" "', argument " "2"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > > *)new std::vector< std::vector< int > >(arg1,(std::vector< std::vector< int > >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecInt(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecVecInt__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecVecInt__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecVecInt__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[1], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecVecInt__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecVecInt'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::vector()\n" + " std::vector< std::vector< int > >::vector(std::vector< std::vector< int,std::allocator< int > > > const &)\n" + " std::vector< std::vector< int > >::vector(std::vector< std::vector< int > >::size_type)\n" + " std::vector< std::vector< int > >::vector(std::vector< std::vector< int > >::size_type,std::vector< std::vector< int > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_push_back" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecInt_push_back" "', argument " "2"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_push_back" "', argument " "2"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< std::vector< int > >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_front" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > >::value_type *) &((std::vector< std::vector< int > > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_back" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< int > >::value_type *) &((std::vector< std::vector< int > > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::size_type arg2 ; + std::vector< std::vector< int > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_assign" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt_assign" "', argument " "2"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::size_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecInt_assign" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_assign" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< std::vector< int > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::size_type arg2 ; + std::vector< std::vector< int > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_resize" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt_resize" "', argument " "2"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::size_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecInt_resize" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_resize" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< std::vector< int > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecInt_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecInt_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::resize(std::vector< std::vector< int > >::size_type)\n" + " std::vector< std::vector< int > >::resize(std::vector< std::vector< int > >::size_type,std::vector< std::vector< int > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::iterator arg2 ; + std::vector< std::vector< int > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< int > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecInt_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_insert" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_insert" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_insert" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecInt_insert" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_insert" "', argument " "3"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< std::vector< int > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< int > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::iterator arg2 ; + std::vector< std::vector< int > >::size_type arg3 ; + std::vector< std::vector< int > >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecVecInt_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_insert" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_insert" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecInt_insert" "', argument " "2"" of type '" "std::vector< std::vector< int > >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecInt_insert" "', argument " "3"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg3 = static_cast< std::vector< std::vector< int > >::size_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecVecInt_insert" "', argument " "4"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecInt_insert" "', argument " "4"" of type '" "std::vector< std::vector< int > >::value_type const &""'"); + } + arg4 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< std::vector< int > >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecInt_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< int,std::allocator< int > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecInt_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecInt_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< int > >::insert(std::vector< std::vector< int > >::iterator,std::vector< std::vector< int > >::value_type const &)\n" + " std::vector< std::vector< int > >::insert(std::vector< std::vector< int > >::iterator,std::vector< std::vector< int > >::size_type,std::vector< std::vector< int > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + std::vector< std::vector< int > >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecInt_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_reserve" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecInt_reserve" "', argument " "2"" of type '" "std::vector< std::vector< int > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< int > >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecInt_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< int > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecInt_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecInt_capacity" "', argument " "1"" of type '" "std::vector< std::vector< int > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< int > > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecVecInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< int > > *arg1 = (std::vector< std::vector< int > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecVecInt",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecVecInt" "', argument " "1"" of type '" "std::vector< std::vector< int > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< int > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecVecInt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecUINT8_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_iterator" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_unsigned_SS_char_Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___nonzero__" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_unsigned_SS_char_Sg____nonzero__((std::vector< unsigned char > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___bool__" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_unsigned_SS_char_Sg____bool__((std::vector< unsigned char > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___len__" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_unsigned_SS_char_Sg____len__((std::vector< unsigned char > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_pop" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char >::value_type)std_vector_Sl_unsigned_SS_char_Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_unsigned_SS_char(static_cast< unsigned char >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + std::vector< unsigned char >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< unsigned char,std::allocator< unsigned char > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___getslice__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___getslice__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8___getslice__" "', argument " "3"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg3 = static_cast< std::vector< unsigned char >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char,std::allocator< unsigned char > > *)std_vector_Sl_unsigned_SS_char_Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + std::vector< unsigned char >::difference_type arg3 ; + std::vector< unsigned char,std::allocator< unsigned char > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecUINT8___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___setslice__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___setslice__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8___setslice__" "', argument " "3"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg3 = static_cast< std::vector< unsigned char >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecUINT8___setslice__" "', argument " "4"" of type '" "std::vector< unsigned char,std::allocator< unsigned char > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecUINT8___setslice__" "', argument " "4"" of type '" "std::vector< unsigned char,std::allocator< unsigned char > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< unsigned char,std::allocator< unsigned char > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + std::vector< unsigned char >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___setslice__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___setslice__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8___setslice__" "', argument " "3"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg3 = static_cast< std::vector< unsigned char >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecUINT8___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::__setslice__(std::vector< unsigned char >::difference_type,std::vector< unsigned char >::difference_type,std::vector< unsigned char,std::allocator< unsigned char > > const &)\n" + " std::vector< unsigned char >::__setslice__(std::vector< unsigned char >::difference_type,std::vector< unsigned char >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + std::vector< unsigned char >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___delslice__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___delslice__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8___delslice__" "', argument " "3"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg3 = static_cast< std::vector< unsigned char >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___delitem__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___delitem__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< unsigned char,std::allocator< unsigned char > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___getitem__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char,std::allocator< unsigned char > > *)std_vector_Sl_unsigned_SS_char_Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< unsigned char,std::allocator< unsigned char > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___setitem__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< unsigned char,std::allocator< unsigned char > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< unsigned char,std::allocator< unsigned char > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< unsigned char,std::allocator< unsigned char > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___setitem__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___delitem__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecUINT8___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::__delitem__(std::vector< unsigned char >::difference_type)\n" + " std::vector< unsigned char >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< unsigned char >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___getitem__" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___getitem__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char >::value_type *) &std_vector_Sl_unsigned_SS_char_Sg____getitem____SWIG_1((std::vector< unsigned char > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_unsigned_SS_char(static_cast< unsigned char >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecUINT8___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::__getitem__(PySliceObject *)\n" + " std::vector< unsigned char >::__getitem__(std::vector< unsigned char >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::difference_type arg2 ; + std::vector< unsigned char >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + std::vector< unsigned char >::value_type temp3 ; + unsigned char val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8___setitem__" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8___setitem__" "', argument " "2"" of type '" "std::vector< unsigned char >::difference_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::difference_type >(val2); + ecode3 = SWIG_AsVal_unsigned_SS_char(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp3 = static_cast< std::vector< unsigned char >::value_type >(val3); + arg3 = &temp3; + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg____setitem____SWIG_2(arg1,arg2,(unsigned char const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecUINT8___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecUINT8___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_unsigned_SS_char(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::__setitem__(PySliceObject *,std::vector< unsigned char,std::allocator< unsigned char > > const &)\n" + " std::vector< unsigned char >::__setitem__(PySliceObject *)\n" + " std::vector< unsigned char >::__setitem__(std::vector< unsigned char >::difference_type,std::vector< unsigned char >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< unsigned char >::value_type temp2 ; + unsigned char val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_append" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_unsigned_SS_char(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8_append" "', argument " "2"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp2 = static_cast< std::vector< unsigned char >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_unsigned_SS_char_Sg__append(arg1,(unsigned char const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecUINT8__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecUINT8")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char > *)new std::vector< unsigned char >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecUINT8__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< unsigned char > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecUINT8",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecUINT8" "', argument " "1"" of type '" "std::vector< unsigned char > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecUINT8" "', argument " "1"" of type '" "std::vector< unsigned char > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char > *)new std::vector< unsigned char >((std::vector< unsigned char > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_empty" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< unsigned char > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_size" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< unsigned char > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_clear" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_swap" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecUINT8_swap" "', argument " "2"" of type '" "std::vector< unsigned char > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecUINT8_swap" "', argument " "2"" of type '" "std::vector< unsigned char > &""'"); + } + arg2 = reinterpret_cast< std::vector< unsigned char > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< unsigned char > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_get_allocator" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< unsigned char > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< unsigned char >::allocator_type(static_cast< const std::vector< unsigned char >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_unsigned_char_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_begin" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_end" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_rbegin" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_rend" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecUINT8__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecUINT8",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecUINT8" "', argument " "1"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg1 = static_cast< std::vector< unsigned char >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char > *)new std::vector< unsigned char >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_pop_back" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_resize" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8_resize" "', argument " "2"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< unsigned char >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_erase" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_erase" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_erase" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::iterator arg2 ; + std::vector< unsigned char >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< unsigned char >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_erase" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_erase" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_erase" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_erase" "', argument " "3"" of type '" "std::vector< unsigned char >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_erase" "', argument " "3"" of type '" "std::vector< unsigned char >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecUINT8_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecUINT8_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::erase(std::vector< unsigned char >::iterator)\n" + " std::vector< unsigned char >::erase(std::vector< unsigned char >::iterator,std::vector< unsigned char >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecUINT8__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char >::size_type arg1 ; + std::vector< unsigned char >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + std::vector< unsigned char >::value_type temp2 ; + unsigned char val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< unsigned char > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecUINT8",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecUINT8" "', argument " "1"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg1 = static_cast< std::vector< unsigned char >::size_type >(val1); + ecode2 = SWIG_AsVal_unsigned_SS_char(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_VecUINT8" "', argument " "2"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp2 = static_cast< std::vector< unsigned char >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char > *)new std::vector< unsigned char >(arg1,(std::vector< unsigned char >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecUINT8(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecUINT8__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecUINT8__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecUINT8__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_unsigned_SS_char(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecUINT8__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecUINT8'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::vector()\n" + " std::vector< unsigned char >::vector(std::vector< unsigned char > const &)\n" + " std::vector< unsigned char >::vector(std::vector< unsigned char >::size_type)\n" + " std::vector< unsigned char >::vector(std::vector< unsigned char >::size_type,std::vector< unsigned char >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< unsigned char >::value_type temp2 ; + unsigned char val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_push_back" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_unsigned_SS_char(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8_push_back" "', argument " "2"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp2 = static_cast< std::vector< unsigned char >::value_type >(val2); + arg2 = &temp2; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< unsigned char >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_front" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char >::value_type *) &((std::vector< unsigned char > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_unsigned_SS_char(static_cast< unsigned char >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_back" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< unsigned char >::value_type *) &((std::vector< unsigned char > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_unsigned_SS_char(static_cast< unsigned char >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::size_type arg2 ; + std::vector< unsigned char >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< unsigned char >::value_type temp3 ; + unsigned char val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_assign" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8_assign" "', argument " "2"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::size_type >(val2); + ecode3 = SWIG_AsVal_unsigned_SS_char(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8_assign" "', argument " "3"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp3 = static_cast< std::vector< unsigned char >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< unsigned char >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::size_type arg2 ; + std::vector< unsigned char >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< unsigned char >::value_type temp3 ; + unsigned char val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_resize" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8_resize" "', argument " "2"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::size_type >(val2); + ecode3 = SWIG_AsVal_unsigned_SS_char(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8_resize" "', argument " "3"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp3 = static_cast< std::vector< unsigned char >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< unsigned char >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_unsigned_SS_char(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::resize(std::vector< unsigned char >::size_type)\n" + " std::vector< unsigned char >::resize(std::vector< unsigned char >::size_type,std::vector< unsigned char >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::iterator arg2 ; + std::vector< unsigned char >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + std::vector< unsigned char >::value_type temp3 ; + unsigned char val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< unsigned char >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecUINT8_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_insert" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_insert" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_insert" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_unsigned_SS_char(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8_insert" "', argument " "3"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp3 = static_cast< std::vector< unsigned char >::value_type >(val3); + arg3 = &temp3; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< unsigned char >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< unsigned char >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::iterator arg2 ; + std::vector< unsigned char >::size_type arg3 ; + std::vector< unsigned char >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + std::vector< unsigned char >::value_type temp4 ; + unsigned char val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecUINT8_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_insert" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_insert" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecUINT8_insert" "', argument " "2"" of type '" "std::vector< unsigned char >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecUINT8_insert" "', argument " "3"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg3 = static_cast< std::vector< unsigned char >::size_type >(val3); + ecode4 = SWIG_AsVal_unsigned_SS_char(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "VecUINT8_insert" "', argument " "4"" of type '" "std::vector< unsigned char >::value_type""'"); + } + temp4 = static_cast< std::vector< unsigned char >::value_type >(val4); + arg4 = &temp4; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< unsigned char >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_unsigned_SS_char(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_unsigned_SS_char(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecUINT8_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecUINT8_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< unsigned char >::insert(std::vector< unsigned char >::iterator,std::vector< unsigned char >::value_type const &)\n" + " std::vector< unsigned char >::insert(std::vector< unsigned char >::iterator,std::vector< unsigned char >::size_type,std::vector< unsigned char >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + std::vector< unsigned char >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecUINT8_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_reserve" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecUINT8_reserve" "', argument " "2"" of type '" "std::vector< unsigned char >::size_type""'"); + } + arg2 = static_cast< std::vector< unsigned char >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecUINT8_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< unsigned char >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecUINT8_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecUINT8_capacity" "', argument " "1"" of type '" "std::vector< unsigned char > const *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< unsigned char > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecUINT8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< unsigned char > *arg1 = (std::vector< unsigned char > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecUINT8",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecUINT8" "', argument " "1"" of type '" "std::vector< unsigned char > *""'"); + } + arg1 = reinterpret_cast< std::vector< unsigned char > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecUINT8_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_VecVecUINT8_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_iterator" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (swig::SwigPyIterator *)std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg__iterator(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___nonzero__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____nonzero__((std::vector< std::vector< unsigned char > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___bool__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____bool__((std::vector< std::vector< unsigned char > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___len__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____len__((std::vector< std::vector< unsigned char > > const *)arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_pop" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg__pop(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = swig::from(static_cast< std::vector > >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + std::vector< std::vector< unsigned char > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___getslice__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___getslice__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecUINT8___getslice__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *)std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____getslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + std::vector< std::vector< unsigned char > >::difference_type arg3 ; + std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecVecUINT8___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___setslice__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___setslice__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecUINT8___setslice__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val3); + { + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *ptr = (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecVecUINT8___setslice__" "', argument " "4"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8___setslice__" "', argument " "4"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &""'"); + } + arg4 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + std::vector< std::vector< unsigned char > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___setslice__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___setslice__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecUINT8___setslice__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setslice____SWIG_0(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecUINT8___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecUINT8___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::__setslice__(std::vector< std::vector< unsigned char > >::difference_type,std::vector< std::vector< unsigned char > >::difference_type,std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &)\n" + " std::vector< std::vector< unsigned char > >::__setslice__(std::vector< std::vector< unsigned char > >::difference_type,std::vector< std::vector< unsigned char > >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + std::vector< std::vector< unsigned char > >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___delslice__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___delslice__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecUINT8___delslice__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val3); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____delslice__(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___delitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___delitem__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____delitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___getitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *)std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____getitem____SWIG_0(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *ptr = (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setitem____SWIG_0(arg1,arg2,(std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___delitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____delitem____SWIG_1(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecUINT8___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecUINT8___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::__delitem__(std::vector< std::vector< unsigned char > >::difference_type)\n" + " std::vector< std::vector< unsigned char > >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< unsigned char > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___getitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___getitem__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > >::value_type *) &std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____getitem____SWIG_1((std::vector< std::vector< unsigned char > > const *)arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecUINT8___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecUINT8___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::__getitem__(PySliceObject *)\n" + " std::vector< std::vector< unsigned char > >::__getitem__(std::vector< std::vector< unsigned char > >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::difference_type arg2 ; + std::vector< std::vector< unsigned char > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8___setitem__" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8___setitem__" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::difference_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8___setitem__" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg3 = ptr; + } + try { + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg____setitem____SWIG_2(arg1,arg2,(std::vector< unsigned char,std::allocator< unsigned char > > const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_VecVecUINT8___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecUINT8___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecUINT8___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::__setitem__(PySliceObject *,std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > const &)\n" + " std::vector< std::vector< unsigned char > >::__setitem__(PySliceObject *)\n" + " std::vector< std::vector< unsigned char > >::__setitem__(std::vector< std::vector< unsigned char > >::difference_type,std::vector< std::vector< unsigned char > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_append" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecUINT8_append" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_append" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + std_vector_Sl_std_vector_Sl_unsigned_SS_char_Sg__Sg__append(arg1,(std::vector< unsigned char,std::allocator< unsigned char > > const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecUINT8__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_VecVecUINT8")) SWIG_fail; + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > > *)new std::vector< std::vector< unsigned char > >(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecUINT8__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecVecUINT8",&obj0)) SWIG_fail; + { + std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *ptr = (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_VecVecUINT8" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecVecUINT8" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > const &""'"); + } + arg1 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > > *)new std::vector< std::vector< unsigned char > >((std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > const &)*arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_empty" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)((std::vector< std::vector< unsigned char > > const *)arg1)->empty(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_size" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< unsigned char > > const *)arg1)->size(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_clear" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->clear(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_swap" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecUINT8_swap" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_swap" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > * >(argp2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->swap(*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_get_allocator" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< unsigned char > > const *)arg1)->get_allocator(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj((new std::vector< std::vector< unsigned char > >::allocator_type(static_cast< const std::vector< std::vector< unsigned char > >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_begin" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->begin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_end" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->end(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_rbegin" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rbegin(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_rend" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->rend(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecUINT8__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_VecVecUINT8",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecVecUINT8" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg1 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > > *)new std::vector< std::vector< unsigned char > >(arg1); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_pop_back" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->pop_back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_resize" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8_resize" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< unsigned char > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_erase" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_erase" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_erase" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::iterator arg2 ; + std::vector< std::vector< unsigned char > >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< unsigned char > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_erase" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_erase" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_erase" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_erase" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_erase" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->erase(arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecVecUINT8_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_VecVecUINT8_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::erase(std::vector< std::vector< unsigned char > >::iterator)\n" + " std::vector< std::vector< unsigned char > >::erase(std::vector< std::vector< unsigned char > >::iterator,std::vector< std::vector< unsigned char > >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecUINT8__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > >::size_type arg1 ; + std::vector< std::vector< unsigned char > >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::vector< unsigned char > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_VecVecUINT8",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_VecVecUINT8" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg1 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_VecVecUINT8" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_VecVecUINT8" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > > *)new std::vector< std::vector< unsigned char > >(arg1,(std::vector< std::vector< unsigned char > >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_VecVecUINT8(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_VecVecUINT8__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_VecVecUINT8__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecVecUINT8__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[1], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_VecVecUINT8__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_VecVecUINT8'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::vector()\n" + " std::vector< std::vector< unsigned char > >::vector(std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > const &)\n" + " std::vector< std::vector< unsigned char > >::vector(std::vector< std::vector< unsigned char > >::size_type)\n" + " std::vector< std::vector< unsigned char > >::vector(std::vector< std::vector< unsigned char > >::size_type,std::vector< std::vector< unsigned char > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_push_back" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "VecVecUINT8_push_back" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_push_back" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg2 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->push_back((std::vector< std::vector< unsigned char > >::value_type const &)*arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_front" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > >::value_type *) &((std::vector< std::vector< unsigned char > > const *)arg1)->front(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_back" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (std::vector< std::vector< unsigned char > >::value_type *) &((std::vector< std::vector< unsigned char > > const *)arg1)->back(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::size_type arg2 ; + std::vector< std::vector< unsigned char > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_assign" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8_assign" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecUINT8_assign" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_assign" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->assign(arg2,(std::vector< std::vector< unsigned char > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::size_type arg2 ; + std::vector< std::vector< unsigned char > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_resize" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8_resize" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecUINT8_resize" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_resize" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->resize(arg2,(std::vector< std::vector< unsigned char > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_VecVecUINT8_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecUINT8_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::resize(std::vector< std::vector< unsigned char > >::size_type)\n" + " std::vector< std::vector< unsigned char > >::resize(std::vector< std::vector< unsigned char > >::size_type,std::vector< std::vector< unsigned char > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::iterator arg2 ; + std::vector< std::vector< unsigned char > >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::vector< unsigned char > >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:VecVecUINT8_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_insert" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_insert" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_insert" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "VecVecUINT8_insert" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_insert" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg3 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (arg1)->insert(arg2,(std::vector< std::vector< unsigned char > >::value_type const &)*arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::vector< unsigned char > >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::iterator arg2 ; + std::vector< std::vector< unsigned char > >::size_type arg3 ; + std::vector< std::vector< unsigned char > >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:VecVecUINT8_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_insert" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_insert" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } else { + swig::SwigPyIterator_T >::iterator > *iter_t = dynamic_cast >::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "VecVecUINT8_insert" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VecVecUINT8_insert" "', argument " "3"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg3 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "VecVecUINT8_insert" "', argument " "4"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "VecVecUINT8_insert" "', argument " "4"" of type '" "std::vector< std::vector< unsigned char > >::value_type const &""'"); + } + arg4 = ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->insert(arg2,arg3,(std::vector< std::vector< unsigned char > >::value_type const &)*arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecUINT8_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast >::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_VecVecUINT8_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'VecVecUINT8_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::vector< unsigned char > >::insert(std::vector< std::vector< unsigned char > >::iterator,std::vector< std::vector< unsigned char > >::value_type const &)\n" + " std::vector< std::vector< unsigned char > >::insert(std::vector< std::vector< unsigned char > >::iterator,std::vector< std::vector< unsigned char > >::size_type,std::vector< std::vector< unsigned char > >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + std::vector< std::vector< unsigned char > >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:VecVecUINT8_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_reserve" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VecVecUINT8_reserve" "', argument " "2"" of type '" "std::vector< std::vector< unsigned char > >::size_type""'"); + } + arg2 = static_cast< std::vector< std::vector< unsigned char > >::size_type >(val2); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + (arg1)->reserve(arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_VecVecUINT8_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::vector< unsigned char > >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:VecVecUINT8_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VecVecUINT8_capacity" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = ((std::vector< std::vector< unsigned char > > const *)arg1)->capacity(); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_VecVecUINT8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::vector< unsigned char > > *arg1 = (std::vector< std::vector< unsigned char > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_VecVecUINT8",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_VecVecUINT8" "', argument " "1"" of type '" "std::vector< std::vector< unsigned char > > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::vector< unsigned char > > * >(argp1); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + delete arg1; + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *VecVecUINT8_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_CreateRookWeights__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + bool arg4 ; + int val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:CreateRookWeights",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateRookWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateRookWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateRookWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CreateRookWeights" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateRookWeights(arg1,arg2,arg3,arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateRookWeights__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:CreateRookWeights",&obj0,&obj1,&obj2)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateRookWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateRookWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateRookWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateRookWeights(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateRookWeights__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:CreateRookWeights",&obj0,&obj1)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateRookWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateRookWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateRookWeights(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateRookWeights(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_CreateRookWeights__SWIG_2(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateRookWeights__SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateRookWeights__SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'CreateRookWeights'.\n" + " Possible C/C++ prototypes are:\n" + " CreateRookWeights(std::string,std::string,int,bool)\n" + " CreateRookWeights(std::string,std::string,int)\n" + " CreateRookWeights(std::string,std::string)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_CreateQueenWeights__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + bool arg4 ; + int val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:CreateQueenWeights",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateQueenWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateQueenWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateQueenWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CreateQueenWeights" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateQueenWeights(arg1,arg2,arg3,arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateQueenWeights__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:CreateQueenWeights",&obj0,&obj1,&obj2)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateQueenWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateQueenWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateQueenWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateQueenWeights(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateQueenWeights__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:CreateQueenWeights",&obj0,&obj1)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateQueenWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateQueenWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateQueenWeights(arg1,arg2); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateQueenWeights(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_CreateQueenWeights__SWIG_2(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateQueenWeights__SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateQueenWeights__SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'CreateQueenWeights'.\n" + " Possible C/C++ prototypes are:\n" + " CreateQueenWeights(std::string,std::string,int,bool)\n" + " CreateQueenWeights(std::string,std::string,int)\n" + " CreateQueenWeights(std::string,std::string)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_CreateKNNWeights__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + bool arg4 ; + bool arg5 ; + int val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + bool val5 ; + int ecode5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:CreateKNNWeights",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateKNNWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateKNNWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateKNNWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CreateKNNWeights" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + ecode5 = SWIG_AsVal_bool(obj4, &val5); + if (!SWIG_IsOK(ecode5)) { + SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CreateKNNWeights" "', argument " "5"" of type '" "bool""'"); + } + arg5 = static_cast< bool >(val5); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateKNNWeights(arg1,arg2,arg3,arg4,arg5); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateKNNWeights__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + bool arg4 ; + int val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:CreateKNNWeights",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateKNNWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateKNNWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateKNNWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CreateKNNWeights" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateKNNWeights(arg1,arg2,arg3,arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateKNNWeights__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + int arg3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:CreateKNNWeights",&obj0,&obj1,&obj2)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateKNNWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateKNNWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateKNNWeights" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateKNNWeights(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateKNNWeights(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[6]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 5) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateKNNWeights__SWIG_2(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateKNNWeights__SWIG_1(self, args); + } + } + } + } + } + if (argc == 5) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[4], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateKNNWeights__SWIG_0(self, args); + } + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'CreateKNNWeights'.\n" + " Possible C/C++ prototypes are:\n" + " CreateKNNWeights(std::string,std::string,int,bool,bool)\n" + " CreateKNNWeights(std::string,std::string,int,bool)\n" + " CreateKNNWeights(std::string,std::string,int)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_CreateDistanceWeights__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + double arg3 ; + bool arg4 ; + bool arg5 ; + double val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + bool val5 ; + int ecode5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:CreateDistanceWeights",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateDistanceWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateDistanceWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateDistanceWeights" "', argument " "3"" of type '" "double""'"); + } + arg3 = static_cast< double >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CreateDistanceWeights" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + ecode5 = SWIG_AsVal_bool(obj4, &val5); + if (!SWIG_IsOK(ecode5)) { + SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CreateDistanceWeights" "', argument " "5"" of type '" "bool""'"); + } + arg5 = static_cast< bool >(val5); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateDistanceWeights(arg1,arg2,arg3,arg4,arg5); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateDistanceWeights__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + double arg3 ; + bool arg4 ; + double val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:CreateDistanceWeights",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateDistanceWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateDistanceWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateDistanceWeights" "', argument " "3"" of type '" "double""'"); + } + arg3 = static_cast< double >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CreateDistanceWeights" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateDistanceWeights(arg1,arg2,arg3,arg4); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateDistanceWeights__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::string arg2 ; + double arg3 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:CreateDistanceWeights",&obj0,&obj1,&obj2)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateDistanceWeights" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "CreateDistanceWeights" "', argument " "2"" of type '" "std::string""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CreateDistanceWeights" "', argument " "3"" of type '" "double""'"); + } + arg3 = static_cast< double >(val3); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)CreateDistanceWeights(arg1,arg2,arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CreateDistanceWeights(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[6]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 5) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_double(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateDistanceWeights__SWIG_2(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_double(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateDistanceWeights__SWIG_1(self, args); + } + } + } + } + } + if (argc == 5) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_double(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_bool(argv[4], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CreateDistanceWeights__SWIG_0(self, args); + } + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'CreateDistanceWeights'.\n" + " Possible C/C++ prototypes are:\n" + " CreateDistanceWeights(std::string,std::string,double,bool,bool)\n" + " CreateDistanceWeights(std::string,std::string,double,bool)\n" + " CreateDistanceWeights(std::string,std::string,double)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_LISA__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::vector< double,std::allocator< double > > arg2 ; + std::vector< double,std::allocator< double > > arg3 ; + std::vector< double,std::allocator< double > > *arg4 = 0 ; + std::vector< double,std::allocator< double > > *arg5 = 0 ; + std::vector< int,std::allocator< int > > *arg6 = 0 ; + std::vector< int,std::allocator< int > > *arg7 = 0 ; + int arg8 ; + int arg9 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + void *argp7 = 0 ; + int res7 = 0 ; + int val8 ; + int ecode8 = 0 ; + int val9 ; + int ecode9 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + PyObject * obj7 = 0 ; + PyObject * obj8 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:LISA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > >""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > >""'"); + } + arg3 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "LISA" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp4) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg4 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "LISA" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg5 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "LISA" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp6) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg6 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp6); + res7 = SWIG_ConvertPtr(obj6, &argp7, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res7)) { + SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "LISA" "', argument " "7"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp7) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "7"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg7 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp7); + ecode8 = SWIG_AsVal_int(obj7, &val8); + if (!SWIG_IsOK(ecode8)) { + SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "LISA" "', argument " "8"" of type '" "int""'"); + } + arg8 = static_cast< int >(val8); + ecode9 = SWIG_AsVal_int(obj8, &val9); + if (!SWIG_IsOK(ecode9)) { + SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "LISA" "', argument " "9"" of type '" "int""'"); + } + arg9 = static_cast< int >(val9); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)LISA(arg1,arg2,arg3,*arg4,*arg5,*arg6,*arg7,arg8,arg9); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_LISA__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::vector< double,std::allocator< double > > arg2 ; + std::vector< double,std::allocator< double > > arg3 ; + std::vector< double,std::allocator< double > > *arg4 = 0 ; + std::vector< double,std::allocator< double > > *arg5 = 0 ; + std::vector< int,std::allocator< int > > *arg6 = 0 ; + std::vector< int,std::allocator< int > > *arg7 = 0 ; + int arg8 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + void *argp7 = 0 ; + int res7 = 0 ; + int val8 ; + int ecode8 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + PyObject * obj7 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:LISA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > >""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > >""'"); + } + arg3 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "LISA" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp4) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg4 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "LISA" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg5 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "LISA" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp6) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg6 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp6); + res7 = SWIG_ConvertPtr(obj6, &argp7, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res7)) { + SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "LISA" "', argument " "7"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp7) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "7"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg7 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp7); + ecode8 = SWIG_AsVal_int(obj7, &val8); + if (!SWIG_IsOK(ecode8)) { + SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "LISA" "', argument " "8"" of type '" "int""'"); + } + arg8 = static_cast< int >(val8); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)LISA(arg1,arg2,arg3,*arg4,*arg5,*arg6,*arg7,arg8); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_LISA__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::vector< double,std::allocator< double > > arg2 ; + std::vector< double,std::allocator< double > > arg3 ; + std::vector< double,std::allocator< double > > *arg4 = 0 ; + std::vector< double,std::allocator< double > > *arg5 = 0 ; + std::vector< int,std::allocator< int > > *arg6 = 0 ; + std::vector< int,std::allocator< int > > *arg7 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + void *argp7 = 0 ; + int res7 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:LISA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > >""'"); + } + arg2 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LISA" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > >""'"); + } + arg3 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "LISA" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp4) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg4 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "LISA" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg5 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "LISA" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp6) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg6 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp6); + res7 = SWIG_ConvertPtr(obj6, &argp7, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res7)) { + SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "LISA" "', argument " "7"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp7) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LISA" "', argument " "7"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg7 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp7); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)LISA(arg1,arg2,arg3,*arg4,*arg5,*arg6,*arg7); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_LISA(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[10]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 9) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 7) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = swig::asptr(argv[1], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[6], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_LISA__SWIG_2(self, args); + } + } + } + } + } + } + } + } + if (argc == 8) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = swig::asptr(argv[1], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[6], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[7], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_LISA__SWIG_1(self, args); + } + } + } + } + } + } + } + } + } + if (argc == 9) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = swig::asptr(argv[1], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[6], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[7], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[8], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_LISA__SWIG_0(self, args); + } + } + } + } + } + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'LISA'.\n" + " Possible C/C++ prototypes are:\n" + " LISA(std::string,std::vector< double,std::allocator< double > >,std::vector< double,std::allocator< double > >,std::vector< double,std::allocator< double > > &,std::vector< double,std::allocator< double > > &,std::vector< int,std::allocator< int > > &,std::vector< int,std::allocator< int > > &,int,int)\n" + " LISA(std::string,std::vector< double,std::allocator< double > >,std::vector< double,std::allocator< double > >,std::vector< double,std::allocator< double > > &,std::vector< double,std::allocator< double > > &,std::vector< int,std::allocator< int > > &,std::vector< int,std::allocator< int > > &,int)\n" + " LISA(std::string,std::vector< double,std::allocator< double > >,std::vector< double,std::allocator< double > >,std::vector< double,std::allocator< double > > &,std::vector< double,std::allocator< double > > &,std::vector< int,std::allocator< int > > &,std::vector< int,std::allocator< int > > &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_LocalGeary__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *arg2 = 0 ; + std::vector< double,std::allocator< double > > *arg3 = 0 ; + std::vector< double,std::allocator< double > > *arg4 = 0 ; + std::vector< int,std::allocator< int > > *arg5 = 0 ; + std::vector< int,std::allocator< int > > *arg6 = 0 ; + int arg7 ; + void *argp2 = 0 ; + int res2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + int val7 ; + int ecode7 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:LocalGeary",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LocalGeary" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "LocalGeary" "', argument " "2"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "2"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > * >(argp2); + res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "LocalGeary" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp3) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg3 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "LocalGeary" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp4) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg4 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "LocalGeary" "', argument " "5"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "5"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg5 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "LocalGeary" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp6) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg6 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp6); + ecode7 = SWIG_AsVal_int(obj6, &val7); + if (!SWIG_IsOK(ecode7)) { + SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "LocalGeary" "', argument " "7"" of type '" "int""'"); + } + arg7 = static_cast< int >(val7); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)LocalGeary(arg1,*arg2,*arg3,*arg4,*arg5,*arg6,arg7); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_LocalGeary__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *arg2 = 0 ; + std::vector< double,std::allocator< double > > *arg3 = 0 ; + std::vector< double,std::allocator< double > > *arg4 = 0 ; + std::vector< int,std::allocator< int > > *arg5 = 0 ; + std::vector< int,std::allocator< int > > *arg6 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOO:LocalGeary",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "LocalGeary" "', argument " "1"" of type '" "std::string""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "LocalGeary" "', argument " "2"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "2"" of type '" "std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > * >(argp2); + res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "LocalGeary" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp3) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg3 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "LocalGeary" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp4) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "4"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg4 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "LocalGeary" "', argument " "5"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "5"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg5 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "LocalGeary" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + if (!argp6) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LocalGeary" "', argument " "6"" of type '" "std::vector< int,std::allocator< int > > &""'"); + } + arg6 = reinterpret_cast< std::vector< int,std::allocator< int > > * >(argp6); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)LocalGeary(arg1,*arg2,*arg3,*arg4,*arg5,*arg6); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_LocalGeary(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[8]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 7) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 6) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_LocalGeary__SWIG_1(self, args); + } + } + } + } + } + } + } + if (argc == 7) { + int _v; + int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[6], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_LocalGeary__SWIG_0(self, args); + } + } + } + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'LocalGeary'.\n" + " Possible C/C++ prototypes are:\n" + " LocalGeary(std::string,std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > &,std::vector< double,std::allocator< double > > &,std::vector< double,std::allocator< double > > &,std::vector< int,std::allocator< int > > &,std::vector< int,std::allocator< int > > &,int)\n" + " LocalGeary(std::string,std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > &,std::vector< double,std::allocator< double > > &,std::vector< double,std::allocator< double > > &,std::vector< int,std::allocator< int > > &,std::vector< int,std::allocator< int > > &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_Hinge15(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + std::vector< double,std::allocator< double > > *arg2 = 0 ; + int arg3 ; + bool arg4 ; + std::vector< double,std::allocator< double > > *arg5 = 0 ; + int val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + int val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:Hinge15",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "Hinge15" "', argument " "1"" of type '" "int""'"); + } + arg1 = static_cast< int >(val1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Hinge15" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Hinge15" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + arg2 = ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Hinge15" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "Hinge15" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "Hinge15" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Hinge15" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg5 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp5); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)Hinge15(arg1,(std::vector< double,std::allocator< double > > const &)*arg2,arg3,arg4,*arg5); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_Hinge30(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + std::vector< double,std::allocator< double > > *arg2 = 0 ; + int arg3 ; + bool arg4 ; + std::vector< double,std::allocator< double > > *arg5 = 0 ; + int val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + int val3 ; + int ecode3 = 0 ; + bool val4 ; + int ecode4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:Hinge30",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "Hinge30" "', argument " "1"" of type '" "int""'"); + } + arg1 = static_cast< int >(val1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Hinge30" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Hinge30" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); + } + arg2 = ptr; + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Hinge30" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_bool(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "Hinge30" "', argument " "4"" of type '" "bool""'"); + } + arg4 = static_cast< bool >(val4); + res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "Hinge30" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + if (!argp5) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Hinge30" "', argument " "5"" of type '" "std::vector< double,std::allocator< double > > &""'"); + } + arg5 = reinterpret_cast< std::vector< double,std::allocator< double > > * >(argp5); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)Hinge30(arg1,(std::vector< double,std::allocator< double > > const &)*arg2,arg3,arg4,*arg5); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_PCA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float,std::allocator< float > > *arg1 = 0 ; + std::vector< std::string,std::allocator< std::string > > *arg2 = 0 ; + int arg3 ; + int arg4 ; + int arg5 ; + int arg6 ; + int arg7 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + int val3 ; + int ecode3 = 0 ; + int val4 ; + int ecode4 = 0 ; + int val5 ; + int ecode5 = 0 ; + int val6 ; + int ecode6 = 0 ; + int val7 ; + int ecode7 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + std::string result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:PCA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PCA" "', argument " "1"" of type '" "std::vector< float,std::allocator< float > > &""'"); + } + if (!argp1) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "PCA" "', argument " "1"" of type '" "std::vector< float,std::allocator< float > > &""'"); + } + arg1 = reinterpret_cast< std::vector< float,std::allocator< float > > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "PCA" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "PCA" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::string,std::allocator< std::string > > * >(argp2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "PCA" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "PCA" "', argument " "4"" of type '" "int""'"); + } + arg4 = static_cast< int >(val4); + ecode5 = SWIG_AsVal_int(obj4, &val5); + if (!SWIG_IsOK(ecode5)) { + SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "PCA" "', argument " "5"" of type '" "int""'"); + } + arg5 = static_cast< int >(val5); + ecode6 = SWIG_AsVal_int(obj5, &val6); + if (!SWIG_IsOK(ecode6)) { + SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "PCA" "', argument " "6"" of type '" "int""'"); + } + arg6 = static_cast< int >(val6); + ecode7 = SWIG_AsVal_int(obj6, &val7); + if (!SWIG_IsOK(ecode7)) { + SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "PCA" "', argument " "7"" of type '" "int""'"); + } + arg7 = static_cast< int >(val7); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = PCA(*arg1,*arg2,arg3,arg4,arg5,arg6,arg7); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_std_string(static_cast< std::string >(result)); + return resultobj; +fail: + return NULL; +} + + +static PyMethodDef SwigMethods[] = { + { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, + { (char *)"delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_value", _wrap_SwigPyIterator_value, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_incr", _wrap_SwigPyIterator_incr, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_decr", _wrap_SwigPyIterator_decr, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_distance", _wrap_SwigPyIterator_distance, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_equal", _wrap_SwigPyIterator_equal, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_copy", _wrap_SwigPyIterator_copy, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_next", _wrap_SwigPyIterator_next, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___next__", _wrap_SwigPyIterator___next__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_previous", _wrap_SwigPyIterator_previous, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_advance", _wrap_SwigPyIterator_advance, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___eq__", _wrap_SwigPyIterator___eq__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___ne__", _wrap_SwigPyIterator___ne__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___iadd__", _wrap_SwigPyIterator___iadd__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___isub__", _wrap_SwigPyIterator___isub__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___add__", _wrap_SwigPyIterator___add__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, METH_VARARGS, NULL}, + { (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_VARARGS, NULL}, + { (char *)"VecFloat_iterator", _wrap_VecFloat_iterator, METH_VARARGS, NULL}, + { (char *)"VecFloat___nonzero__", _wrap_VecFloat___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecFloat___bool__", _wrap_VecFloat___bool__, METH_VARARGS, NULL}, + { (char *)"VecFloat___len__", _wrap_VecFloat___len__, METH_VARARGS, NULL}, + { (char *)"VecFloat_pop", _wrap_VecFloat_pop, METH_VARARGS, NULL}, + { (char *)"VecFloat___getslice__", _wrap_VecFloat___getslice__, METH_VARARGS, NULL}, + { (char *)"VecFloat___setslice__", _wrap_VecFloat___setslice__, METH_VARARGS, NULL}, + { (char *)"VecFloat___delslice__", _wrap_VecFloat___delslice__, METH_VARARGS, NULL}, + { (char *)"VecFloat___delitem__", _wrap_VecFloat___delitem__, METH_VARARGS, NULL}, + { (char *)"VecFloat___getitem__", _wrap_VecFloat___getitem__, METH_VARARGS, NULL}, + { (char *)"VecFloat___setitem__", _wrap_VecFloat___setitem__, METH_VARARGS, NULL}, + { (char *)"VecFloat_append", _wrap_VecFloat_append, METH_VARARGS, NULL}, + { (char *)"VecFloat_empty", _wrap_VecFloat_empty, METH_VARARGS, NULL}, + { (char *)"VecFloat_size", _wrap_VecFloat_size, METH_VARARGS, NULL}, + { (char *)"VecFloat_clear", _wrap_VecFloat_clear, METH_VARARGS, NULL}, + { (char *)"VecFloat_swap", _wrap_VecFloat_swap, METH_VARARGS, NULL}, + { (char *)"VecFloat_get_allocator", _wrap_VecFloat_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecFloat_begin", _wrap_VecFloat_begin, METH_VARARGS, NULL}, + { (char *)"VecFloat_end", _wrap_VecFloat_end, METH_VARARGS, NULL}, + { (char *)"VecFloat_rbegin", _wrap_VecFloat_rbegin, METH_VARARGS, NULL}, + { (char *)"VecFloat_rend", _wrap_VecFloat_rend, METH_VARARGS, NULL}, + { (char *)"VecFloat_pop_back", _wrap_VecFloat_pop_back, METH_VARARGS, NULL}, + { (char *)"VecFloat_erase", _wrap_VecFloat_erase, METH_VARARGS, NULL}, + { (char *)"new_VecFloat", _wrap_new_VecFloat, METH_VARARGS, NULL}, + { (char *)"VecFloat_push_back", _wrap_VecFloat_push_back, METH_VARARGS, NULL}, + { (char *)"VecFloat_front", _wrap_VecFloat_front, METH_VARARGS, NULL}, + { (char *)"VecFloat_back", _wrap_VecFloat_back, METH_VARARGS, NULL}, + { (char *)"VecFloat_assign", _wrap_VecFloat_assign, METH_VARARGS, NULL}, + { (char *)"VecFloat_resize", _wrap_VecFloat_resize, METH_VARARGS, NULL}, + { (char *)"VecFloat_insert", _wrap_VecFloat_insert, METH_VARARGS, NULL}, + { (char *)"VecFloat_reserve", _wrap_VecFloat_reserve, METH_VARARGS, NULL}, + { (char *)"VecFloat_capacity", _wrap_VecFloat_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecFloat", _wrap_delete_VecFloat, METH_VARARGS, NULL}, + { (char *)"VecFloat_swigregister", VecFloat_swigregister, METH_VARARGS, NULL}, + { (char *)"VecString_iterator", _wrap_VecString_iterator, METH_VARARGS, NULL}, + { (char *)"VecString___nonzero__", _wrap_VecString___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecString___bool__", _wrap_VecString___bool__, METH_VARARGS, NULL}, + { (char *)"VecString___len__", _wrap_VecString___len__, METH_VARARGS, NULL}, + { (char *)"VecString_pop", _wrap_VecString_pop, METH_VARARGS, NULL}, + { (char *)"VecString___getslice__", _wrap_VecString___getslice__, METH_VARARGS, NULL}, + { (char *)"VecString___setslice__", _wrap_VecString___setslice__, METH_VARARGS, NULL}, + { (char *)"VecString___delslice__", _wrap_VecString___delslice__, METH_VARARGS, NULL}, + { (char *)"VecString___delitem__", _wrap_VecString___delitem__, METH_VARARGS, NULL}, + { (char *)"VecString___getitem__", _wrap_VecString___getitem__, METH_VARARGS, NULL}, + { (char *)"VecString___setitem__", _wrap_VecString___setitem__, METH_VARARGS, NULL}, + { (char *)"VecString_append", _wrap_VecString_append, METH_VARARGS, NULL}, + { (char *)"VecString_empty", _wrap_VecString_empty, METH_VARARGS, NULL}, + { (char *)"VecString_size", _wrap_VecString_size, METH_VARARGS, NULL}, + { (char *)"VecString_clear", _wrap_VecString_clear, METH_VARARGS, NULL}, + { (char *)"VecString_swap", _wrap_VecString_swap, METH_VARARGS, NULL}, + { (char *)"VecString_get_allocator", _wrap_VecString_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecString_begin", _wrap_VecString_begin, METH_VARARGS, NULL}, + { (char *)"VecString_end", _wrap_VecString_end, METH_VARARGS, NULL}, + { (char *)"VecString_rbegin", _wrap_VecString_rbegin, METH_VARARGS, NULL}, + { (char *)"VecString_rend", _wrap_VecString_rend, METH_VARARGS, NULL}, + { (char *)"VecString_pop_back", _wrap_VecString_pop_back, METH_VARARGS, NULL}, + { (char *)"VecString_erase", _wrap_VecString_erase, METH_VARARGS, NULL}, + { (char *)"new_VecString", _wrap_new_VecString, METH_VARARGS, NULL}, + { (char *)"VecString_push_back", _wrap_VecString_push_back, METH_VARARGS, NULL}, + { (char *)"VecString_front", _wrap_VecString_front, METH_VARARGS, NULL}, + { (char *)"VecString_back", _wrap_VecString_back, METH_VARARGS, NULL}, + { (char *)"VecString_assign", _wrap_VecString_assign, METH_VARARGS, NULL}, + { (char *)"VecString_resize", _wrap_VecString_resize, METH_VARARGS, NULL}, + { (char *)"VecString_insert", _wrap_VecString_insert, METH_VARARGS, NULL}, + { (char *)"VecString_reserve", _wrap_VecString_reserve, METH_VARARGS, NULL}, + { (char *)"VecString_capacity", _wrap_VecString_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecString", _wrap_delete_VecString, METH_VARARGS, NULL}, + { (char *)"VecString_swigregister", VecString_swigregister, METH_VARARGS, NULL}, + { (char *)"VecDouble_iterator", _wrap_VecDouble_iterator, METH_VARARGS, NULL}, + { (char *)"VecDouble___nonzero__", _wrap_VecDouble___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecDouble___bool__", _wrap_VecDouble___bool__, METH_VARARGS, NULL}, + { (char *)"VecDouble___len__", _wrap_VecDouble___len__, METH_VARARGS, NULL}, + { (char *)"VecDouble_pop", _wrap_VecDouble_pop, METH_VARARGS, NULL}, + { (char *)"VecDouble___getslice__", _wrap_VecDouble___getslice__, METH_VARARGS, NULL}, + { (char *)"VecDouble___setslice__", _wrap_VecDouble___setslice__, METH_VARARGS, NULL}, + { (char *)"VecDouble___delslice__", _wrap_VecDouble___delslice__, METH_VARARGS, NULL}, + { (char *)"VecDouble___delitem__", _wrap_VecDouble___delitem__, METH_VARARGS, NULL}, + { (char *)"VecDouble___getitem__", _wrap_VecDouble___getitem__, METH_VARARGS, NULL}, + { (char *)"VecDouble___setitem__", _wrap_VecDouble___setitem__, METH_VARARGS, NULL}, + { (char *)"VecDouble_append", _wrap_VecDouble_append, METH_VARARGS, NULL}, + { (char *)"VecDouble_empty", _wrap_VecDouble_empty, METH_VARARGS, NULL}, + { (char *)"VecDouble_size", _wrap_VecDouble_size, METH_VARARGS, NULL}, + { (char *)"VecDouble_clear", _wrap_VecDouble_clear, METH_VARARGS, NULL}, + { (char *)"VecDouble_swap", _wrap_VecDouble_swap, METH_VARARGS, NULL}, + { (char *)"VecDouble_get_allocator", _wrap_VecDouble_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecDouble_begin", _wrap_VecDouble_begin, METH_VARARGS, NULL}, + { (char *)"VecDouble_end", _wrap_VecDouble_end, METH_VARARGS, NULL}, + { (char *)"VecDouble_rbegin", _wrap_VecDouble_rbegin, METH_VARARGS, NULL}, + { (char *)"VecDouble_rend", _wrap_VecDouble_rend, METH_VARARGS, NULL}, + { (char *)"VecDouble_pop_back", _wrap_VecDouble_pop_back, METH_VARARGS, NULL}, + { (char *)"VecDouble_erase", _wrap_VecDouble_erase, METH_VARARGS, NULL}, + { (char *)"new_VecDouble", _wrap_new_VecDouble, METH_VARARGS, NULL}, + { (char *)"VecDouble_push_back", _wrap_VecDouble_push_back, METH_VARARGS, NULL}, + { (char *)"VecDouble_front", _wrap_VecDouble_front, METH_VARARGS, NULL}, + { (char *)"VecDouble_back", _wrap_VecDouble_back, METH_VARARGS, NULL}, + { (char *)"VecDouble_assign", _wrap_VecDouble_assign, METH_VARARGS, NULL}, + { (char *)"VecDouble_resize", _wrap_VecDouble_resize, METH_VARARGS, NULL}, + { (char *)"VecDouble_insert", _wrap_VecDouble_insert, METH_VARARGS, NULL}, + { (char *)"VecDouble_reserve", _wrap_VecDouble_reserve, METH_VARARGS, NULL}, + { (char *)"VecDouble_capacity", _wrap_VecDouble_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecDouble", _wrap_delete_VecDouble, METH_VARARGS, NULL}, + { (char *)"VecDouble_swigregister", VecDouble_swigregister, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_iterator", _wrap_VecVecDouble_iterator, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___nonzero__", _wrap_VecVecDouble___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___bool__", _wrap_VecVecDouble___bool__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___len__", _wrap_VecVecDouble___len__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_pop", _wrap_VecVecDouble_pop, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___getslice__", _wrap_VecVecDouble___getslice__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___setslice__", _wrap_VecVecDouble___setslice__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___delslice__", _wrap_VecVecDouble___delslice__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___delitem__", _wrap_VecVecDouble___delitem__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___getitem__", _wrap_VecVecDouble___getitem__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble___setitem__", _wrap_VecVecDouble___setitem__, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_append", _wrap_VecVecDouble_append, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_empty", _wrap_VecVecDouble_empty, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_size", _wrap_VecVecDouble_size, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_clear", _wrap_VecVecDouble_clear, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_swap", _wrap_VecVecDouble_swap, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_get_allocator", _wrap_VecVecDouble_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_begin", _wrap_VecVecDouble_begin, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_end", _wrap_VecVecDouble_end, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_rbegin", _wrap_VecVecDouble_rbegin, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_rend", _wrap_VecVecDouble_rend, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_pop_back", _wrap_VecVecDouble_pop_back, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_erase", _wrap_VecVecDouble_erase, METH_VARARGS, NULL}, + { (char *)"new_VecVecDouble", _wrap_new_VecVecDouble, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_push_back", _wrap_VecVecDouble_push_back, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_front", _wrap_VecVecDouble_front, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_back", _wrap_VecVecDouble_back, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_assign", _wrap_VecVecDouble_assign, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_resize", _wrap_VecVecDouble_resize, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_insert", _wrap_VecVecDouble_insert, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_reserve", _wrap_VecVecDouble_reserve, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_capacity", _wrap_VecVecDouble_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecVecDouble", _wrap_delete_VecVecDouble, METH_VARARGS, NULL}, + { (char *)"VecVecDouble_swigregister", VecVecDouble_swigregister, METH_VARARGS, NULL}, + { (char *)"VecInt_iterator", _wrap_VecInt_iterator, METH_VARARGS, NULL}, + { (char *)"VecInt___nonzero__", _wrap_VecInt___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecInt___bool__", _wrap_VecInt___bool__, METH_VARARGS, NULL}, + { (char *)"VecInt___len__", _wrap_VecInt___len__, METH_VARARGS, NULL}, + { (char *)"VecInt_pop", _wrap_VecInt_pop, METH_VARARGS, NULL}, + { (char *)"VecInt___getslice__", _wrap_VecInt___getslice__, METH_VARARGS, NULL}, + { (char *)"VecInt___setslice__", _wrap_VecInt___setslice__, METH_VARARGS, NULL}, + { (char *)"VecInt___delslice__", _wrap_VecInt___delslice__, METH_VARARGS, NULL}, + { (char *)"VecInt___delitem__", _wrap_VecInt___delitem__, METH_VARARGS, NULL}, + { (char *)"VecInt___getitem__", _wrap_VecInt___getitem__, METH_VARARGS, NULL}, + { (char *)"VecInt___setitem__", _wrap_VecInt___setitem__, METH_VARARGS, NULL}, + { (char *)"VecInt_append", _wrap_VecInt_append, METH_VARARGS, NULL}, + { (char *)"VecInt_empty", _wrap_VecInt_empty, METH_VARARGS, NULL}, + { (char *)"VecInt_size", _wrap_VecInt_size, METH_VARARGS, NULL}, + { (char *)"VecInt_clear", _wrap_VecInt_clear, METH_VARARGS, NULL}, + { (char *)"VecInt_swap", _wrap_VecInt_swap, METH_VARARGS, NULL}, + { (char *)"VecInt_get_allocator", _wrap_VecInt_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecInt_begin", _wrap_VecInt_begin, METH_VARARGS, NULL}, + { (char *)"VecInt_end", _wrap_VecInt_end, METH_VARARGS, NULL}, + { (char *)"VecInt_rbegin", _wrap_VecInt_rbegin, METH_VARARGS, NULL}, + { (char *)"VecInt_rend", _wrap_VecInt_rend, METH_VARARGS, NULL}, + { (char *)"VecInt_pop_back", _wrap_VecInt_pop_back, METH_VARARGS, NULL}, + { (char *)"VecInt_erase", _wrap_VecInt_erase, METH_VARARGS, NULL}, + { (char *)"new_VecInt", _wrap_new_VecInt, METH_VARARGS, NULL}, + { (char *)"VecInt_push_back", _wrap_VecInt_push_back, METH_VARARGS, NULL}, + { (char *)"VecInt_front", _wrap_VecInt_front, METH_VARARGS, NULL}, + { (char *)"VecInt_back", _wrap_VecInt_back, METH_VARARGS, NULL}, + { (char *)"VecInt_assign", _wrap_VecInt_assign, METH_VARARGS, NULL}, + { (char *)"VecInt_resize", _wrap_VecInt_resize, METH_VARARGS, NULL}, + { (char *)"VecInt_insert", _wrap_VecInt_insert, METH_VARARGS, NULL}, + { (char *)"VecInt_reserve", _wrap_VecInt_reserve, METH_VARARGS, NULL}, + { (char *)"VecInt_capacity", _wrap_VecInt_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecInt", _wrap_delete_VecInt, METH_VARARGS, NULL}, + { (char *)"VecInt_swigregister", VecInt_swigregister, METH_VARARGS, NULL}, + { (char *)"VecVecInt_iterator", _wrap_VecVecInt_iterator, METH_VARARGS, NULL}, + { (char *)"VecVecInt___nonzero__", _wrap_VecVecInt___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___bool__", _wrap_VecVecInt___bool__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___len__", _wrap_VecVecInt___len__, METH_VARARGS, NULL}, + { (char *)"VecVecInt_pop", _wrap_VecVecInt_pop, METH_VARARGS, NULL}, + { (char *)"VecVecInt___getslice__", _wrap_VecVecInt___getslice__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___setslice__", _wrap_VecVecInt___setslice__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___delslice__", _wrap_VecVecInt___delslice__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___delitem__", _wrap_VecVecInt___delitem__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___getitem__", _wrap_VecVecInt___getitem__, METH_VARARGS, NULL}, + { (char *)"VecVecInt___setitem__", _wrap_VecVecInt___setitem__, METH_VARARGS, NULL}, + { (char *)"VecVecInt_append", _wrap_VecVecInt_append, METH_VARARGS, NULL}, + { (char *)"VecVecInt_empty", _wrap_VecVecInt_empty, METH_VARARGS, NULL}, + { (char *)"VecVecInt_size", _wrap_VecVecInt_size, METH_VARARGS, NULL}, + { (char *)"VecVecInt_clear", _wrap_VecVecInt_clear, METH_VARARGS, NULL}, + { (char *)"VecVecInt_swap", _wrap_VecVecInt_swap, METH_VARARGS, NULL}, + { (char *)"VecVecInt_get_allocator", _wrap_VecVecInt_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecVecInt_begin", _wrap_VecVecInt_begin, METH_VARARGS, NULL}, + { (char *)"VecVecInt_end", _wrap_VecVecInt_end, METH_VARARGS, NULL}, + { (char *)"VecVecInt_rbegin", _wrap_VecVecInt_rbegin, METH_VARARGS, NULL}, + { (char *)"VecVecInt_rend", _wrap_VecVecInt_rend, METH_VARARGS, NULL}, + { (char *)"VecVecInt_pop_back", _wrap_VecVecInt_pop_back, METH_VARARGS, NULL}, + { (char *)"VecVecInt_erase", _wrap_VecVecInt_erase, METH_VARARGS, NULL}, + { (char *)"new_VecVecInt", _wrap_new_VecVecInt, METH_VARARGS, NULL}, + { (char *)"VecVecInt_push_back", _wrap_VecVecInt_push_back, METH_VARARGS, NULL}, + { (char *)"VecVecInt_front", _wrap_VecVecInt_front, METH_VARARGS, NULL}, + { (char *)"VecVecInt_back", _wrap_VecVecInt_back, METH_VARARGS, NULL}, + { (char *)"VecVecInt_assign", _wrap_VecVecInt_assign, METH_VARARGS, NULL}, + { (char *)"VecVecInt_resize", _wrap_VecVecInt_resize, METH_VARARGS, NULL}, + { (char *)"VecVecInt_insert", _wrap_VecVecInt_insert, METH_VARARGS, NULL}, + { (char *)"VecVecInt_reserve", _wrap_VecVecInt_reserve, METH_VARARGS, NULL}, + { (char *)"VecVecInt_capacity", _wrap_VecVecInt_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecVecInt", _wrap_delete_VecVecInt, METH_VARARGS, NULL}, + { (char *)"VecVecInt_swigregister", VecVecInt_swigregister, METH_VARARGS, NULL}, + { (char *)"VecUINT8_iterator", _wrap_VecUINT8_iterator, METH_VARARGS, NULL}, + { (char *)"VecUINT8___nonzero__", _wrap_VecUINT8___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___bool__", _wrap_VecUINT8___bool__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___len__", _wrap_VecUINT8___len__, METH_VARARGS, NULL}, + { (char *)"VecUINT8_pop", _wrap_VecUINT8_pop, METH_VARARGS, NULL}, + { (char *)"VecUINT8___getslice__", _wrap_VecUINT8___getslice__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___setslice__", _wrap_VecUINT8___setslice__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___delslice__", _wrap_VecUINT8___delslice__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___delitem__", _wrap_VecUINT8___delitem__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___getitem__", _wrap_VecUINT8___getitem__, METH_VARARGS, NULL}, + { (char *)"VecUINT8___setitem__", _wrap_VecUINT8___setitem__, METH_VARARGS, NULL}, + { (char *)"VecUINT8_append", _wrap_VecUINT8_append, METH_VARARGS, NULL}, + { (char *)"VecUINT8_empty", _wrap_VecUINT8_empty, METH_VARARGS, NULL}, + { (char *)"VecUINT8_size", _wrap_VecUINT8_size, METH_VARARGS, NULL}, + { (char *)"VecUINT8_clear", _wrap_VecUINT8_clear, METH_VARARGS, NULL}, + { (char *)"VecUINT8_swap", _wrap_VecUINT8_swap, METH_VARARGS, NULL}, + { (char *)"VecUINT8_get_allocator", _wrap_VecUINT8_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecUINT8_begin", _wrap_VecUINT8_begin, METH_VARARGS, NULL}, + { (char *)"VecUINT8_end", _wrap_VecUINT8_end, METH_VARARGS, NULL}, + { (char *)"VecUINT8_rbegin", _wrap_VecUINT8_rbegin, METH_VARARGS, NULL}, + { (char *)"VecUINT8_rend", _wrap_VecUINT8_rend, METH_VARARGS, NULL}, + { (char *)"VecUINT8_pop_back", _wrap_VecUINT8_pop_back, METH_VARARGS, NULL}, + { (char *)"VecUINT8_erase", _wrap_VecUINT8_erase, METH_VARARGS, NULL}, + { (char *)"new_VecUINT8", _wrap_new_VecUINT8, METH_VARARGS, NULL}, + { (char *)"VecUINT8_push_back", _wrap_VecUINT8_push_back, METH_VARARGS, NULL}, + { (char *)"VecUINT8_front", _wrap_VecUINT8_front, METH_VARARGS, NULL}, + { (char *)"VecUINT8_back", _wrap_VecUINT8_back, METH_VARARGS, NULL}, + { (char *)"VecUINT8_assign", _wrap_VecUINT8_assign, METH_VARARGS, NULL}, + { (char *)"VecUINT8_resize", _wrap_VecUINT8_resize, METH_VARARGS, NULL}, + { (char *)"VecUINT8_insert", _wrap_VecUINT8_insert, METH_VARARGS, NULL}, + { (char *)"VecUINT8_reserve", _wrap_VecUINT8_reserve, METH_VARARGS, NULL}, + { (char *)"VecUINT8_capacity", _wrap_VecUINT8_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecUINT8", _wrap_delete_VecUINT8, METH_VARARGS, NULL}, + { (char *)"VecUINT8_swigregister", VecUINT8_swigregister, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_iterator", _wrap_VecVecUINT8_iterator, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___nonzero__", _wrap_VecVecUINT8___nonzero__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___bool__", _wrap_VecVecUINT8___bool__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___len__", _wrap_VecVecUINT8___len__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_pop", _wrap_VecVecUINT8_pop, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___getslice__", _wrap_VecVecUINT8___getslice__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___setslice__", _wrap_VecVecUINT8___setslice__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___delslice__", _wrap_VecVecUINT8___delslice__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___delitem__", _wrap_VecVecUINT8___delitem__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___getitem__", _wrap_VecVecUINT8___getitem__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8___setitem__", _wrap_VecVecUINT8___setitem__, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_append", _wrap_VecVecUINT8_append, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_empty", _wrap_VecVecUINT8_empty, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_size", _wrap_VecVecUINT8_size, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_clear", _wrap_VecVecUINT8_clear, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_swap", _wrap_VecVecUINT8_swap, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_get_allocator", _wrap_VecVecUINT8_get_allocator, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_begin", _wrap_VecVecUINT8_begin, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_end", _wrap_VecVecUINT8_end, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_rbegin", _wrap_VecVecUINT8_rbegin, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_rend", _wrap_VecVecUINT8_rend, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_pop_back", _wrap_VecVecUINT8_pop_back, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_erase", _wrap_VecVecUINT8_erase, METH_VARARGS, NULL}, + { (char *)"new_VecVecUINT8", _wrap_new_VecVecUINT8, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_push_back", _wrap_VecVecUINT8_push_back, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_front", _wrap_VecVecUINT8_front, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_back", _wrap_VecVecUINT8_back, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_assign", _wrap_VecVecUINT8_assign, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_resize", _wrap_VecVecUINT8_resize, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_insert", _wrap_VecVecUINT8_insert, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_reserve", _wrap_VecVecUINT8_reserve, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_capacity", _wrap_VecVecUINT8_capacity, METH_VARARGS, NULL}, + { (char *)"delete_VecVecUINT8", _wrap_delete_VecVecUINT8, METH_VARARGS, NULL}, + { (char *)"VecVecUINT8_swigregister", VecVecUINT8_swigregister, METH_VARARGS, NULL}, + { (char *)"CreateRookWeights", _wrap_CreateRookWeights, METH_VARARGS, NULL}, + { (char *)"CreateQueenWeights", _wrap_CreateQueenWeights, METH_VARARGS, NULL}, + { (char *)"CreateKNNWeights", _wrap_CreateKNNWeights, METH_VARARGS, NULL}, + { (char *)"CreateDistanceWeights", _wrap_CreateDistanceWeights, METH_VARARGS, NULL}, + { (char *)"LISA", _wrap_LISA, METH_VARARGS, NULL}, + { (char *)"LocalGeary", _wrap_LocalGeary, METH_VARARGS, NULL}, + { (char *)"Hinge15", _wrap_Hinge15, METH_VARARGS, NULL}, + { (char *)"Hinge30", _wrap_Hinge30, METH_VARARGS, NULL}, + { (char *)"PCA", _wrap_PCA, METH_VARARGS, NULL}, + { NULL, NULL, 0, NULL } +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ + +static swig_type_info _swigt__p_allocator_type = {"_p_allocator_type", "allocator_type *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_difference_type = {"_p_difference_type", "difference_type *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_PyObject = {"_p_p_PyObject", "PyObject **", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_size_type = {"_p_size_type", "size_type *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_double_t = {"_p_std__allocatorT_double_t", "std::vector< double >::allocator_type *|std::allocator< double > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_float_t = {"_p_std__allocatorT_float_t", "std::vector< float >::allocator_type *|std::allocator< float > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_int_t = {"_p_std__allocatorT_int_t", "std::vector< int >::allocator_type *|std::allocator< int > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_std__string_t = {"_p_std__allocatorT_std__string_t", "std::vector< std::string >::allocator_type *|std::allocator< std::string > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t = {"_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t", "std::vector< std::vector< double > >::allocator_type *|std::allocator< std::vector< double,std::allocator< double > > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t = {"_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t", "std::vector< std::vector< int > >::allocator_type *|std::allocator< std::vector< int,std::allocator< int > > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t = {"_p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t", "std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > *|std::vector< std::vector< unsigned char > >::allocator_type *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_unsigned_char_t = {"_p_std__allocatorT_unsigned_char_t", "std::vector< unsigned char >::allocator_type *|std::allocator< unsigned char > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__invalid_argument = {"_p_std__invalid_argument", "std::invalid_argument *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT__Tp__Alloc_t = {"_p_std__vectorT__Tp__Alloc_t", "std::vector< _Tp,_Alloc > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_double_std__allocatorT_double_t_t = {"_p_std__vectorT_double_std__allocatorT_double_t_t", "std::vector< double,std::allocator< double > > *|std::vector< double > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_float_std__allocatorT_float_t_t = {"_p_std__vectorT_float_std__allocatorT_float_t_t", "std::vector< float > *|std::vector< float,std::allocator< float > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_int_std__allocatorT_int_t_t = {"_p_std__vectorT_int_std__allocatorT_int_t_t", "std::vector< int,std::allocator< int > > *|std::vector< int > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t = {"_p_std__vectorT_std__string_std__allocatorT_std__string_t_t", "std::vector< std::string,std::allocator< std::string > > *|std::vector< std::string > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t = {"_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t", "std::vector< std::vector< double > > *|std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *|std::vector< std::vector< double,std::allocator< double > > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t = {"_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t", "std::vector< std::vector< int > > *|std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *|std::vector< std::vector< int,std::allocator< int > > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t = {"_p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t", "std::vector< std::vector< unsigned char > > *|std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > *|std::vector< std::vector< unsigned char,std::allocator< unsigned char > > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t = {"_p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t", "std::vector< unsigned char > *|std::vector< unsigned char,std::allocator< unsigned char > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0, 0, (void*)0, 0}; + +static swig_type_info *swig_type_initial[] = { + &_swigt__p_allocator_type, + &_swigt__p_char, + &_swigt__p_difference_type, + &_swigt__p_p_PyObject, + &_swigt__p_size_type, + &_swigt__p_std__allocatorT_double_t, + &_swigt__p_std__allocatorT_float_t, + &_swigt__p_std__allocatorT_int_t, + &_swigt__p_std__allocatorT_std__string_t, + &_swigt__p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t, + &_swigt__p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t, + &_swigt__p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t, + &_swigt__p_std__allocatorT_unsigned_char_t, + &_swigt__p_std__invalid_argument, + &_swigt__p_std__vectorT__Tp__Alloc_t, + &_swigt__p_std__vectorT_double_std__allocatorT_double_t_t, + &_swigt__p_std__vectorT_float_std__allocatorT_float_t_t, + &_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, + &_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, + &_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, + &_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, + &_swigt__p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, + &_swigt__p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, + &_swigt__p_swig__SwigPyIterator, + &_swigt__p_value_type, +}; + +static swig_cast_info _swigc__p_allocator_type[] = { {&_swigt__p_allocator_type, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_difference_type[] = { {&_swigt__p_difference_type, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_PyObject[] = { {&_swigt__p_p_PyObject, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_size_type[] = { {&_swigt__p_size_type, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_double_t[] = { {&_swigt__p_std__allocatorT_double_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_float_t[] = { {&_swigt__p_std__allocatorT_float_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_int_t[] = { {&_swigt__p_std__allocatorT_int_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_std__string_t[] = { {&_swigt__p_std__allocatorT_std__string_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t[] = { {&_swigt__p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t[] = { {&_swigt__p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t[] = { {&_swigt__p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_unsigned_char_t[] = { {&_swigt__p_std__allocatorT_unsigned_char_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__invalid_argument[] = { {&_swigt__p_std__invalid_argument, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT__Tp__Alloc_t[] = { {&_swigt__p_std__vectorT__Tp__Alloc_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_double_std__allocatorT_double_t_t[] = { {&_swigt__p_std__vectorT_double_std__allocatorT_double_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_float_std__allocatorT_float_t_t[] = { {&_swigt__p_std__vectorT_float_std__allocatorT_float_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_int_std__allocatorT_int_t_t[] = { {&_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t[] = { {&_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t[] = { {&_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t[] = { {&_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t[] = { {&_swigt__p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t[] = { {&_swigt__p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_swig__SwigPyIterator[] = { {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_value_type[] = { {&_swigt__p_value_type, 0, 0, 0},{0, 0, 0, 0}}; + +static swig_cast_info *swig_cast_initial[] = { + _swigc__p_allocator_type, + _swigc__p_char, + _swigc__p_difference_type, + _swigc__p_p_PyObject, + _swigc__p_size_type, + _swigc__p_std__allocatorT_double_t, + _swigc__p_std__allocatorT_float_t, + _swigc__p_std__allocatorT_int_t, + _swigc__p_std__allocatorT_std__string_t, + _swigc__p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t, + _swigc__p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t, + _swigc__p_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t, + _swigc__p_std__allocatorT_unsigned_char_t, + _swigc__p_std__invalid_argument, + _swigc__p_std__vectorT__Tp__Alloc_t, + _swigc__p_std__vectorT_double_std__allocatorT_double_t_t, + _swigc__p_std__vectorT_float_std__allocatorT_float_t_t, + _swigc__p_std__vectorT_int_std__allocatorT_int_t_t, + _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, + _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, + _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, + _swigc__p_std__vectorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_std__allocatorT_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t_t_t, + _swigc__p_std__vectorT_unsigned_char_std__allocatorT_unsigned_char_t_t, + _swigc__p_swig__SwigPyIterator, + _swigc__p_value_type, +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ + +static swig_const_info swig_const_table[] = { +{0, 0, 0, 0.0, 0, 0}}; + +#ifdef __cplusplus +} +#endif +/* ----------------------------------------------------------------------------- + * Type initialization: + * This problem is tough by the requirement that no dynamic + * memory is used. Also, since swig_type_info structures store pointers to + * swig_cast_info structures and swig_cast_info structures store pointers back + * to swig_type_info structures, we need some lookup code at initialization. + * The idea is that swig generates all the structures that are needed. + * The runtime then collects these partially filled structures. + * The SWIG_InitializeModule function takes these initial arrays out of + * swig_module, and does all the lookup, filling in the swig_module.types + * array with the correct data and linking the correct swig_cast_info + * structures together. + * + * The generated swig_type_info structures are assigned staticly to an initial + * array. We just loop through that array, and handle each type individually. + * First we lookup if this type has been already loaded, and if so, use the + * loaded structure instead of the generated one. Then we have to fill in the + * cast linked list. The cast data is initially stored in something like a + * two-dimensional array. Each row corresponds to a type (there are the same + * number of rows as there are in the swig_type_initial array). Each entry in + * a column is one of the swig_cast_info structures for that type. + * The cast_initial array is actually an array of arrays, because each row has + * a variable number of columns. So to actually build the cast linked list, + * we find the array of casts associated with the type, and loop through it + * adding the casts to the list. The one last trick we need to do is making + * sure the type pointer in the swig_cast_info struct is correct. + * + * First off, we lookup the cast->type name to see if it is already loaded. + * There are three cases to handle: + * 1) If the cast->type has already been loaded AND the type we are adding + * casting info to has not been loaded (it is in this module), THEN we + * replace the cast->type pointer with the type pointer that has already + * been loaded. + * 2) If BOTH types (the one we are adding casting info to, and the + * cast->type) are loaded, THEN the cast info has already been loaded by + * the previous module so we just ignore it. + * 3) Finally, if cast->type has not already been loaded, then we add that + * swig_cast_info to the linked list (because the cast->type) pointer will + * be correct. + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* c-mode */ +#endif +#endif + +#if 0 +#define SWIGRUNTIME_DEBUG +#endif + + +SWIGRUNTIME void +SWIG_InitializeModule(void *clientdata) { + size_t i; + swig_module_info *module_head, *iter; + int found, init; + + /* check to see if the circular list has been setup, if not, set it up */ + if (swig_module.next==0) { + /* Initialize the swig_module */ + swig_module.type_initial = swig_type_initial; + swig_module.cast_initial = swig_cast_initial; + swig_module.next = &swig_module; + init = 1; + } else { + init = 0; + } + + /* Try and load any already created modules */ + module_head = SWIG_GetModule(clientdata); + if (!module_head) { + /* This is the first module loaded for this interpreter */ + /* so set the swig module into the interpreter */ + SWIG_SetModule(clientdata, &swig_module); + module_head = &swig_module; + } else { + /* the interpreter has loaded a SWIG module, but has it loaded this one? */ + found=0; + iter=module_head; + do { + if (iter==&swig_module) { + found=1; + break; + } + iter=iter->next; + } while (iter!= module_head); + + /* if the is found in the list, then all is done and we may leave */ + if (found) return; + /* otherwise we must add out module into the list */ + swig_module.next = module_head->next; + module_head->next = &swig_module; + } + + /* When multiple interpeters are used, a module could have already been initialized in + a different interpreter, but not yet have a pointer in this interpreter. + In this case, we do not want to continue adding types... everything should be + set up already */ + if (init == 0) return; + + /* Now work on filling in swig_module.types */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: size %d\n", swig_module.size); +#endif + for (i = 0; i < swig_module.size; ++i) { + swig_type_info *type = 0; + swig_type_info *ret; + swig_cast_info *cast; + +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); +#endif + + /* if there is another module already loaded */ + if (swig_module.next != &swig_module) { + type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); + } + if (type) { + /* Overwrite clientdata field */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found type %s\n", type->name); +#endif + if (swig_module.type_initial[i]->clientdata) { + type->clientdata = swig_module.type_initial[i]->clientdata; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); +#endif + } + } else { + type = swig_module.type_initial[i]; + } + + /* Insert casting types */ + cast = swig_module.cast_initial[i]; + while (cast->type) { + /* Don't need to add information already in the list */ + ret = 0; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); +#endif + if (swig_module.next != &swig_module) { + ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); +#ifdef SWIGRUNTIME_DEBUG + if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); +#endif + } + if (ret) { + if (type == swig_module.type_initial[i]) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: skip old type %s\n", ret->name); +#endif + cast->type = ret; + ret = 0; + } else { + /* Check for casting already in the list */ + swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); +#ifdef SWIGRUNTIME_DEBUG + if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); +#endif + if (!ocast) ret = 0; + } + } + + if (!ret) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); +#endif + if (type->cast) { + type->cast->prev = cast; + cast->next = type->cast; + } + type->cast = cast; + } + cast++; + } + /* Set entry in modules->types array equal to the type */ + swig_module.types[i] = type; + } + swig_module.types[i] = 0; + +#ifdef SWIGRUNTIME_DEBUG + printf("**** SWIG_InitializeModule: Cast List ******\n"); + for (i = 0; i < swig_module.size; ++i) { + int j = 0; + swig_cast_info *cast = swig_module.cast_initial[i]; + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); + while (cast->type) { + printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); + cast++; + ++j; + } + printf("---- Total casts: %d\n",j); + } + printf("**** SWIG_InitializeModule: Cast List ******\n"); +#endif +} + +/* This function will propagate the clientdata field of type to +* any new swig_type_info structures that have been added into the list +* of equivalent types. It is like calling +* SWIG_TypeClientData(type, clientdata) a second time. +*/ +SWIGRUNTIME void +SWIG_PropagateClientData(void) { + size_t i; + swig_cast_info *equiv; + static int init_run = 0; + + if (init_run) return; + init_run = 1; + + for (i = 0; i < swig_module.size; i++) { + if (swig_module.types[i]->clientdata) { + equiv = swig_module.types[i]->cast; + while (equiv) { + if (!equiv->converter) { + if (equiv->type && !equiv->type->clientdata) + SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); + } + equiv = equiv->next; + } + } + } +} + +#ifdef __cplusplus +#if 0 +{ + /* c-mode */ +#endif +} +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Python-specific SWIG API */ +#define SWIG_newvarlink() SWIG_Python_newvarlink() +#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) +#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) + + /* ----------------------------------------------------------------------------- + * global variable support code. + * ----------------------------------------------------------------------------- */ + + typedef struct swig_globalvar { + char *name; /* Name of global variable */ + PyObject *(*get_attr)(void); /* Return the current value */ + int (*set_attr)(PyObject *); /* Set the value */ + struct swig_globalvar *next; + } swig_globalvar; + + typedef struct swig_varlinkobject { + PyObject_HEAD + swig_globalvar *vars; + } swig_varlinkobject; + + SWIGINTERN PyObject * + swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_InternFromString(""); +#else + return PyString_FromString(""); +#endif + } + + SWIGINTERN PyObject * + swig_varlink_str(swig_varlinkobject *v) { +#if PY_VERSION_HEX >= 0x03000000 + PyObject *str = PyUnicode_InternFromString("("); + PyObject *tail; + PyObject *joined; + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + tail = PyUnicode_FromString(var->name); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + if (var->next) { + tail = PyUnicode_InternFromString(", "); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + } + } + tail = PyUnicode_InternFromString(")"); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; +#else + PyObject *str = PyString_FromString("("); + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + PyString_ConcatAndDel(&str,PyString_FromString(var->name)); + if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); + } + PyString_ConcatAndDel(&str,PyString_FromString(")")); +#endif + return str; + } + + SWIGINTERN int + swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { + char *tmp; + PyObject *str = swig_varlink_str(v); + fprintf(fp,"Swig global variables "); + fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(str); + return 0; + } + + SWIGINTERN void + swig_varlink_dealloc(swig_varlinkobject *v) { + swig_globalvar *var = v->vars; + while (var) { + swig_globalvar *n = var->next; + free(var->name); + free(var); + var = n; + } + } + + SWIGINTERN PyObject * + swig_varlink_getattr(swig_varlinkobject *v, char *n) { + PyObject *res = NULL; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->get_attr)(); + break; + } + var = var->next; + } + if (res == NULL && !PyErr_Occurred()) { + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + } + return res; + } + + SWIGINTERN int + swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { + int res = 1; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->set_attr)(p); + break; + } + var = var->next; + } + if (res == 1 && !PyErr_Occurred()) { + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + } + return res; + } + + SWIGINTERN PyTypeObject* + swig_varlink_type(void) { + static char varlink__doc__[] = "Swig var link object"; + static PyTypeObject varlink_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(NULL, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"swigvarlink", /* tp_name */ + sizeof(swig_varlinkobject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor) swig_varlink_dealloc, /* tp_dealloc */ + (printfunc) swig_varlink_print, /* tp_print */ + (getattrfunc) swig_varlink_getattr, /* tp_getattr */ + (setattrfunc) swig_varlink_setattr, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc) swig_varlink_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + (reprfunc) swig_varlink_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + varlink__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + varlink_type = tmp; + type_init = 1; +#if PY_VERSION_HEX < 0x02020000 + varlink_type.ob_type = &PyType_Type; +#else + if (PyType_Ready(&varlink_type) < 0) + return NULL; +#endif + } + return &varlink_type; + } + + /* Create a variable linking object for use later */ + SWIGINTERN PyObject * + SWIG_Python_newvarlink(void) { + swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); + if (result) { + result->vars = 0; + } + return ((PyObject*) result); + } + + SWIGINTERN void + SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { + swig_varlinkobject *v = (swig_varlinkobject *) p; + swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); + if (gv) { + size_t size = strlen(name)+1; + gv->name = (char *)malloc(size); + if (gv->name) { + strncpy(gv->name,name,size); + gv->get_attr = get_attr; + gv->set_attr = set_attr; + gv->next = v->vars; + } + } + v->vars = gv; + } + + SWIGINTERN PyObject * + SWIG_globals(void) { + static PyObject *_SWIG_globals = 0; + if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); + return _SWIG_globals; + } + + /* ----------------------------------------------------------------------------- + * constants/methods manipulation + * ----------------------------------------------------------------------------- */ + + /* Install Constants */ + SWIGINTERN void + SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { + PyObject *obj = 0; + size_t i; + for (i = 0; constants[i].type; ++i) { + switch(constants[i].type) { + case SWIG_PY_POINTER: + obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); + break; + case SWIG_PY_BINARY: + obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); + break; + default: + obj = 0; + break; + } + if (obj) { + PyDict_SetItemString(d, constants[i].name, obj); + Py_DECREF(obj); + } + } + } + + /* -----------------------------------------------------------------------------*/ + /* Fix SwigMethods to carry the callback ptrs when needed */ + /* -----------------------------------------------------------------------------*/ + + SWIGINTERN void + SWIG_Python_FixMethods(PyMethodDef *methods, + swig_const_info *const_table, + swig_type_info **types, + swig_type_info **types_initial) { + size_t i; + for (i = 0; methods[i].ml_name; ++i) { + const char *c = methods[i].ml_doc; + if (c && (c = strstr(c, "swig_ptr: "))) { + int j; + swig_const_info *ci = 0; + const char *name = c + 10; + for (j = 0; const_table[j].type; ++j) { + if (strncmp(const_table[j].name, name, + strlen(const_table[j].name)) == 0) { + ci = &(const_table[j]); + break; + } + } + if (ci) { + void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; + if (ptr) { + size_t shift = (ci->ptype) - types; + swig_type_info *ty = types_initial[shift]; + size_t ldoc = (c - methods[i].ml_doc); + size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; + char *ndoc = (char*)malloc(ldoc + lptr + 10); + if (ndoc) { + char *buff = ndoc; + strncpy(buff, methods[i].ml_doc, ldoc); + buff += ldoc; + strncpy(buff, "swig_ptr: ", 10); + buff += 10; + SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); + methods[i].ml_doc = ndoc; + } + } + } + } + } + } + +#ifdef __cplusplus +} +#endif + +/* -----------------------------------------------------------------------------* + * Partial Init method + * -----------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" +#endif + +SWIGEXPORT +#if PY_VERSION_HEX >= 0x03000000 +PyObject* +#else +void +#endif +SWIG_init(void) { + PyObject *m, *d, *md; +#if PY_VERSION_HEX >= 0x03000000 + static struct PyModuleDef SWIG_module = { +# if PY_VERSION_HEX >= 0x03020000 + PyModuleDef_HEAD_INIT, +# else + { + PyObject_HEAD_INIT(NULL) + NULL, /* m_init */ + 0, /* m_index */ + NULL, /* m_copy */ + }, +# endif + (char *) SWIG_name, + NULL, + -1, + SwigMethods, + NULL, + NULL, + NULL, + NULL + }; +#endif + +#if defined(SWIGPYTHON_BUILTIN) + static SwigPyClientData SwigPyObject_clientdata = { + 0, 0, 0, 0, 0, 0, 0 + }; + static PyGetSetDef this_getset_def = { + (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL + }; + static SwigPyGetSet thisown_getset_closure = { + (PyCFunction) SwigPyObject_own, + (PyCFunction) SwigPyObject_own + }; + static PyGetSetDef thisown_getset_def = { + (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure + }; + PyObject *metatype_args; + PyTypeObject *builtin_pytype; + int builtin_base_count; + swig_type_info *builtin_basetype; + PyObject *tuple; + PyGetSetDescrObject *static_getset; + PyTypeObject *metatype; + SwigPyClientData *cd; + PyObject *public_interface, *public_symbol; + PyObject *this_descr; + PyObject *thisown_descr; + int i; + + (void)builtin_pytype; + (void)builtin_base_count; + (void)builtin_basetype; + (void)tuple; + (void)static_getset; + + /* metatype is used to implement static member variables. */ + metatype_args = Py_BuildValue("(s(O){})", "SwigPyObjectType", &PyType_Type); + assert(metatype_args); + metatype = (PyTypeObject *) PyType_Type.tp_call((PyObject *) &PyType_Type, metatype_args, NULL); + assert(metatype); + Py_DECREF(metatype_args); + metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro; + assert(PyType_Ready(metatype) >= 0); +#endif + + /* Fix SwigMethods to carry the callback ptrs when needed */ + SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); + +#if PY_VERSION_HEX >= 0x03000000 + m = PyModule_Create(&SWIG_module); +#else + m = Py_InitModule((char *) SWIG_name, SwigMethods); +#endif + md = d = PyModule_GetDict(m); + (void)md; + + SWIG_InitializeModule(0); + +#ifdef SWIGPYTHON_BUILTIN + SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); + assert(SwigPyObject_stype); + cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; + if (!cd) { + SwigPyObject_stype->clientdata = &SwigPyObject_clientdata; + SwigPyObject_clientdata.pytype = SwigPyObject_TypeOnce(); + } else if (SwigPyObject_TypeOnce()->tp_basicsize != cd->pytype->tp_basicsize) { + PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules."); +# if PY_VERSION_HEX >= 0x03000000 + return NULL; +# else + return; +# endif + } + + /* All objects have a 'this' attribute */ + this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); + (void)this_descr; + + /* All objects have a 'thisown' attribute */ + thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); + (void)thisown_descr; + + public_interface = PyList_New(0); + public_symbol = 0; + (void)public_symbol; + + PyDict_SetItemString(md, "__all__", public_interface); + Py_DECREF(public_interface); + for (i = 0; SwigMethods[i].ml_name != NULL; ++i) + SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name); + for (i = 0; swig_const_table[i].name != 0; ++i) + SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); +#endif + + SWIG_InstallConstants(d,swig_const_table); + + + /* Initialize threading */ + SWIG_PYTHON_INITIALIZE_THREADS; +#if PY_VERSION_HEX >= 0x03000000 + return m; +#else + return; +#endif +} + diff --git a/swig/setup.py b/swig/setup.py new file mode 100644 index 000000000..da752a168 --- /dev/null +++ b/swig/setup.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension + +GEODA_HOME = '/Users/xun/geoda_trunk/BuildTools/macosx' + +PYTHON_HEADER = '-I/usr/include/python2.7' + +INCLUDE_DIRS = [GEODA_HOME + '/libraries/lib/wx/include/osx_cocoa-unicode-static-3.1', + GEODA_HOME + '/libraries/include/wx-3.1', + GEODA_HOME + '/libraries/include/boost', + GEODA_HOME + '/libraries/include/eigen3', + GEODA_HOME + '/libraries/include', + ] + +LIBRARY_DIRS = [GEODA_HOME + '/libraries/lib',GEODA_HOME + '/temp/boost_1_57_0/stage/lib'] + +LIBRARIES = ['wx_gtk3u_xrc-3.1', 'wx_gtk3u_stc-3.1','wx_gtk3u_richtext-3.1', 'wx_gtk3u_ribbon-3.1', + 'wx_gtk3u_propgrid-3.1', 'wx_gtk3u_aui-3.1', 'wx_gtk3u_gl-3.1','wx_gtk3u_webview-3.1', + 'wx_gtk3u_qa-3.1','wx_baseu_net-3.1','wx_gtk3u_html-3.1', 'wx_gtk3u_adv-3.1', 'wx_gtk3u_core-3.1', + 'wx_baseu_xml-3.1', 'wx_baseu-3.1', 'wxscintilla-3.1', 'boost_thread', 'boost_system', + 'gdal', 'curl', 'cares', + 'pthread', 'GL', 'GLU', 'gthread-2.0', 'X11', 'Xxf86vm', 'gtk-3', 'gdk-3', 'atk-1.0', + 'gio-2.0', 'pangocairo-1.0', 'gdk_pixbuf-2.0', 'cairo-gobject', 'pango-1.0', 'cairo', 'gobject-2.0', + 'glib-2.0', 'png', 'expat', 'wxregexu-3.1', 'wxjpeg-3.1', 'z', 'dl', 'm', 'idn', 'rt', 'ssl', 'webkitgtk-3.0'] + +SWIG_OPTS = ['-c++'] + +EXTRA_COMPILE_ARGS = [ '-D_FILE_OFFSET_BITS=64', '-DwxDEBUG_LEVEL=0', '-D__WXGTK__' ] + +EXTRA_OBJECTS = [GEODA_HOME + '/libraries/lib/libjson_spirit.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/lapack.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/libf2c.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/blas.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/tmglib.a'] + +GEODA_SOURCES = [ + '../DataViewer/DataSource.cpp', + '../DialogTools/FieldNameCorrectionDlg.cpp', + '../Explore/Basemap.cpp', + '../ShapeOperations/AbstractShape.cpp', + '../ShapeOperations/BasePoint.cpp', + '../ShapeOperations/Box.cpp', + '../ShapeOperations/GwtWeight.cpp', + '../ShapeOperations/GalWeight.cpp', + '../ShapeOperations/GeodaWeight.cpp', + '../ShapeOperations/GdaCache.cpp', + '../ShapeOperations/OGRDataAdapter.cpp', + '../ShapeOperations/OGRDatasourceProxy.cpp', + '../ShapeOperations/OGRLayerProxy.cpp', + '../ShapeOperations/OGRFieldProxy.cpp', + '../ShapeOperations/PolysToContigWeights.cpp', + '../ShapeOperations/VoronoiUtils.cpp', + '../VarCalc/NumericTests.cpp', + '../GenGeomAlgs.cpp', + '../GdaConst.cpp', + '../GdaCartoDB.cpp', + '../GdaJson.cpp', + '../GdaShape.cpp', + '../GenUtils.cpp', + '../GeneralWxUtils.cpp', + '../ShpFile.cpp', + '../SpatialIndAlgs.cpp', + '../logger.cpp', + ] + +SOURCE_FILES = ['proxy_wrap.cxx', 'proxy.cpp'] + GEODA_SOURCES + +extensions = [Extension('_geoda', + sources=SOURCE_FILES, + include_dirs=INCLUDE_DIRS, + swig_opts=[], + extra_compile_args=EXTRA_COMPILE_ARGS, + library_dirs=LIBRARY_DIRS, + runtime_library_dirs=LIBRARY_DIRS, + libraries=LIBRARIES, + extra_objects=EXTRA_OBJECTS),] + +setup (name = 'GeoDa', version = '0.1', author = "Xun Li", description = """Python wrapper for GeoDa""", + ext_modules = extensions, py_modules = ["geoda"], + ) + diff --git a/swig/setup_centos.py b/swig/setup_centos.py new file mode 100644 index 000000000..068c5c166 --- /dev/null +++ b/swig/setup_centos.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension + +GEODA_HOME = '/home/xun/downloads/geoda/BuildTools/centos' + +PYTHON_HEADER = '-I/usr/include/python2.7' + +INCLUDE_DIRS = [GEODA_HOME + '/libraries/lib/wx/include/gtk3-unicode-3.1', + GEODA_HOME + '/libraries/include/wx-3.1', + GEODA_HOME + '/libraries/include/boost', + GEODA_HOME + '/libraries/include/eigen3', + GEODA_HOME + '/libraries/include', + '/usr/include/X11', + ] + +LIBRARY_DIRS = [GEODA_HOME + '/libraries/lib',GEODA_HOME + '/temp/boost_1_57_0/stage/lib'] + +""" +'GL', 'GLU', 'gthread-2.0', 'X11', 'Xxf86vm', 'gdk-3', 'atk-1.0', +'gio-2.0', 'pangocairo-1.0', 'gdk_pixbuf-2.0', 'cairo-gobject', 'pango-1.0', 'cairo', 'gobject-2.0', + + 'glib-2.0', 'png', 'expat', 'z', 'dl', 'm', 'idn', 'rt', 'ssl'] +""" +LIBRARIES = [ + 'wx_gtk3u-3.1', 'wx_gtk3u_gl-3.1', + 'boost_thread', 'boost_system', + 'gdal', 'curl', 'cares', 'pthread', + 'GL', 'GLU', 'gthread-2.0', 'expat', 'z', 'dl', 'm', 'idn', 'rt', 'ssl'] + + +SWIG_OPTS = ['-c++'] + +EXTRA_COMPILE_ARGS = [ '-D_FILE_OFFSET_BITS=64', '-DwxDEBUG_LEVEL=0', '-DWXUSINGDLL', '-D__WXGTK__'] + +EXTRA_OBJECTS = [GEODA_HOME + '/libraries/lib/libjson_spirit.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/lapack.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/libf2c.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/blas.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/tmglib.a'] + +GEODA_SOURCES = [ + '../DataViewer/DataSource.cpp', + '../DialogTools/FieldNameCorrectionDlg.cpp', + '../Explore/Basemap.cpp', + '../Explore/CatClassification.cpp', + '../Explore/LisaCoordinator.cpp', + '../Explore/LocalGearyCoordinator.cpp', + '../ShapeOperations/AbstractShape.cpp', + '../ShapeOperations/BasePoint.cpp', + '../ShapeOperations/Box.cpp', + '../ShapeOperations/GwtWeight.cpp', + '../ShapeOperations/GalWeight.cpp', + '../ShapeOperations/GeodaWeight.cpp', + '../ShapeOperations/GdaCache.cpp', + '../ShapeOperations/OGRDataAdapter.cpp', + '../ShapeOperations/OGRDatasourceProxy.cpp', + '../ShapeOperations/OGRLayerProxy.cpp', + '../ShapeOperations/OGRFieldProxy.cpp', + '../ShapeOperations/PolysToContigWeights.cpp', + '../ShapeOperations/RateSmoothing.cpp', + '../ShapeOperations/VoronoiUtils.cpp', + '../ShapeOperations/WeightsManState.cpp', + '../ShapeOperations/WeightUtils.cpp', + '../VarCalc/NumericTests.cpp', + '../GenGeomAlgs.cpp', + '../GdaConst.cpp', + '../GdaCartoDB.cpp', + '../GdaJson.cpp', + '../GdaShape.cpp', + '../GenUtils.cpp', + '../GeneralWxUtils.cpp', + '../ShpFile.cpp', + '../SpatialIndAlgs.cpp', + '../VarTools.cpp', + '../logger.cpp', + '../pca.cpp', + ] + +SOURCE_FILES = ['proxy_wrap.cxx', 'proxy.cpp'] + GEODA_SOURCES + +extensions = [Extension('_geoda', + sources=SOURCE_FILES, + include_dirs=INCLUDE_DIRS, + swig_opts=[], + extra_compile_args=EXTRA_COMPILE_ARGS, + library_dirs=LIBRARY_DIRS, + runtime_library_dirs=LIBRARY_DIRS, + libraries=LIBRARIES, + extra_objects=EXTRA_OBJECTS),] + +setup (name = 'GeoDa', version = '0.1', author = "Xun Li", description = """Python wrapper for GeoDa""", + ext_modules = extensions, py_modules = ["geoda"], + ) + diff --git a/swig/setup_ec2.py b/swig/setup_ec2.py new file mode 100644 index 000000000..22064f1ba --- /dev/null +++ b/swig/setup_ec2.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension + +GEODA_HOME = '/home/ec2-user/downloads/geoda/BuildTools/centos' + +PYTHON_HEADER = '-I/usr/include/python2.7' + +INCLUDE_DIRS = [GEODA_HOME + '/libraries/lib/wx/include/x11univ-unicode-3.1', + GEODA_HOME + '/libraries/include/wx-3.1', + GEODA_HOME + '/libraries/include/boost', + GEODA_HOME + '/libraries/include/eigen3', + GEODA_HOME + '/libraries/include', + '/usr/include/X11', + ] + +LIBRARY_DIRS = [GEODA_HOME + '/libraries/lib',GEODA_HOME + '/temp/boost_1_57_0/stage/lib'] + +""" +'GL', 'GLU', 'gthread-2.0', 'X11', 'Xxf86vm', 'gdk-3', 'atk-1.0', +'gio-2.0', 'pangocairo-1.0', 'gdk_pixbuf-2.0', 'cairo-gobject', 'pango-1.0', 'cairo', 'gobject-2.0', + + 'glib-2.0', 'png', 'expat', 'z', 'dl', 'm', 'idn', 'rt', 'ssl'] +""" +LIBRARIES = [ + 'wx_x11univu-3.1', 'wx_x11univu_gl-3.1', + 'boost_thread', 'boost_system', + 'gdal', 'curl', 'cares', 'pthread', + 'GL', 'GLU', 'gthread-2.0', 'X11', 'Xxf86vm', 'gio-2.0', 'pangocairo-1.0', 'cairo', 'gobject-2.0', 'pango-1.0', 'glib-2.0', 'png', 'expat', 'z', 'dl', 'm', 'idn', 'rt', 'ssl'] + + +SWIG_OPTS = ['-c++'] + +EXTRA_COMPILE_ARGS = [ '-D_FILE_OFFSET_BITS=64', '-DwxDEBUG_LEVEL=0', '-DWXUSINGDLL', '-D__WXUNIVERSAL__', '-D__WXX11__'] + +EXTRA_OBJECTS = [GEODA_HOME + '/libraries/lib/libjson_spirit.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/lapack.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/libf2c.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/blas.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/tmglib.a'] + +GEODA_SOURCES = [ + '../DataViewer/DataSource.cpp', + '../DialogTools/FieldNameCorrectionDlg.cpp', + '../Explore/Basemap.cpp', + '../ShapeOperations/AbstractShape.cpp', + '../ShapeOperations/BasePoint.cpp', + '../ShapeOperations/Box.cpp', + '../ShapeOperations/GwtWeight.cpp', + '../ShapeOperations/GalWeight.cpp', + '../ShapeOperations/GeodaWeight.cpp', + '../ShapeOperations/GdaCache.cpp', + '../ShapeOperations/OGRDataAdapter.cpp', + '../ShapeOperations/OGRDatasourceProxy.cpp', + '../ShapeOperations/OGRLayerProxy.cpp', + '../ShapeOperations/OGRFieldProxy.cpp', + '../ShapeOperations/PolysToContigWeights.cpp', + '../ShapeOperations/VoronoiUtils.cpp', + '../VarCalc/NumericTests.cpp', + '../GenGeomAlgs.cpp', + '../GdaConst.cpp', + '../GdaCartoDB.cpp', + '../GdaJson.cpp', + '../GdaShape.cpp', + '../GenUtils.cpp', + '../GeneralWxUtils.cpp', + '../ShpFile.cpp', + '../SpatialIndAlgs.cpp', + '../logger.cpp', + ] + +SOURCE_FILES = ['proxy_wrap.cxx', 'proxy.cpp'] + GEODA_SOURCES + +extensions = [Extension('_geoda', + sources=SOURCE_FILES, + include_dirs=INCLUDE_DIRS, + swig_opts=[], + extra_compile_args=EXTRA_COMPILE_ARGS, + library_dirs=LIBRARY_DIRS, + runtime_library_dirs=LIBRARY_DIRS, + libraries=LIBRARIES, + extra_objects=EXTRA_OBJECTS),] + +setup (name = 'GeoDa', version = '0.1', author = "Xun Li", description = """Python wrapper for GeoDa""", + ext_modules = extensions, py_modules = ["geoda"], + ) + diff --git a/swig/setup_osx.py b/swig/setup_osx.py new file mode 100644 index 000000000..780bce711 --- /dev/null +++ b/swig/setup_osx.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension + +GEODA_HOME = '/Users/xun/geoda_trunk/BuildTools/macosx' + +PYTHON_HEADER = '-I/usr/include/python2.7' + +INCLUDE_DIRS = [GEODA_HOME + '/libraries/lib/wx/include/osx_cocoa-unicode-static-3.1', + GEODA_HOME + '/libraries/include/wx-3.1', + GEODA_HOME + '/libraries/include/boost', + GEODA_HOME + '/libraries/include/eigen3', + GEODA_HOME + '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include', + GEODA_HOME + '/libraries/include', + ] + +LIBRARY_DIRS = [GEODA_HOME + '/libraries/lib',GEODA_HOME + '/temp/boost_1_57_0/stage/lib'] + +LIBRARIES = ['boost_thread', 'boost_system', 'gdal', 'curl', 'cares', + 'expat', 'wxregexu-3.1', 'wxtiff-3.1', 'wxjpeg-3.1', 'wxpng-3.1', 'z', 'pthread', 'iconv'] + +SWIG_OPTS = ['-c++'] + +EXTRA_COMPILE_ARGS = [ '-D_FILE_OFFSET_BITS=64', '-D__WXMAC__', '-D__WXOSX__', '-D__WXOSX_COCOA__'] + +EXTRA_OBJECTS = [GEODA_HOME + '/libraries/lib/libjson_spirit.a', + GEODA_HOME + '/libraries/lib/libwx_osx_cocoau_xrc-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_osx_cocoau_webview-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_osx_cocoau_qa-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_baseu_net-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_osx_cocoau_html-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_osx_cocoau_adv-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_osx_cocoau_core-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_baseu_xml-3.1.a', + GEODA_HOME + '/libraries/lib/libwx_baseu-3.1.a', + GEODA_HOME + '/libraries/lib/libcurl.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/lapack.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/libf2c.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/blas.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/tmglib.a'] + +GEODA_SOURCES = [ + '../DataViewer/DataSource.cpp', + '../DialogTools/FieldNameCorrectionDlg.cpp', + '../Explore/Basemap.cpp', + '../ShapeOperations/AbstractShape.cpp', + '../ShapeOperations/BasePoint.cpp', + '../ShapeOperations/Box.cpp', + '../ShapeOperations/GwtWeight.cpp', + '../ShapeOperations/GalWeight.cpp', + '../ShapeOperations/GeodaWeight.cpp', + '../ShapeOperations/GdaCache.cpp', + '../ShapeOperations/OGRDataAdapter.cpp', + '../ShapeOperations/OGRDatasourceProxy.cpp', + '../ShapeOperations/OGRLayerProxy.cpp', + '../ShapeOperations/OGRFieldProxy.cpp', + '../ShapeOperations/PolysToContigWeights.cpp', + '../ShapeOperations/VoronoiUtils.cpp', + '../VarCalc/NumericTests.cpp', + '../GenGeomAlgs.cpp', + '../GdaConst.cpp', + '../GdaCartoDB.cpp', + '../GdaJson.cpp', + '../GdaShape.cpp', + '../GenUtils.cpp', + '../GeneralWxUtils.cpp', + '../ShpFile.cpp', + '../SpatialIndAlgs.cpp', + '../logger.cpp', + ] + +SOURCE_FILES = ['proxy_wrap.cxx', 'proxy.cpp'] + GEODA_SOURCES + +extensions = [Extension('_geoda', + sources=SOURCE_FILES, + include_dirs=INCLUDE_DIRS, + swig_opts=[], + extra_compile_args=EXTRA_COMPILE_ARGS, + library_dirs=LIBRARY_DIRS, + runtime_library_dirs=LIBRARY_DIRS, + libraries=LIBRARIES, + extra_objects=EXTRA_OBJECTS),] + +setup (name = 'GeoDa', version = '0.1', author = "Xun Li", description = """Python wrapper for GeoDa""", + ext_modules = extensions, py_modules = ["geoda"], + ) + diff --git a/swig/setup_rcc.py b/swig/setup_rcc.py new file mode 100644 index 000000000..341cc1cb7 --- /dev/null +++ b/swig/setup_rcc.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension + +GEODA_HOME = '/home/django/downloads/geoda/BuildTools/centos' + +DEP_HOME = '/home/django/deps' + +PYTHON_HEADER = '-I/usr/include/python2.7' + +INCLUDE_DIRS = [DEP_HOME + '/lib/wx/include/gtk3-unicode-3.1', + DEP_HOME + '/include/wx-3.1', + DEP_HOME + '/include/boost', + DEP_HOME + '/include/eigen3', + DEP_HOME + '/include', + '/usr/include/X11', + ] + +LIBRARY_DIRS = [DEP_HOME + '/lib'] + +""" +'GL', 'GLU', 'gthread-2.0', 'X11', 'Xxf86vm', 'gdk-3', 'atk-1.0', +'gio-2.0', 'pangocairo-1.0', 'gdk_pixbuf-2.0', 'cairo-gobject', 'pango-1.0', 'cairo', 'gobject-2.0', + + 'glib-2.0', 'png', 'expat', 'z', 'dl', 'm', 'idn', 'rt', 'ssl'] +""" +LIBRARIES = [ + 'wx_gtk3u-3.1', 'wx_gtk3u_gl-3.1', + 'boost_thread', 'boost_system', + 'gdal', 'curl', 'cares', 'pthread', + 'GL', 'GLU', 'gthread-2.0', 'expat', 'z', 'dl', 'm', 'idn', 'rt', 'ssl'] + + +SWIG_OPTS = ['-c++'] + +EXTRA_COMPILE_ARGS = [ '-D_FILE_OFFSET_BITS=64', '-DwxDEBUG_LEVEL=0', '-DWXUSINGDLL', '-D__WXGTK__'] + +EXTRA_OBJECTS = [GEODA_HOME + '/libraries/lib/libjson_spirit.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/lapack.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/libf2c.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/blas.a', + GEODA_HOME + '/temp/CLAPACK-3.2.1/tmglib.a'] + +GEODA_SOURCES = [ + '../DataViewer/DataSource.cpp', + '../DialogTools/FieldNameCorrectionDlg.cpp', + '../Explore/Basemap.cpp', + '../Explore/LisaCoordinator.cpp', + '../Explore/LocalGearyCoordinator.cpp', + '../ShapeOperations/AbstractShape.cpp', + '../ShapeOperations/BasePoint.cpp', + '../ShapeOperations/Box.cpp', + '../ShapeOperations/GwtWeight.cpp', + '../ShapeOperations/GalWeight.cpp', + '../ShapeOperations/GeodaWeight.cpp', + '../ShapeOperations/GdaCache.cpp', + '../ShapeOperations/OGRDataAdapter.cpp', + '../ShapeOperations/OGRDatasourceProxy.cpp', + '../ShapeOperations/OGRLayerProxy.cpp', + '../ShapeOperations/OGRFieldProxy.cpp', + '../ShapeOperations/PolysToContigWeights.cpp', + '../ShapeOperations/RateSmoothing.cpp', + '../ShapeOperations/VoronoiUtils.cpp', + '../ShapeOperations/WeightsManState.cpp', + '../ShapeOperations/WeightUtils.cpp', + '../VarCalc/NumericTests.cpp', + '../GenGeomAlgs.cpp', + '../GdaConst.cpp', + '../GdaCartoDB.cpp', + '../GdaJson.cpp', + '../GdaShape.cpp', + '../GenUtils.cpp', + '../GeneralWxUtils.cpp', + '../ShpFile.cpp', + '../SpatialIndAlgs.cpp', + '../VarTools.cpp', + '../logger.cpp', + ] + +SOURCE_FILES = ['proxy_wrap.cxx', 'proxy.cpp'] + GEODA_SOURCES + +extensions = [Extension('_geoda', + sources=SOURCE_FILES, + include_dirs=INCLUDE_DIRS, + swig_opts=[], + extra_compile_args=EXTRA_COMPILE_ARGS, + library_dirs=LIBRARY_DIRS, + runtime_library_dirs=LIBRARY_DIRS, + libraries=LIBRARIES, + extra_objects=EXTRA_OBJECTS),] + +setup (name = 'GeoDa', version = '0.1', author = "Xun Li", description = """Python wrapper for GeoDa""", + ext_modules = extensions, py_modules = ["geoda"], + ) + diff --git a/swig/test.py b/swig/test.py new file mode 100644 index 000000000..bf7f49f67 --- /dev/null +++ b/swig/test.py @@ -0,0 +1,77 @@ +from geoda import VecDouble, VecInt, VecVecDouble, VecFloat, VecString +import geoda + +import pysal +dbf = pysal.open('../SampleData/nat.dbf','r') +x = dbf.by_col('HR60') +x1 = dbf.by_col('HR70') +n = 3085 + +print "=====================" +print "PCA" +xx = [] +x_names = ['HR60', 'HR70'] +for i in range(n): + xx.append(x[i]) + xx.append(x1[i]) +var_1 = VecFloat(xx) +rtn = geoda.PCA(var_1, VecString(x_names), n, 2, 0, 1, 1); + +print rtn + +print "=====================" +print "hinge15" +var_1 = VecDouble(x) + +breaks = VecDouble([0 for i in range(6)]) +geoda.Hinge15( n, var_1, 6, False, breaks) +for i in range(6): + print breaks[i] + +breaks = VecDouble([0 for i in range(6)]) +geoda.Hinge30( n, var_1, 6, False, breaks) + +for i in range(6): + print breaks[i] + +print "=====================" +print "local geary" +localMoran = VecDouble([0 for i in range(n)]) +sigLocalMoran = VecDouble([0 for i in range(n)]) +sigFlag = VecInt([0 for i in range(n)]) +clusterFlag = VecInt([0 for i in range(n)]) +numPermutation = 599 + +var = VecVecDouble([x,x1]) +geoda.LocalGeary("nat.gal", var, localMoran, sigLocalMoran, sigFlag, clusterFlag, numPermutation) + +for i in range(10): + print localMoran[i], clusterFlag[i], sigLocalMoran[i], sigFlag[i] + +print "=====================" +print "lisa" +var_1 = VecDouble(x) +#var_1 = VecDouble([i for i in x]) +var_2 = VecDouble([0 for i in range(n)]) +localMoran = VecDouble([0 for i in range(n)]) +sigLocalMoran = VecDouble([0 for i in range(n)]) +sigFlag = VecInt([0 for i in range(n)]) +clusterFlag = VecInt([0 for i in range(n)]) +lisa_type = 0 +numPermutation = 599 +geoda.LISA("nat.gal", var_1, var_2, localMoran, sigLocalMoran, sigFlag, clusterFlag, lisa_type, numPermutation) + +for i in range(10): + print localMoran[i], clusterFlag[i], sigLocalMoran[i], sigFlag[i] + +print "=====================" +geoda.CreateQueenWeights("nat.shp","nat.gal",1,False) + +geoda.CreateRookWeights("nat.shp","nat_rook.gal",1,False) + +geoda.CreateKNNWeights("nat.shp","nat_knn.gal", 4) + +geoda.CreateKNNWeights("nat.shp","nat_knn.gal", 4, True, False) + +geoda.CreateDistanceWeights("nat.shp","nat_dist.gal", 1.465776) + diff --git a/version.h b/version.h index 2fab6614d..38b5100a2 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ namespace Gda { const int version_major = 1; - const int version_minor = 8; - const int version_build = 16; - const int version_subbuild = 4; + const int version_minor = 10; + const int version_build = 0; + const int version_subbuild = 0; const int version_year = 2017; - const int version_month = 3; + const int version_month = 6; const int version_day = 1; const int version_night = 0; const int version_type = 2; // 0: alpha, 1: beta, 2: release